Kiểm tra yêu cầu phần cứng và hệ điều hành
Trước khi cài đặt bất kỳ thành phần nào, cần đảm bảo máy chủ Ubuntu 24.04 đáp ứng tối thiểu 2 vCPU, 4GB RAM và 25GB Disk cho một node Master đơn giản. Nếu bạn dự định chạy nhiều Database Mesh nodes, hãy nhân số lượng này lên.
Chạy lệnh kiểm tra thông số phần cứng để xác minh.
lscpu | grep "Model name" && free -h && df -h /
Kết quả mong đợi: Thấy dòng CPU có ít nhất 2 cores, cột "available" của RAM lớn hơn 4G, và cột "Avail" của disk lớn hơn 25G.
Cập nhật hệ thống và cài đặt gói nền tảng
Thực hiện cập nhật repository và cài đặt các gói tiện ích cơ bản như curl, wget, apt-transport-https, ca-certificates, gnupg, lsb-release để chuẩn bị cho việc thêm repository bên thứ ba.
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget apt-transport-https ca-certificates gnupg lsb-release
Kết quả mong đợi: Quá trình cập nhật hoàn tất không lỗi, các gói tiện ích được cài đặt thành công.
Cài đặt Docker Engine và Kubernetes (Kubeadm)
Cấu hình Docker Engine
Cài đặt Docker Engine phiên bản 24.0.x hoặc cao hơn. Đây là container runtime mặc định cho Kubernetes hiện đại. Cần thêm repository chính thức của Docker vào hệ thống.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Kết quả mong đợi: Docker được cài đặt và service docker tự động start. Chạy `docker version` thấy Client và Server version khớp nhau.
Khởi động Docker và cấp quyền cho user
Cần thêm user hiện tại vào nhóm docker để chạy lệnh docker mà không cần sudo, đồng thời đảm bảo service docker luôn chạy sau khi reboot.
sudo usermod -aG docker $USER
sudo systemctl enable docker
sudo systemctl start docker
Kết quả mong đợi: Lệnh `docker run hello-world` chạy thành công ngay lập tức.
Cấu hình Kernel cho Kubernetes
Kubernetes yêu cầu một số tham số kernel để hoạt động đúng, đặc biệt là net.bridge.bridge-nf-call-iptables để cho phép lưu lượng mạng qua kube-proxy hoạt động chính xác. Nếu bỏ qua bước này, mạng Pod sẽ không hoạt động.
Viết cấu hình vào file `/etc/sysctl.d/99-kubernetes-bridge.conf`.
cat
Kết quả mong đợi: Lệnh `sysctl net.bridge.bridge-nf-call-iptables` trả về giá trị `1`.
Thêm repository Kubernetes
Thêm GPG key của Kubernetes và cấu hình repository apt để cài đặt kubeadm, kubelet, và kubectl phiên bản ổn định nhất.
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes.gpg] https://packages.cloud.google.com/apt kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Kết quả mong đợi: File `/etc/apt/sources.list.d/kubernetes.list` được tạo ra với nội dung repository Kubernetes.
Cài đặt Kubeadm, Kubelet và Kubectl
Cài đặt các gói core của Kubernetes. Lưu ý: Bước này chỉ cài đặt binaries, chưa khởi tạo cluster. Cần khóa version để tránh upgrade tự động gây xung đột trong quá trình demo.
sudo apt update
sudo apt install -y kubeadm=1.29.0-00 kubelet=1.29.0-00 kubectl=1.29.0-00
sudo apt-mark hold kubeadm kubelet kubectl
Kết quả mong đợi: Các gói được cài đặt thành công và bị khóa (hold) không cho tự động upgrade. Chạy `kubeadm version` thấy version 1.29.0.
Khởi tạo Cluster (Master Node)
Sử dụng kubeadm để khởi tạo control plane. Cấu hình này sử dụng CNI plugin là Calico (mặc định nếu không chọn khác) hoặc Flannel. Ở đây ta dùng `--pod-network-cidr` để định nghĩa mạng pod, chuẩn bị cho việc triển khai Istio sau này.
kubeadm init --pod-network-cidr=192.168.0.0/16
Kết quả mong đợi: Quá trình init chạy xong, xuất hiện 2 đoạn mã quan trọng: `kubeadm join ...` (để add worker) và thông báo "This is your control-plane node".
Cấu hình Kubectl cho user hiện tại
File cấu hình kubeconfig mặc định nằm ở `/etc/kubernetes/admin.conf` và chỉ root mới đọc được. Cần copy file này về home directory của user và đổi quyền sở hữu để chạy lệ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
Kết quả mong đợi: File `$HOME/.kube/config` tồn tại và có quyền sở hữu là user hiện tại.
Verify Cluster Master
Kiểm tra trạng thái của các Pod hệ thống. Lúc này các Pod sẽ ở trạng thái `Pending` vì chưa cài đặt CNI Plugin (mạng Pod). Đây là hành vi bình thường ở bước này.
kubectl get pods -n kube-system
Kết quả mong đợi: Thấy các Pod như `coredns`, `etcd`, `kube-apiserver`, `kube-controller-manager` đang ở trạng thái `ContainerCreating` hoặc `Pending`.
Cài đặt các công cụ hỗ trợ: kubectl, helm, kubectl-edit
Cài đặt kubectl (nếu chưa có)
Trong bước cài đặt Kubeadm ở trên, kubectl đã được cài đặt kèm theo. Tuy nhiên, nếu bạn muốn cài đặt độc lập hoặc update version, dùng lệnh dưới đây để đảm bảo binary nằm trong PATH.
which kubectl
kubectl version --client
Kết quả mong đợi: Thấy đường dẫn `/usr/bin/kubectl` và version client hiển thị.
Cài đặt Helm 3
Helm là package manager cho Kubernetes, bắt buộc để cài đặt Istio và các Database Mesh components sau này. Cài đặt trực tiếp từ repository chính thức của Helm.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | sudo bash
Kết quả mong đợi: Lệnh `helm version` trả về phiên bản Helm v3.x.x.
Cấu hình kubectl-edit
Để chỉnh sửa resource Kubernetes trực tiếp qua terminal, kubectl cần một text editor. Mặc định là vi. Nếu bạn quen dùng nano hoặc vim, cần cấu biến môi trường `KUBE_EDITOR`.
Cấu hình trong file `~/.bashrc` hoặc `~/.zshrc` (tùy shell bạn dùng).
echo 'export KUBE_EDITOR="nano"' >> ~/.bashrc
source ~/.bashrc
Kết quả mong đợi: Khi chạy `kubectl edit pod `, cửa sổ nano sẽ mở ra thay vì vi.
Verify công cụ
Chạy lệnh kiểm tra nhanh để đảm bảo cả 3 công cụ đã sẵn sàng cho các bước tiếp theo.
echo "Kubectl version: $(kubectl version --client --short 2>/dev/null || echo 'Not installed')"
echo "Helm version: $(helm version --short 2>/dev/null || echo 'Not installed')"
echo "Kube Editor: $KUBE_EDITOR"
Kết quả mong đợi: Cả 3 dòng đều trả về thông tin version hoặc tên editor, không có dòng nào báo "Not installed".
Tổng kết kiểm tra môi trường
Chạy script kiểm tra tổng hợp để đảm bảo môi trường đã sẵn sàng cho Phần 2 (Triển khai Kubernetes Cluster và cấu hình mạng cơ bản).
echo "=== System Check ==="
cat /etc/os-release | grep PRETTY_NAME
echo "=== Docker Check ==="
docker ps
echo "=== K8s Check ==="
kubectl get nodes
kubectl get pods -A
echo "=== Tools Check ==="
helm version --short
echo "=== Ready for Next Step ==="
Kết quả mong đợi: Node Master hiện trạng thái `Ready` (hoặc `NotReady` do chưa có CNI, nhưng Pod hệ thống đã hiện), Docker chạy, Helm hoạt động.
Điều hướng series:
Mục lục: Series: Triển khai Database Mesh với Envoy và Istio trên Ubuntu 24.04
Phần 2: Triển khai Kubernetes Cluster và cấu hình mạng cơ bản »