+1

Cài đặt k8s cluster từ A - Z

👋 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 RAM20GB 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:

K8s Architecture

  • 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 master1 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ẻ! 🚀


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí