Hướng Dẫn Cài Đặt Kubernetes Từ A–Z: Chi Tiết Cho Người Mới Bắt Đầu

Kubernetes (thường gọi tắt là K8s) đang trở thành tiêu chuẩn vàng trong ngành DevOps và hạ tầng đám mây. Theo khảo sát của CNCF năm 2023, hơn 96% tổ chức đang sử dụng hoặc đánh giá Kubernetes để quản lý container. Tuy nhiên, việc cài đặt và cấu hình Kubernetes lần đầu vẫn là rào cản lớn với nhiều người. Bài viết này LANIT sẽ hướng dẫn cài đặt Kubernetes từ khâu chuẩn bị hạ tầng đến khi cluster hoạt động hoàn chỉnh.

Có những cách nào để cài đặt Kubernetes?

Trước khi bắt tay thực hành, bạn cần hiểu có ba hướng triển khai Kubernetes phổ biến, mỗi hướng phù hợp với một mục đích khác nhau.

1. Môi trường Local/Thử nghiệm (Minikube / Kind)

Đây là lựa chọn lý tưởng nếu bạn muốn học Kubernetes ngay trên laptop mà không cần máy chủ thật. Minikube và Kind đều tạo ra một cluster một node duy nhất đóng vai trò cả Master lẫn Worker

  • Ưu điểm: cài đặt trong vài phút, hoàn toàn miễn phí.
  • Nhược điểm: không phản ánh đúng môi trường production thực tế, hiệu năng bị giới hạn bởi máy tính cá nhân.
moi-truong-local-thu-nghiem

2. Môi trường Thực tế (Kubeadm)

Đây là trọng tâm của bài viết này. Kubeadm là công cụ chuẩn mực công nghiệp để tự dựng (Bare-metal) một Kubernetes cluster hoàn chỉnh trên các máy chủ ảo độc lập. Phương pháp này cho phép bạn kiểm soát hoàn toàn cấu hình và hiểu sâu cơ chế hoạt động bên trong.

moi-truong-thuc-te

3. Sử dụng Managed K8s (EKS, GKE, VKE)

Nếu bạn không muốn tự quản lý hạ tầng, các nền tảng cloud lớn cung cấp dịch vụ Kubernetes được quản lý sẵn: Amazon EKS, Google GKE, hay VKE. Control Plane được nhà cung cấp lo hoàn toàn, bạn chỉ cần quản lý workload.

Phù hợp với đội ngũ production cần độ tin cậy cao và muốn giảm tải vận hành, nhưng chi phí cao hơn tự dựng.

Chuẩn bị tài nguyên (Prerequisites) trước khi cài đặt

Đây là bước nhiều người bỏ qua và dẫn đến cài đặt thất bại. Hãy chuẩn bị kỹ trước khi bắt đầu.

Yêu cầu về máy chủ

Bạn cần tối thiểu 2 máy chủ ảo (VPS) hoạt động độc lập:

NodeVai tròCấu hình tối thiểu
Master NodeĐiều phối toàn bộ cluster2 vCPU, 2GB RAM
Worker NodeChạy ứng dụng thực tế2 vCPU, 2GB RAM

Hệ điều hành khuyến nghị: Ubuntu 22.04 LTS hoặc 24.04 LTS.

Để triển khai lab nhanh với chi phí thấp, bạn có thể sử dụng Cloud Server từ các nhà cung cấp quốc tế như Vultr. Nếu hệ thống hướng đến người dùng nội địa Việt Nam và yêu cầu độ trễ (Latency) cực thấp, hãy ưu tiên nhà cung cấp có Data Center trong nước như LANIT để không ảnh hưởng trực tiếp đến tốc độ phản hồi của API server trong cluster.

>>> Đọc thêm: Những việc cần làm sau khi cài Ubuntu

yeu-cau-ve-may-chu

Yêu cầu về mạng & bảo mật

Hai máy chủ phải giao tiếp được với nhau qua IP Private. Ngoài ra, bạn cần mở các cổng bắt buộc sau trên tường lửa:

CổngGiao thứcMục đích
6443TCPKubernetes API Server
2379–2380TCPetcd (cơ sở dữ liệu trạng thái cluster)
10250TCPKubelet API
10251–10252TCPScheduler và Controller Manager

Nếu dự định đưa hệ thống ra môi trường production, hãy cân nhắc bật tính năng Firewall và Anti-DDoS ở lớp mạng từ nhà cung cấp hosting, đây là lớp bảo vệ đầu tiên trước khi Traffic đến Cluster.

yeu-cau-mang-va-bao-mat-k8s

Hướng dẫn các bước cài đặt Kubernetes chi tiết (Step-by-step)

Toàn bộ phần này sử dụng lệnh Linux. Bạn cần chạy với quyền root hoặc dùng sudo trước mỗi lệnh.

Bước 1: Thiết lập môi trường cơ bản (Chạy trên tất cả các Node)

  • Cập nhật hệ điều hành:
