👋 Xin chào các bạn
Hôm nay mình sẽ chia sẻ cách setup cụm K8s từ A - Z.
Cấu hình yêu cầu: Tối thiểu 2G RAM và 20GB Disk.
Mình sẽ setup cụm trên 2 máy, có thể dùng máy ảo hoặc VPS đều được.
🖥️ Thông tin các Node
Node | IP | Hostname |
---|---|---|
k8s-master | 192.168.1.111 | k8s-master.local |
k8s-worker1 | 192.168.1.112 | k8s-worker1.local |
📘 1. Kubernetes là gì?
Kubernetes (K8s) là một hệ thống để quản lý, điều phối các ứng dụng container trên nhiều máy chủ (cluster).
Nó cho phép bạn:
- Scale tài nguyên linh hoạt
- Update/Rollback dịch vụ
- Tự động khôi phục ứng dụng
So với Docker Swarm, Kubernetes mạnh mẽ và mở rộng tốt hơn.
🧱 2. Kiến trúc tổng quan của Kubernetes
Hệ thống K8s bao gồm nhiều thành phần, dưới đây là sơ đồ minh họa và mô tả ngắn gọn:
- etcd: Lưu cấu hình cluster
- kube-apiserver: Cổng REST API cho K8s
- kube-scheduler: Phân phối Pod
- kube-controller-manager: Giám sát trạng thái cluster
- kubelet: Quản lý Pod trên từng node
- kube-proxy: Quản lý mạng và load balancing
⚙️ 3. Tiến hành cài đặt
✅ 3.1 Cập nhật hệ điều hành (trên tất cả các node)
sudo apt update
sudo apt upgrade -y
sudo reboot
✅ 3.2 Đặt hostname và cấu hình /etc/hosts
Trên master:
sudo hostnamectl set-hostname "k8s-master.local"
Trên worker:
sudo hostnamectl set-hostname "k8s-worker1.local"
Sửa file hosts trên cả 2 node:
sudo nano /etc/hosts
Thêm:
192.168.1.111 k8s-master.local k8s-master
192.168.1.112 k8s-worker1.local k8s-worker1
✅ 3.3 Tắt swap và cấu hình kernel
sudo swapoff -a
sudo nano /etc/fstab
# comment dòng swap:
#/swap.img none swap sw 0 0
Load kernel modules:
sudo tee /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF sudo modprobe overlay
sudo modprobe br_netfilter
Set kernel params:
sudo tee /etc/sysctl.d/kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF sudo sysctl --system
✅ 3.4 Cài đặt Containerd
sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y containerd.io
Cấu hình containerd:
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd
✅ 3.5 Cài đặt Kubernetes tools
Cài đặt Kubernetes các bạn nên làm theo tài liệu nhé. Tại thời điểm mình viết bài thì đã có v1.33. Các bạn chọn version phù hợp với mình nhé (https://kubernetes.io/blog/2023/08/15/pkgs-k8s-io-introduction/)
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
✅ 3.6 Khởi tạo cluster (chỉ chạy lệnh trên Master node)
sudo kubeadm init \ --pod-network-cidr=10.10.0.0/16 \ --control-plane-endpoint=k8s-master.local
Trong đó 10.10.0.0/16 là CIDR của pod network, bạn có thể thay theo nhu cầu.
Cấu hình kubectl
:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kiểm tra trạng thái:
kubectl cluster-info
kubectl get nodes
✅ 3.7 Thêm Worker node vào cluster (Chạy trên Worker node)
Chạy lệnh được tạo từ master như:
kubeadm join k8s-master.local:6443 --token abc123.456789abcdef \ --discovery-token-ca-cert-hash sha256:<your-hash>
Trên master kiểm tra:
kubectl get nodes
✅ 3.8 Cài đặt Calico (trên master)
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml -O
Mở file và sửa CALICO_IPV4POOL_CIDR
:
- name: CALICO_IPV4POOL_CIDR value: "10.10.0.0/16"
Cài calico:
kubectl apply -f calico.yaml
Kiểm tra pods:
kubectl get pods -n kube-system
📊 4. Cài đặt Kubernetes Dashboard và Kết luận
Cài đặt giao diện quản lý cho cluster là tùy chọn, giúp quản lý trực quan hơn. Thực hiện các lệnh sau để cài Dashboard bằng NodePort:
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended.yaml
kubectl apply -f recommended.yaml
kubectl --namespace kubernetes-dashboard patch svc kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'
echo "spec: ports: - nodePort: 32000 port: 443 protocol: TCP targetPort: 8443" > nodeport_dashboard_patch.yaml
kubectl -n kubernetes-dashboard patch svc kubernetes-dashboard --patch "$(cat nodeport_dashboard_patch.yaml)"
kubectl get deployments -n kubernetes-dashboard
kubectl get pods -n kubernetes-dashboard
kubectl get svc -n kubernetes-dashboard Truy cập Dashboard qua địa chỉ: https://<IP_node>:32000 📈Kết luận 🎉 Vậy là chúng ta đã hoàn tất việc thiết lập một cụm Kubernetes cơ bản với **1 master** và **1 worker**, sử dụng **Calico** làm mạng Pod, đồng thời cài đặt thành công **Kubernetes Dashboard** để quản lý cụm dễ dàng và trực quan hơn. 👉 Bạn đã có nền tảng vững chắc để tiếp tục khám phá các tính năng nâng cao của Kubernetes như quản lý Secret, Persistent Volume, CI/CD, hoặc mở rộng cluster theo nhu cầu. Chúc bạn thành công và học tập vui vẻ! 🚀