Cài đặt Kubernetes trên Ubuntu là quá trình thiết lập một cụm các máy chủ để chạy và quản lý các ứng dụng dưới dạng container, nhằm tận dụng sức mạnh của nền tảng điều phối container hàng đầu này. Trong bài viết này, mình sẽ giúp bạn biết rõ các yêu cầu cần chuẩn bị trước khi cài đặt và hướng dẫn chi tiết từng bước để triển khai một cụm Kubernetes trên hệ điều hành Ubuntu, giúp bạn xây dựng một môi trường mạnh mẽ cho các ứng dụng đám mây.
Những điểm chính
- Yêu cầu cần chuẩn bị trước khi cài Kubernetes: Nắm rõ các yêu cầu cần chuẩn bị đầy đủ để quá trình triển khai diễn ra thuận lợi
- Quy trình cài đặt Kubernetes trên Ubuntu: Hiểu được quy trình các bước cài đặt Kubernetes trên Ubuntu.
- Câu hỏi thường gặp: Được giải đáp các thắc mắc liên quan đến cách cài đặt Kubernetes trên Ubuntu.
Yêu cầu cần chuẩn bị trước khi cài Kubernetes
Trước khi tiến hành cài đặt Kubernetes trên Ubuntu, bạn cần đảm bảo chuẩn bị đầy đủ các điều kiện sau để quá trình triển khai diễn ra thuận lợi và ổn định:
- Tối thiểu hai máy chủ (node) chạy Ubuntu 22.04 hoặc phiên bản tương đương: Mỗi node nên có quyền truy cập với tài khoản có sudo (hoặc root) để thực hiện các thao tác cài đặt và thiết lập hệ thống.
- Đảm bảo kết nối mạng giữa các node: Các máy chủ trong cụm Kubernetes cần có khả năng liên lạc qua mạng nội bộ hoặc Internet, tránh bị tường lửa hoặc policy chặn giao tiếp.
- Tắt swap trên toàn bộ node: Kubernetes yêu cầu tắt hoàn toàn swap để đảm bảo hiệu suất của các container được tối ưu. Thao tác này cần thực hiện trên tất cả máy chủ trước khi khởi tạo cluster.
- Đã cài đặt container runtime tương thích: Kubernetes cần một engine container như Docker, containerd hoặc CRI-O đã được cài đặt và kích hoạt trước trên các node.
- Cài đặt các gói công cụ cần thiết: Trên mỗi node, bạn cần cài đặt bộ công cụ kubeadm, kubelet và kubectl từ kho lưu trữ chính thức của Kubernetes.
- Cập nhật hostname và hosts file: Đặt tên hostname duy nhất cho từng node và cấu hình các bản ghi IP/hostname trong /etc/hosts để các node nhận diện lẫn nhau.
- Mở cổng mạng cần thiết: Đảm bảo các port cần cho Kubernetes hoạt động (ví dụ: 6443, 2379-2380, 10250-10252…) đã được mở trên firewall các node.
- Cấu hình hệ thống mạng: Kích hoạt ip_forward cho mạng, load các kernel module như overlay, br_netfilter và điều chỉnh sysctl phù hợp với tài liệu hướng dẫn.