sudo apt update && sudo apt upgrade -y
  • Tắt Swap — bước bắt buộc với Kubernetes:

Kubernetes yêu cầu tắt Swap hoàn toàn. Nếu Swap còn bật, quá trình kubeadm init sẽ báo lỗi và dừng lại. Lý do: Kubernetes tự quản lý bộ nhớ cho container, việc hệ điều hành tự dùng Swap sẽ gây ra hành vi không thể dự đoán.

# Tắt swap ngay lập tức
sudo swapoff -a

# Tắt vĩnh viễn bằng cách comment dòng swap trong fstab
sudo sed -i '/ swap / s/^/#/' /etc/fstab

Kiểm tra xem swap đã tắt chưa:

free -h

Nếu cột Swap hiển thị 0B, bạn đã thành công.

thiet-lap-moi-truong-co-ban-cai-dat-kubernetes-k8s

Bước 2: Cài đặt Container Runtime (containerd)

Kubernetes không chạy container trực tiếp, nó cần một Container Runtime làm tầng trung gian. containerd là lựa chọn mặc định và được khuyến nghị bởi chính dự án Kubernetes kể từ phiên bản 1.24+.

Tải các kernel module cần thiết:

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

Cấu hình tham số mạng cho kernel:

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

sudo sysctl --system

Cài đặt containerd:

sudo apt install -y containerd

# Tạo file cấu hình mặc định
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# Chỉnh SystemdCgroup = true (bắt buộc)
sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml

# Khởi động dịch vụ
sudo systemctl restart containerd
sudo systemctl enable containerd
cai-dat-container-runtime

Bước 3: Cài đặt Kubeadm, Kubelet và Kubectl (Chạy trên tất cả các Node)

Ba công cụ này tạo nên xương sống của mọi Kubernetes cluster:

  • kubeadm: Khởi tạo và quản lý cluster.
  • kubelet: Agent chạy trên mỗi node, nhận lệnh từ Master và quản lý container.
  • kubectl: CLI để bạn tương tác với cluster (tương tự như terminal điều khiển từ xa).

Thêm repository chính thức của Kubernetes:

sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /' | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list

Cài đặt và khóa phiên bản:

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl

# Khóa phiên bản để tránh tự động nâng cấp gây xung đột
sudo apt-mark hold kubelet kubeadm kubectl
cai-dat-kubeadm-kubelet-va-kubectl

Bước 4: Khởi tạo Master Node (Chỉ chạy trên máy chủ Master)

Đây là bước “khai sinh” ra cluster của bạn.

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

Tham số –pod-network-cidr xác định dải địa chỉ IP nội bộ cho các Pod. Giá trị 192.168.0.0/16 là chuẩn dùng cho Calico (plugin mạng sẽ cài ở bước tiếp theo).

Sau khi lệnh chạy xong (khoảng 2–5 phút), bạn sẽ thấy đầu ra tương tự:

Your Kubernetes control-plane has initialized successfully!
...
kubeadm join 10.0.0.1:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:...

Quan trọng: Hãy sao chép và lưu lại đoạn lệnh kubeadm join ngay bây giờ. Đây là “chìa khóa” để các Worker Node gia nhập cluster. Nếu mất, bạn sẽ cần tạo lại token.

Cấu hình kubectl cho user 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
khoi-tao-master-node

Bước 5: Cấu hình mạng cho Pod (Pod Network Add-on)

Kubernetes không tự đi kèm hệ thống mạng nội bộ. Bạn cần cài thêm một Network Plugin để các Pod trên các node khác nhau có thể liên lạc với nhau.

Calico là lựa chọn phổ biến nhất — được dùng bởi hơn 50% các cluster Kubernetes tự vận hành theo khảo sát CNCF. Calico hỗ trợ Network Policy, cung cấp khả năng kiểm soát traffic giữa các Pod chi tiết.

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

Chờ khoảng 1–2 phút, sau đó kiểm tra:

kubectl get pods -n kube-system

Tất cả các pod có tên bắt đầu bằng calico- phải ở trạng thái Running.

cau-hinh-mang-cho-pod

Bước 6: Kết nối Worker Node vào Cluster (Join Node)

Trên máy chủ Worker, chạy đúng đoạn lệnh kubeadm join bạn đã lưu ở Bước 4:

sudo kubeadm join 10.0.0.1:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:xxxxxx...

Quay lại máy chủ Master và kiểm tra:

kubectl get nodes

Kết quả mong đợi:

NAME           STATUS   ROLES           AGE   VERSION
master-node    Ready    control-plane   10m   v1.29.0
worker-node    Ready    <none>          2m    v1.29.0

Khi cả hai node đều hiển thị STATUS: Ready, cluster của bạn đã sẵn sàng hoạt động!

ket-noi-worker-node-vao-cluster

Kiểm tra trạng thái Cluster và tối ưu hệ thống

Để xác thực toàn bộ Cluster đã hoạt động đúng, bạn thực hiện lệnh sau trên Master Node:

