

Sau khi control plane đã được triển khai ở Part 5, cluster lúc này đã có thể tiếp nhận và xử lý các request thông qua Kubernetes API Server. Tuy nhiên, hệ thống vẫn chưa thể chạy workload thực tế do chưa có worker node nào tham gia vào cluster.
Trong Kubernetes, worker node là nơi trực tiếp chạy Pod và container. Đây cũng là nơi kubelet, container runtime và các thành phần networking phối hợp với control plane để duy trì trạng thái vận hành của ứng dụng.
Trong phần này, chúng ta sẽ khởi tạo các worker node đầu tiên và cài đặt các thành phần nền tảng cần thiết, bao gồm:
Điều kiện tiên quyết: Toàn bộ các lệnh trong phần này sẽ được thực hiện từ máy jumpbox.
Trước khi khởi tạo worker node, cần sao chép các Kubernetes binaries và file cấu hình cần thiết sang từng worker node:
for HOST in node-0 node-1; do
SUBNET=$(grep ${HOST} machines.txt | cut -d " " -f 4)
sed "s|SUBNET|$SUBNET|g" \
configs/10-bridge.conf > 10-bridge.conf
sed "s|SUBNET|$SUBNET|g" \
configs/kubelet-config.yaml > kubelet-config.yaml
scp 10-bridge.conf kubelet-config.yaml \
root@${HOST}:~/
done
for HOST in node-0 node-1; do
scp \
downloads/worker/* \
downloads/client/kubectl \
configs/99-loopback.conf \
configs/containerd-config.toml \
configs/kube-proxy-config.yaml \
units/containerd.service \
units/kubelet.service \
units/kube-proxy.service \
root@${HOST}:~/
done
for HOST in node-0 node-1; do
scp \
downloads/cni-plugins/* \
root@${HOST}:~/cni-plugins/
doneCác bước tiếp theo sẽ được thực hiện trực tiếp trên từng worker node (node-0 và node-1).
Thực hiện SSH vào từng node để bắt đầu quá trình cài đặt. Ví dụ:
ssh root@node-0Sau khi hoàn tất việc chuẩn bị binary và file cấu hình, bước tiếp theo là cài đặt và cấu hình các thành phần nền tảng trên từng worker node để Kubernetes có thể chạy Pod và quản lý container runtime.
Cập nhật hệ thống và cài đặt các package cần thiết:
sudo apt-get update
sudo apt-get -y install socat conntrack ipsetTrong đó:
Mặc định, Kubernetes yêu cầu swap phải được tắt để đảm bảo tính ổn định trong việc quản lý tài nguyên. Kiểm tra trạng thái swap:
sudo swapon --showNếu không có output, swap đã được tắt. Nếu swap vẫn đang bật, thực hiện:
sudo swapoff -aĐể tắt swap vĩnh viễn, cần cập nhật thêm file /etc/fstab tùy theo bản phân phối Linux đang sử dụng.
sudo mkdir -p \
/etc/cni/net.d \
/opt/cni/bin \
/var/lib/kubelet \
/var/lib/kube-proxy \
/var/lib/kubernetes \
/var/run/kubernetesCác thư mục trên sẽ được sử dụng để lưu trữ cấu hình, binary và dữ liệu runtime cho kubelet, kube-proxy và CNI.
mv crictl kube-proxy kubelet runc \
/usr/local/bin/
mv containerd containerd-shim-runc-v2 containerd-stress /bin/
mv cni-plugins/* /opt/cni/bin/Sau bước này, worker node đã có đầy đủ container runtime và các thành phần Kubernetes cần thiết để vận hành workload.
Triển khai các file cấu hình mạng:
mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/Để đảm bảo lưu lượng mạng đi qua mạng bridge CNI được xử lý bởi iptables, hãy tải và cấu hình module kernel br-netfilter:
modprobe br-netfilter
echo "br-netfilter" >> /etc/modules-load.d/modules.conf
echo "net.bridge.bridge-nf-call-iptables = 1" \
>> /etc/sysctl.d/kubernetes.conf
echo "net.bridge.bridge-nf-call-ip6tables = 1" \
>> /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.confĐây là một bước quan trọng giúp Kubernetes networking hoạt động chính xác giữa các Pod và node.
Tạo thư mục cấu hình:
mkdir -p /etc/containerd/Triển khai file cấu hình và systemd unit
mkdir -p /etc/containerd/
mv containerd-config.toml /etc/containerd/config.toml
mv containerd.service /etc/systemd/system/Kubelet là thành phần chịu trách nhiệm giao tiếp với control plane và quản lý Pod trên worker node. Triển khai file cấu hình kubelet và systemd service:
mv kubelet-config.yaml /var/lib/kubelet/
mv kubelet.service /etc/systemd/system/kube-proxy chịu trách nhiệm thiết lập networking và forwarding traffic giữa các service trong cluster.
mv kube-proxy-config.yaml /var/lib/kube-proxy/
mv kube-proxy.service /etc/systemd/system/systemctl daemon-reload
systemctl enable containerd kubelet kube-proxy
systemctl start containerd kubelet kube-proxyKiểm tra trạng thái kubelet:
systemctl is-active kubeletKết quả mong đợi: active.
Lặp lại toàn bộ các bước trên cho từng worker node (node-0 và node-1) trước khi tiếp tục.
Thực hiện từ máy jumpbox.
Kiểm tra danh sách các node đã tham gia cluster:
ssh root@server \
"kubectl get nodes \
--kubeconfig admin.kubeconfig"Kết quả mong đợi:
NAME STATUS ROLES AGE VERSION
node-0 Ready <none> 30s v1.28.3
node-1 Ready <none> 25s v1.28.3Nếu các node hiển thị trạng thái Ready, Kubernetes cluster đã có thể tiếp nhận và chạy workload thực tế.
Đến thời điểm này, các worker node đã được khởi tạo thành công và tham gia vào Kubernetes cluster. Control plane giờ đây không chỉ có khả năng quản lý trạng thái hệ thống mà đã có thể thực sự phân phối và vận hành workload trên các node worker.
Toàn bộ các thành phần nền tảng như container runtime, kubelet, kube-proxy và networking cũng đã được cấu hình hoàn chỉnh. Điều này đồng nghĩa với việc cluster hiện đã sẵn sàng để triển khai Pod và chạy ứng dụng thực tế.
Trong phần tiếp theo, chúng ta sẽ tiến hành kiểm tra khả năng vận hành của cluster bằng cách triển khai workload đầu tiên và xác minh networking giữa các Pod trong Kubernetes.
Xem lại: [Part 5] Khởi tạo Kubernetes Control Plane trong Series Xây Dựng K8s Cluster