Quy trình cài đặt Kubernetes trên Ubuntu
Chuẩn bị môi trường chạy container
Tiến hành cài đặt Docker hoặc containerd trên tất cả các node để đảm bảo hệ thống sẵn sàng cho việc triển khai Kubernetes bằng lệnh:
sudo apt update
sudo apt install docker.io -y
sudo systemctl enable docker
sudo systemctl start dockerBạn kiểm tra lại trạng thái Docker bằng lệnh:
sudo systemctl status dockerDocker phải đang chạy ổn định trước khi sang bước kế tiếp.
Thiết lập bộ công cụ quản lý Kubernetes
Thêm kho lưu trữ chính thức và thực hiện cài đặt các thành phần kubeadm, kubelet, kubectl trên từng node để quản lý và khởi tạo cluster bằng lệnh:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/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.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install kubeadm kubelet kubectl -y
sudo apt-mark hold kubeadm kubelet kubectlBạn kiểm tra lại bằng:
kubeadm versionCấu hình hệ thống cho cụm Kubernetes
Bạn tắt swap, bật kernel module và khai báo thông số mạng bằng lệnh:
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab
echo -e "overlay\nbr_netfilter" | sudo tee /etc/modules-load.d/containerd.conf
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --systemĐặt tên và cấu hình nhận diện cho node
Trên master node, bạn thiết lập hostname bằng lệnh:
sudo hostnamectl set-hostname master-nodeTrên từng worker node, bạn dùng lệnh:
sudo hostnamectl set-hostname worker01Sau đó, bạn chỉnh file /etc/hosts trên tất cả các node:
192.168.1.100 master-node
192.168.1.101 worker01
192.168.1.102 worker02
Khởi tạo cluster ở máy chủ điều phối
Bạn khởi động cụm Kubernetes bằng lệnh:
sudo kubeadm init --control-plane-endpoint=master-node --pod-network-cidr=10.244.0.0/16 --upload-certsKhi hoàn tất, bạn lưu lại lệnh kubeadm join hiển thị cuối cùng để kết nối worker sau này. Bạn thiết lập quyền quản trị cho user hiện tại bằng lệnh:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configThiết lập mạng nội bộ cho các pod
Để các pod trong cluster có thể giao tiếp, bạn dùng lệnh:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.ymlNếu node bị taint, bạn gỡ bỏ quyền hạn control-plane để pod có thể chạy:
kubectl taint nodes --all node-role.kubernetes.io/control-plane-Đưa các node worker vào hệ thống
Trên từng worker node, bạn chạy lệnh kubeadm join được hệ thống cung cấp ở bước 5. Trước đó, bạn có thể cần khởi động lại containerd với lệnh sau:
sudo systemctl restart containerd.serviceSau vài phút, các node worker sẽ tự động gắn kết với master.
Kiểm tra trạng thái hoạt động của cụm
Trên master node, bạn xác minh trạng thái bằng câu lệnh:
kubectl get nodes
Nếu tất cả node hiển thị trạng thái Ready, nghĩa là quá trình cài đặt hoàn tất và bạn đã triển khai thành công cụm Kubernetes trên Ubuntu.
Câu hỏi thường gặp
Tại sao Kubernetes yêu cầu tắt swap trên tất cả các node trước khi cài đặt?
Kubernetes yêu cầu tắt swap để đảm bảo hiệu suất ổn định và dự đoán được của các container. Khi swap được bật, hệ thống có thể chuyển dữ liệu từ RAM sang ổ đĩa, gây ra độ trễ không mong muốn và ảnh hưởng tiêu cực đến hiệu suất ứng dụng trong container.
Việc đặt hostname duy nhất và cấu hình hosts file cho các node trong cụm Kubernetes có tầm quan trọng gì?
Đặt hostname duy nhất giúp phân biệt các node. Cấu hình hosts file (/etc/hosts) với IP và hostname của tất cả các node đảm bảo rằng chúng có thể nhận diện và giao tiếp với nhau một cách chính xác qua tên miền nội bộ, điều cần thiết cho hoạt động của cụm.
Nếu sau khi cài đặt, một số node hiển thị trạng thái “NotReady” khi chạy kubectl get nodes, tôi nên kiểm tra những gì?
Khi node ở trạng thái “NotReady”, bạn nên kiểm tra kết nối mạng giữa các node, đảm bảo tường lửa đã mở đúng cổng, kiểm tra trạng thái dịch vụ kubelet (sudo systemctl status kubelet) và containerd/Docker, cũng như xem log của kubelet (sudo journalctl -u kubelet) để tìm các lỗi cụ thể.
Cài đặt Kubernetes trên Ubuntu là một quá trình đòi hỏi sự chuẩn bị kỹ lưỡng và tuân thủ các bước cấu hình hệ thống chi tiết. Với một cụm Kubernetes được triển khai thành công, bạn sẽ có trong tay một nền tảng mạnh mẽ để quản lý, mở rộng và tự động hóa việc triển khai các ứng dụng container của mình, mang lại sự linh hoạt và hiệu quả cao cho hạ tầng phát triển.