# Xem trạng thái tất cả node
kubectl get nodes -o wide

# Xem tất cả pod hệ thống
kubectl get pods --all-namespaces

# Kiểm tra thông tin cluster
kubectl cluster-info
  • Kết quả mong đợi: Tất cả các node phải hiển thị trạng thái Ready.
  • Nếu có lỗi: Kiểm tra log của kubelet trên các node gặp sự cố để xác định nguyên nhân mất kết nối hoặc lỗi dịch vụ.

Chiến lược bảo trì: Sao lưu cấu hình etcd

Cơ sở dữ liệu etcd lưu trữ toàn bộ trạng thái của Cluster. Nếu etcd gặp sự cố, toàn bộ hệ thống sẽ mất khả năng quản lý. Vì vậy, việc thiết lập sao lưu etcd có tầm quan trọng tương đương với việc backup SQL Server trong các ứng dụng web truyền thống.

Hướng dẫn sơ bộ:

  • Thiết lập tác vụ tự động: Sử dụng lệnh etcdctl snapshot save kết hợp với CronJob trên Linux để sao lưu định kỳ ra file ngoài (tránh lưu file backup trên chính node master).
  • Lưu trữ an toàn: Đẩy các bản sao lưu này lên các dịch vụ lưu trữ đám mây (như S3 Storage, Google Cloud Storage) hoặc server lưu trữ tách biệt.
  • Quy trình khôi phục: Luôn định kỳ kiểm tra khả năng phục hồi dữ liệu từ file backup để đảm bảo các bản sao lưu luôn ở trạng thái “sẵn sàng sử dụng” khi xảy ra thảm họa.

Lệnh tạo snapshot etcd thủ công:

ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key

Khuyến nghị: tạo cronjob chạy lệnh này mỗi ngày và lưu snapshot ra storage ngoài cluster.

kiem-tra-trang-thai-cluster-va-toi-uu-he-thong

Ứng dụng thực tế: Triển khai một dự án lên K8s

Sau khi cluster đã hoạt động, hãy thử triển khai một ứng dụng thực tế để xác nhận mọi thứ đang chạy đúng.

  • Tạo một Nginx Deployment:
kubectl create deployment nginx-demo --image=nginx --replicas=2
  • Expose ra ngoài qua NodePort:
kubectl expose deployment nginx-demo --type=NodePort --port=80
  • Kiểm tra:
kubectl get service nginx-demo

Truy cập vào địa chỉ http://<IP-Worker-Node>:<NodePort> — bạn sẽ thấy trang chào mừng của Nginx.

Đây chính là workflow cơ bản của Kubernetes: Deployment quản lý vòng đời container, Service lo phần networking và expose ứng dụng ra ngoài.

Sau khi hoàn tất hướng dẫn cài đặt Kubernetes này, bạn đang sở hữu một hạ tầng container orchestration thực sự. Từ đây, bạn có thể:

  • Triển khai và quản lý ứng dụng microservices ở quy mô lớn.
  • Tích hợp CI/CD pipeline (ArgoCD, Jenkins) để tự động hóa toàn bộ quy trình deploy.
  • Chạy các dự án AI Automation độc lập — ví dụ như các hệ thống tích hợp với Discord hoặc Telegram — mà không lo tình trạng sập do quá tải tài nguyên, vì Kubernetes sẽ tự động cân bằng tải và khởi động lại khi cần.
  • Mở rộng lên multi-node cluster chỉ bằng cách thêm Worker Node và chạy lại lệnh kubeadm join.
ung-dung-thuc-te-trien-khai-mot-du-an-len-k8s

Cài đặt Kubernetes không quá khó như bạn tưởng nếu thực hiện đúng từng bước. Bây giờ, hãy thử triển khai ứng dụng đầu tiên của bạn lên cụm vừa thiết lập để kiểm chứng khả năng tự hồi phục (self-healing) và mở rộng của nó. Nếu gặp khó khăn trong quá trình vận hành, đừng ngần ngại quay lại tài liệu chính thức của cộng đồng. Chúc bạn có những trải nghiệm tuyệt vời với “người quản gia” đầy quyền năng này!

Đánh giá bài viết

Nguyễn Đức Hòa

Xin chào, mình là Nguyễn Đức Hoà, hiện đang đảm nhận vị trí Trưởng phòng kỹ thuật tại LANIT. Với 8 năm kinh nghiệm trong mảng System, Network, Security, mình luôn hướng đến việc tìm kiếm và áp dụng các giải pháp kỹ thuật tiên tiến nhất cho mọi dự án. Công việc của mình không chỉ dừng lại ở việc quản lý mà còn mang đến cho khách hàng những giải pháp lưu trữ dữ liệu tốt nhất hiện nay. Rất hy vọng những kinh nghiệm và chia sẻ của mình sẽ mang lại nhiều giá trị hữu ích cho các bạn.

Chat với chúng tôi qua Zalo!
Chat với chúng tôi qua Zalo!