Thứ Tư, 01/04/2026, 17:00 (GMT+0)

[Part 2] Thiết lập môi trường (Jumpbox và Compute Resources)

Quay lại Trang chủ Blog
Trên trang này

Sau khi đã xác định kiến trúc và mô hình triển khai ở Part 1, bước tiếp theo là chuẩn bị môi trường thực tế để triển khai Kubernetes cluster.

Phần này tập trung vào việc chuẩn bị hạ tầng nền tảng, đảm bảo môi trường sẵn sàng cho quá trình bootstrap cluster ở các bước tiếp theo.

Nội dung chính bao gồm:

  • Thiết lập jumpbox làm máy quản trị trung tâm
  • Khởi tạo các node (control plane và worker) theo mô hình đã thiết kế
  • Cấu hình kết nối và networking cơ bản giữa các máy

Việc chuẩn bị môi trường một cách chính xác và nhất quán là điều kiện tiên quyết để các bước bootstrap phía sau có thể thực hiện ổn định và hạn chế các lỗi khó debug.

Cài đặt Jumpbox

Jumpbox là máy trung gian được sử dụng để thực thi toàn bộ các thao tác cài đặt và cấu hình trong suốt quá trình triển khai cluster.

Trong phạm vi hướng dẫn này, Jumpbox sẽ được thiết lập theo cách tiếp cận của Kubernetes The Hard Way để đảm bảo tính nhất quán

Trước khi tiếp tục, cần cài đặt các package cơ bản và clone repository Kubernetes The Hard Way.

* Lưu ý: Sử dụng user root để thực hiện cài đặt

Cập nhật OS và cài đặt các packages cần thiết

apt-get update

apt-get -y install wget curl vim openssl git sudo

Clone git kubernetes-the-hard-way

git clone --depth 1 https://github.com/kelseyhightower/kubernetes-the-hard-way.git

Sau đó cd vào đường dẫn kubernetes-the-hard-way và dowload các file binary

cd kubernetes-the-hard-way

wget -q --show-progress \

  --https-only \

  --timestamping \

  -P downloads \

  -i downloads-$(dpkg --print-architecture).txt

Các binary được tải về Jumpbox nhằm tránh việc download lặp lại trên từng node, giúp tối ưu băng thông và thời gian triển khai.

Danh sách các file được lưu trong file downloads-amd64.txt hoặc downloads-arm64.txt, tùy thuộc vào kiến trúc của máy (amd64 hoặc arm64). Trong phạm vi bài viết này sử dụng kiến trúc amd64.

Có thể kiểm tra lại danh sách các file bằng lệnh:

cat downloads-$(dpkg --print-architecture).txt

Thực hiện giải nén các file binary và move vào các đường dẫn tương ứng trong thư mục downloads

 ARCH=$(dpkg --print-architecture)

  mkdir -p downloads/{client,cni-plugins,controller,worker}

  tar -xvf downloads/crictl-v1.32.0-linux-${ARCH}.tar.gz \

    -C downloads/worker/

  tar -xvf downloads/containerd-2.1.0-beta.0-linux-${ARCH}.tar.gz \

    --strip-components 1 \

    -C downloads/worker/

  tar -xvf downloads/cni-plugins-linux-${ARCH}-v1.6.2.tgz \

    -C downloads/cni-plugins/

  tar -xvf downloads/etcd-v3.6.0-rc.3-linux-${ARCH}.tar.gz \

    -C downloads/ \

    --strip-components 1 \

    etcd-v3.6.0-rc.3-linux-${ARCH}/etcdctl \

    etcd-v3.6.0-rc.3-linux-${ARCH}/etcd

  mv downloads/{etcdctl,kubectl} downloads/client/

  mv downloads/{etcd,kube-apiserver,kube-controller-manager,kube-scheduler} \

    downloads/controller/

  mv downloads/{kubelet,kube-proxy} downloads/worker/

  mv downloads/runc.${ARCH} downloads/worker/runc

Xóa các file .tgz

rm -rf downloads/*gz

Thêm quyền execute cho các file binary

chmod +x downloads/{client,cni-plugins,controller,worker}/*

Cài đặt kubectl

Ghi chú: kubectl là CLI client chính thức của Kubernetes. Trên máy Jumpbox, kubectl sẽ được dùng để tương tác với control plane của cụm Kubernetes sau khi cài đặt xong.

cp downloads/client/kubectl /usr/local/bin/

Kiểm tra lại bằng lệnh

kubectl version --client

Sẽ thấy hiển thị

Client Version: v1.32.3

Kustomize Version: v5.5.0

Cài đặt môi trường

Machine Database

Để phục vụ việc cấu hình và tự động hóa trên các node, một file text sẽ được sử dụng như một “machine database”, lưu trữ thông tin của từng máy chủ trong cluster.

IPV4_ADDRESS FQDN HOSTNAME POD_SUBNET

Trong đó: 

  • IPV4_ADDRESS: Địa chỉ IP của máy chủ
  • FQDN: Fully Qualified Domain Name - Tên miền đầy đủ
  • HOSTNAME: Hostname của máy chủ
  • POD_SUBNET: Subnet của pod

Cụ thể trong phạm vi bài hướng dẫn này, tôi sẽ tạo file machine database là machines.txt, nội dung như sau:

192.168.0.41 server.kubernetes.local server

192.168.0.42 node-0.kubernetes.local node-0 10.200.0.0/24

192.168.0.43 node-1.kubernetes.local node-1 10.200.1.0/24

Cấu hình SSH

Enable SSH với quyền root

Trong phạm vi hướng dẫn này, SSH với quyền root được sử dụng để thực hiện cấu hình trên các node trong cluster.

Trong môi trường production, cấu hình này thường bị vô hiệu hóa vì lý do bảo mật; tuy nhiên, trong môi trường lab, cấu hình này được bật tạm thời để đơn giản hóa quá trình triển khai.

Cần đảm bảo các node cho phép đăng nhập SSH bằng user root bằng cách cập nhật cấu hình sshd_config và khởi động lại SSH service.

Thực hiện đăng nhập vào từng VM bằng user đã tạo, sau đó chuyển sang user root:

su - root

Cấu hình file /etc/ssh/sshd_config và sửa cấu hình PermitRootLogin thành yes

sed -i \

  's/^#*PermitRootLogin.*/PermitRootLogin yes/' \

  /etc/ssh/sshd_config

