Cấu hình máy ảo cho Node Master và Worker trên Proxmox
Bạn cần chuẩn bị hai máy ảo (VM) trên Proxmox: một làm Master (Server) và một làm Worker (Agent). Cấu hình phần cứng phải đảm bảo đủ tài nguyên để chạy Kubernetes và các workload cơ bản.
Trên giao diện quản lý Proxmox, hãy tạo VM cho Master với cấu hình sau: 2 vCPU, 4GB RAM, và 40GB Disk. Hệ điều hành chọn Ubuntu Server 22.04 LTS. Đặt tên VM là k3s-master.
Tiếp theo, tạo VM cho Worker với cấu hình tương tự hoặc thấp hơn một chút nếu chỉ chạy workload nhẹ: 2 vCPU, 4GB RAM, 40GB Disk. Hệ điều hành Ubuntu Server 22.04 LTS. Đặt tên VM là k3s-worker.
Sau khi cài đặt Ubuntu hoàn tất, bạn cần cấu hình tên miền (hostname) và đảm bảo cả hai VM có thể ping thông nhau. Trên Master, chạy lệnh sau để đặt hostname:
hostnamectl set-hostname k3s-master
Kết quả: Tên máy ảo sẽ thay đổi thành k3s-master sau khi đăng xuất và đăng nhập lại.
Trên Worker, thực hiện tương tự:
hostnamectl set-hostname k3s-worker
Kết quả: Tên máy ảo sẽ thay đổi thành k3s-worker.
Để đảm bảo kết nối mạng, hãy cập nhật file /etc/hosts trên cả hai máy để ánh xạ IP sang hostname. Giả sử IP của Master là 192.168.1.10 và Worker là 192.168.1.11.
Trên Master, chỉnh sửa file hosts:
cat >> /etc/hosts
Kết quả: File /etc/hosts sẽ chứa các dòng ánh xạ IP mới.
Trên Worker, chỉnh sửa file hosts tương tự:
cat >> /etc/hosts
Kết quả: Worker có thể phân giải tên k3s-master thành IP 192.168.1.10.
Thử nghiệm kết nối bằng lệnh ping từ Worker đến Master:
ping -c 3 k3s-master
Kết quả mong đợi: Bạn thấy 3 gói tin được gửi và nhận thành công (3 packets transmitted, 3 packets received, 0% packet loss).
Cài đặt K3s trên Node Master (Server Mode)
Bây giờ bạn sẽ cài đặt K3s trên máy chủ Master. K3s là bản Kubernetes nhẹ, đã được đóng gói sẵn các thành phần cần thiết như Container Runtime, CNI (Calico), và CoreDNS.
Trên máy k3s-master, chạy lệnh cài đặt K3s theo chế độ server (master). Lệnh này sẽ tự động tải script cài đặt và khởi động cluster.
curl -sfL https://get.k3s.io | sh -
Kết quả mong đợi: Quá trình cài đặt sẽ diễn ra trong vài phút. Bạn sẽ thấy thông báo "K3s is installed and ready to use" và script sẽ tự động tạo file cấu hình kubeconfig.
Để quản lý cluster, bạn cần lưu file kubeconfig. K3s mặc định lưu file này tại /etc/rancher/k3s/k3s.yaml.
Tuy nhiên, để dễ quản lý, bạn nên copy file này vào thư mục home của user hiện tại và cập nhật IP trong file đó để trỏ về IP công cộng hoặc IP nội bộ của Master (trong ví dụ này là 192.168.1.10).
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/kubeconfig
Kết quả: File kubeconfig được copy sang thư mục home.
Sửa file kubeconfig để thay đổi IP mặc định (thường là 127.0.0.1) thành IP thật của Master:
sed -i 's/127.0.0.1/192.168.1.10/g' $HOME/kubeconfig
Kết quả: File $HOME/kubeconfig đã được cập nhật IP server thành 192.168.1.10.
Thiết lập biến môi trường KUBECONFIG để kubectl biết vị trí file cấu hình:
export KUBECONFIG=$HOME/kubeconfig
Kết quả: Biến môi trường được đặt. Bạn có thể chạy lệnh kubectl ngay sau đó.
Để xác minh cluster đã chạy ổn, kiểm tra trạng thái của các node trong cụm:
kubectl get nodes
Kết quả mong đợi: Bạn thấy một node duy nhất là k3s-master với trạng thái Ready.
Kết nối các Node Worker vào cụm K3s
Để mở rộng cụm, bạn cần thêm các node Worker. K3s cung cấp một token để worker join vào cluster master. Token này được lưu trong file /var/lib/rancher/k3s/server/token trên máy Master.
Trên máy Master, hãy hiển thị token này:
cat /var/lib/rancher/k3s/server/token
Kết quả mong đợi: Một chuỗi ký tự dài (ví dụ: abcdef123456...). Hãy sao chép chuỗi này.
Chuyển sang máy k3s-worker. Trước tiên, hãy cài đặt K3s ở chế độ agent (worker). Bạn cần cung cấp token vừa lấy và địa chỉ IP của Master.
Thay thế TOKEN_HERE bằng token thực tế và 192.168.1.10 bằng IP của Master:
K3S_URL="https://192.168.1.10:6443" K3S_TOKEN="TOKEN_HERE" curl -sfL https://get.k3s.io | sh -
Kết quả mong đợi: Script sẽ chạy, cài đặt container runtime và agent K3s, sau đó nối vào cluster. Bạn sẽ thấy thông báo "K3s is installed and ready to use".
Quay lại máy Master để xác minh Worker đã join thành công.
kubectl get nodes
Kết quả mong đợi: Bạn thấy hai node: k3s-master (Ready) và k3s-worker (Ready). Trạng thái của worker có thể là NotReady trong vài giây đầu do Calico đang cấu hình mạng, sau đó sẽ chuyển sang Ready.
Để kiểm tra chi tiết hơn về các pod hệ thống đang chạy trên Worker, sử dụng lệnh:
kubectl get pods -A
Kết quả mong đợi: Bạn thấy các pod hệ thống (như calico-node, coredns, local-path-storage) đang chạy trên cả Master và Worker. Pod calico-node đặc biệt quan trọng để đảm bảo mạng liên thông giữa các node.
Điều hướng series:
Mục lục: Series: Xây dựng hạ tầng Kubernetes tự động (Auto-Scaling) với K3s và Helm trên Proxmox
« Phần 1: Chuẩn bị môi trường Proxmox và yêu cầu hệ thống
Phần 3: Cài đặt và cấu hình Helm trên cụm K3s »