Cài Đặt Kubernetes Cơ Bản với Kubeadm trên Linux
Giới Thiệu
Kubernetes (thường gọi là K8s) là một nền tảng mã nguồn mở mạnh mẽ để tự động hóa việc triển khai, mở rộng và quản lý các ứng dụng được đóng gói (containerized applications). Nó giúp bạn quản lý các container trên nhiều máy chủ, đảm bảo ứng dụng của bạn luôn hoạt động ổn định và có thể mở rộng dễ dàng. Việc cài đặt Kubernetes cơ bản là bước đầu tiên để bạn làm quen và khám phá sức mạnh của nền tảng này.
Trong hướng dẫn này, chúng ta sẽ cài đặt một cluster Kubernetes nhỏ gồm một Master Node và một Worker Node sử dụng kubeadm trên hệ điều hành Linux. kubeadm là một công cụ giúp khởi tạo một cluster Kubernetes tối thiểu và tuân thủ các thực tiễn tốt nhất.
📋 Thời gian: 45 phút | Độ khó: Trung bình
Yêu Cầu
Để thực hiện theo hướng dẫn này, bạn cần chuẩn bị các điều kiện sau:
- Hai máy chủ Linux: Một cho Master Node và một cho Worker Node. Khuyến nghị sử dụng Ubuntu 20.04 LTS hoặc 22.04 LTS.
- Master Node: Tối thiểu 2 CPU, 2GB RAM và 20GB ổ đĩa trống.
- Worker Node: Tối thiểu 1 CPU, 1GB RAM và 10GB ổ đĩa trống.
- Quyền
sudo: Người dùng có quyền thực thi lệnhsudotrên cả hai máy chủ. - Kết nối Internet: Cần thiết để tải xuống các gói phần mềm.
- Vô hiệu hóa Swap: Kubernetes yêu cầu swap phải được tắt.
- Mở các cổng cần thiết:
- Master Node: 6443, 2379-2380, 10250, 10251, 10252
- Worker Node: 10250, 30000-32767
- Hoặc đơn giản hơn là tắt firewall (chỉ nên làm trong môi trường thử nghiệm).
- Địa chỉ IP tĩnh cho cả hai máy chủ (khuyến nghị).
Các Bước Thực Hiện
Bước 1: Chuẩn bị các máy chủ (Master và Worker)
Thực hiện các lệnh sau trên CẢ HAI MÁY CHỦ (Master và Worker).
-
Cập nhật hệ thống và cài đặt các gói cần thiết:
# Cập nhật danh sách gói và nâng cấp các gói đã cài đặt
sudo apt update -y
sudo apt upgrade -y
# Cài đặt các gói cần thiết cho việc tải xuống qua HTTPS
sudo apt install -y apt-transport-https ca-certificates curl gnupg -
Vô hiệu hóa Swap: ⚠️ Quan trọng: Kubernetes không hoạt động nếu swap được bật.
# Tắt swap ngay lập tức
sudo swapoff -a
# Chỉnh sửa file /etc/fstab để vô hiệu hóa swap vĩnh viễn
# Tìm dòng chứa "swap" và thêm dấu # vào đầu dòng để comment nó lại.
# Ví dụ: /swapfile none swap sw 0 0 -> #/swapfile none swap sw 0 0
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab -
Thêm các mô-đun hạt nhân (kernel modules) và cấu hình sysctl: Các mô-đun
overlayvàbr_netfiltercần thiết cho Containerd và network của Kubernetes.# Tải các mô-đun hạt nhân
sudo modprobe overlay
sudo modprobe br_netfilter
# Thêm cấu hình sysctl cho Kubernetes networking
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# Áp dụng các thay đổi sysctl
sudo sysctl --system -
Tắt Firewall (chỉ cho môi trường thử nghiệm) hoặc mở cổng: 💡 Tip: Trong môi trường sản phẩm, bạn nên cấu hình firewall để mở các cổng cụ thể thay vì tắt hoàn toàn.
# Tắt tường lửa UFW (trên Ubuntu)
sudo ufw disable -
Cài đặt Container Runtime (Containerd): Kubernetes cần một container runtime để chạy các container. Containerd là runtime khuyến nghị.
# Thêm khóa GPG của Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Thêm repository của Docker
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Cập nhật lại danh sách gói và cài đặt containerd
sudo apt update -y
sudo apt install -y containerd.io
# Tạo file cấu hình mặc định cho containerd
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# Chỉnh sửa file cấu hình để sử dụng systemd cgroup driver
# Tìm dòng SystemdCgroup = false và đổi thành SystemdCgroup = true
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
# Khởi động lại containerd để áp dụng thay đổi
sudo systemctl restart containerd
sudo systemctl enable containerd -
Cài đặt
kubelet,kubeadm,kubectl:# Tải khóa GPG của Google Cloud
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# Thêm repository của Kubernetes
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
# Cập nhật danh sách gói và cài đặt các công cụ Kubernetes
sudo apt update -y
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # Ngăn chặn việc tự động nâng cấp
Bước 2: Khởi tạo Master Node
Thực hiện các lệnh sau CHỈ TRÊN MASTER NODE.
-
Khởi tạo Kubernetes Cluster: Sử dụng
kubeadm initđể khởi tạo cluster. ThayYOUR_MASTER_IPbằng địa chỉ IP tĩnh của Master Node.# Khởi tạo cluster. Sử dụng --pod-network-cidr để định nghĩa dải IP cho Pods.
# Calico thường dùng 192.168.0.0/16
sudo kubeadm init --apiserver-advertise-address=YOUR_MASTER_IP --pod-network-cidr=192.168.0.0/16✅ Sau khi lệnh chạy thành công, bạn sẽ nhận được một thông báo chúc mừng và các hướng dẫn để cấu hình
kubectlvà lệnhkubeadm joincho Worker Nodes. Hãy lưu lại lệnhkubeadm joinnày, bạn sẽ cần nó cho Bước 3. -
Cấu hình
kubectlcho người dùng hiện tại:mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config -
Cài đặt Container Network Interface (CNI - Calico): CNI là cần thiết để các Pods có thể giao tiếp với nhau.
# Tải file cấu hình Calico
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml💡 Tip: Có thể mất vài phút để các Pods của Calico khởi động. Bạn có thể kiểm tra trạng thái bằng
kubectl get pods -n kube-system.
Bước 3: Tham gia Worker Node vào Cluster
Thực hiện các lệnh sau CHỈ TRÊN WORKER NODE.
-
Tham gia Worker Node vào Cluster: Sử dụng lệnh
kubeadm joinmà bạn đã lưu lại từ Bước 2.1. Lệnh này sẽ có dạng như sau:sudo kubeadm join YOUR_MASTER_IP:6443 --token YOUR_TOKEN \
--discovery-token-ca-cert-hash sha256:YOUR_HASHThay thế
YOUR_MASTER_IP,YOUR_TOKEN, vàYOUR_HASHbằng thông tin thực tế từ đầu ra của lệnhkubeadm inittrên Master Node.✅ Sau khi lệnh chạy thành công, Worker Node sẽ bắt đầu tham gia vào cluster.
Bước 4: Kiểm tra Cluster
Thực hiện các lệnh sau CHỈ TRÊN MASTER NODE.
-
Kiểm tra trạng thái các Node:
kubectl get nodesBạn sẽ thấy cả Master Node và Worker Node với trạng thái
Ready. Có thể mất một chút thời gian để Worker Node chuyển sang trạng tháiReadysau khi tham gia. -
Kiểm tra trạng thái các Pods trong
kube-systemnamespace:kubectl get pods -n kube-systemTất cả các Pods (bao gồm
kube-apiserver,kube-controller-manager,kube-scheduler,etcd,kube-proxy, và các Pods của CNI Calico) nên có trạng tháiRunning.
Troubleshooting
-
Node ở trạng thái
NotReady:- Nguyên nhân: Thường là do CNI chưa được cài đặt hoặc cấu hình sai trên Master Node, hoặc firewall đang chặn các cổng cần thiết.
- Cách xử lý:
- Kiểm tra lại xem bạn đã chạy lệnh
kubectl apply -f calico.yamltrên Master Node chưa. - Đảm bảo firewall đã được tắt hoặc các cổng cần thiết đã được mở.
- Kiểm tra log của
kubelettrên Node bị lỗi:sudo journalctl -u kubelet.
- Kiểm tra lại xem bạn đã chạy lệnh
-
Lỗi
kubeadm initkhông chạy (ví dụ:[ERROR Swap]: running with swap on is not supported):- Nguyên nhân: Bạn chưa vô hiệu hóa swap thành công.
- Cách xử lý: Chắc chắn rằng bạn đã thực hiện
sudo swapoff -avà comment dòng swap trong/etc/fstabnhư hướng dẫn ở Bước 1.
-
Lỗi
kubectlkhông kết nối (ví dụ:The connection to the server localhost:8080 was refused):- Nguyên nhân: File cấu hình
kubeconfigchưa được thiết lập đúng. - Cách xử lý: Đảm bảo bạn đã chạy các lệnh cấu hình
kubectltrên Master Node sau khikubeadm initthành công (Bước 2.2).
- Nguyên nhân: File cấu hình
-
Lỗi khi Worker Node tham gia Cluster (lệnh
kubeadm join):- Nguyên nhân: Token đã hết hạn (mặc định 24 giờ) hoặc hash CA cert không đúng.
- Cách xử lý: Trên Master Node, tạo một join token mới:
Sử dụng lệnh
sudo kubeadm token create --print-join-commandkubeadm joinmới được in ra trên Worker Node.
Kết Luận
Chúc mừng! Bạn đã hoàn thành việc cài đặt một cluster Kubernetes cơ bản với một Master Node và một Worker Node sử dụng kubeadm. Giờ đây, bạn đã có một môi trường để triển khai và quản lý các ứng dụng container của mình.
Việc cài đặt này là bước đệm quan trọng để bạn khám phá sâu hơn về Kubernetes.
Best practices và các bước tiếp theo:
- Bảo mật: Trong môi trường sản phẩm, hãy cấu hình firewall một cách cẩn thận, sử dụng chứng chỉ SSL/TLS, và quản lý quyền truy cập.
- Mở rộng: Thêm nhiều Worker Node vào cluster để tăng khả năng chịu tải.
- Giám sát: Cài đặt các công cụ giám sát như Prometheus và Grafana để theo dõi hiệu suất của cluster và ứng dụng.
- Triển khai ứng dụng: Bắt đầu triển khai các ứng dụng mẫu để làm quen với các khái niệm như Pods, Deployments, Services và Ingress.
Hãy tiếp tục khám phá và thử nghiệm với cluster Kubernetes mới của bạn!