Sau đó restart dịch vụ SSH Server

systemctl restart sshd

Tạo và phân phối SSH Key

Thực hiện khởi tạo SSH Key trên máy Jumpbox

ssh-keygen

Nhập các thông tin như phía dưới hoặc có thể Enter để next đến hết 

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa

Your public key has been saved in /root/.ssh/id_rsa.pub

Copy SSH public key tới các máy còn lại:

while read IP FQDN HOST SUBNET; do

  ssh-copy-id root@${IP}

done < machines.txt

Sau khi thực hiện copy, kiểm tra lại bằng lệnh

while read IP FQDN HOST SUBNET; do

  ssh -n root@${IP} hostname

done < machines.txt

Sẽ thấy hiển thị

server

node-0

node-1

Cấu hình Hostname

Trong phần này, ta sẽ thực hiện gán hostname cho các máy chủ, bao gồm server, node-0 và node-1. Hostname sẽ được sử dụng khi thực thi các câu lệnh từ jumpbox đến từng máy. Hostname cũng được mỗi máy worker, node-0 và node-1 sử dụng khi registering với một Kubernetes cluster nhất định.

Để cấu hình hostname trên tất cả các máy, ta thực hiện trên Jumpbox như sau:

while read IP FQDN HOST SUBNET; do

    CMD="sed -i 's/^127.0.1.1.*/127.0.1.1\t${FQDN} ${HOST}/' /etc/hosts"

    ssh -n root@${IP} "$CMD"

    ssh -n root@${IP} hostnamectl set-hostname ${HOST}

    ssh -n root@${IP} systemctl restart systemd-hostnamed

done < machines.txt

Kiểm tra lại hostname của các máy chủ:

while read IP FQDN HOST SUBNET; do

  ssh -n root@${IP} hostname --fqdn

done < machines.txt

Sẽ thấy hiển thị

server.kubernetes.local

node-0.kubernetes.local

node-1.kubernetes.local

Chỉnh sửa các bản ghi trên file hosts

Cấu hình file /etc/hosts để các node có thể resolve lẫn nhau thông qua hostname thay vì địa chỉ IP.

Đầu tiên ta sẽ thực hiện tạo file hosts trên máy Jumpbox

echo "" > hosts

echo "# Kubernetes The Hard Way" >> hosts

Sau đó tạo các bản ghi trên file hosts này

while read IP FQDN HOST SUBNET; do

    ENTRY="${IP} ${FQDN} ${HOST}"

    echo $ENTRY >> hosts

done < machines.txt

Kiểm tra lại nội dung file hosts vừa tạo bằng

cat hosts

Sẽ thấy nội dung

# Kubernetes The Hard Way

XXX.XXX.XXX.XXX server.kubernetes.local server

XXX.XXX.XXX.XXX node-0.kubernetes.local node-0

XXX.XXX.XXX.XXX node-1.kubernetes.local node-1

Thêm bản ghi host vào file /etc/hosts trên Jumpbox

Thực hiện thêm các bản ghi host như sau

cat hosts >> /etc/hosts

Kiểm tra lại bằng lệnh

cat /etc/hosts

Sẽ thấy hiển thị

127.0.0.1       localhost

127.0.1.1       jumpbox

# The following lines are desirable for IPv6 capable hosts

::1     localhost ip6-localhost ip6-loopback

ff02::1 ip6-allnodes

ff02::2 ip6-allrouters



# Kubernetes The Hard Way

192.168.0.41 server.kubernetes.local server

192.168.0.42 node-0.kubernetes.local node-0

192.168.0.43 node-1.kubernetes.local node-1

Bây giờ, ta đã có thể SSH từ máy Jumpbox tới các máy chủ trong list machines.txt bằng hostname. Kiểm tra lại bằng lệnh

for host in server node-0 node-1

   do ssh root@${host} hostname

done

Sẽ thấy hiển thị

server

node-0

node-1

Thêm bản ghi host vào file /etc/hosts trên các máy còn lại

Thực hiện thêm các bản ghi host trên các máy còn lại như sau:

while read IP FQDN HOST SUBNET; do

  scp hosts root@${HOST}:~/

  ssh -n \

    root@${HOST} "cat hosts >> /etc/hosts"

done < machines.txt

Sau khi hoàn thành các bước trên, các node đã có thể resolve và kết nối với nhau thông qua hostname (server, node-0, node-1) thay vì địa chỉ IP, sẵn sàng cho các bước cấu hình tiếp theo.

#CloudWave Radar
#CloudWave Radar
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc