1. Kiểm tra và chuẩn bị phần cứng tối thiểu
Yêu cầu cấu hình phần cứng cho Proxmox VE
Proxmox VE cần tài nguyên để chạy hypervisor và quản lý các VM/CT. Để chạy K3s mượt mà, bạn cần đảm bảo host vật lý đáp ứng mức tối thiểu sau.
CPU: Tối thiểu 4 nhân vật lý (vCPU) hỗ trợ VT-x/AMD-V. Khuyến nghị 8+ nhân để dành cho các node K3s.
RAM: Tối thiểu 8GB. Khuyến nghị 16GB trở lên để chia cho Proxmox OS (2GB) và các node K3s (tối thiểu 4GB/node).
Disk: Tối thiểu 50GB SSD/NVMe cho hệ điều hành Proxmox. Khuyến nghị 200GB+ SSD tốc độ cao để chứa disk của các node K3s và dữ liệu container.
Network: Card mạng 1Gbps trở lên. Khuyến nghị 2 card mạng: 1 cho Management (Proxmox UI/API) và 1 cho Data/Cluster Traffic (K3s).
Yêu cầu cho từng Node Kubernetes (VM/LXC)
Mỗi node trong cụm K3s cần được phân bổ tài nguyên đủ để chạy kubelet, container runtime và các pod.
Node Control Plane (Master): 2 vCPU, 4GB RAM, 30GB Disk (NVMe).
Node Worker: 2 vCPU, 4GB RAM, 30GB Disk (NVMe).
Để thực nghiệm Auto-Scaling, bạn cần chuẩn bị sẵn ít nhất 1 Master và 2 Worker. Tổng cộng cần 6 vCPU, 12GB RAM, 90GB Disk.
Verify kết quả phần cứng
Sử dụng lệnh sau trên máy vật lý (trước khi cài Proxmox) để kiểm tra CPU và RAM:
lscpu | grep "Model name"
free -h
Kết quả mong đợi: Thấy dòng CPU có hỗ trợ virtualization (VT-x hoặc AMD-V) và tổng RAM >= 12GB.
Kiểm tra ổ cứng và loại ổ:
lsblk -o NAME,SIZE,TYPE,FSTYPE
sudo fdisk -l | grep -E "Disk|partitions"
Kết quả mong đợi: Thấy ít nhất một ổ SSD/NVMe có dung lượng >= 200GB.
2. Cài đặt Proxmox VE và cấu hình mạng
Download và chuẩn bị ISO Proxmox VE
Tải bản ISO Proxmox VE mới nhất (LTS hoặc latest) từ trang chủ Proxmox. Đổ file này vào USB Bootable bằng Rufus (Windows) hoặc Etcher (Linux/Mac).
Boot và cài đặt Proxmox VE
Boot máy chủ từ USB. Chọn "Install Proxmox VE". Trong bước "Target System", chọn ổ cứng chính (thường là /dev/sda hoặc /dev/nvme0n1).
Tại bước "Region/Timezone", chọn Vietnam và Asia/Ho_Chi_Minh.
Tại bước "Network Configuration", nhập thông tin IP tĩnh cho Management Interface (ví dụ: eth0).
IP address: 192.168.1.100
Subnet mask: 255.255.255.0
Gateway: 192.168.1.1
DNS server: 8.8.8.8
Hostname: pve-cluster
Domain: lab.local
Kết quả mong đợi: Giao diện cài đặt chấp nhận thông tin và bạn có thể đặt password cho root@pam.
Cấu hình mạng cho Traffic Kubernetes
Sau khi cài xong và truy cập vào Web UI Proxmox (https://192.168.1.100:8006), bạn cần cấu hình bridge mạng để các VM K3s có thể giao tiếp nội bộ tốc độ cao.
Trên Web UI, chọn Node chính -> System -> Network.
Thêm một interface bridge mới (vmbr1) gắn với card mạng thứ 2 (eth1) nếu có, hoặc dùng cùng card nếu chỉ có 1 card.
Chỉnh sửa file cấu hình mạng trực tiếp trên host Proxmox để đảm bảo tính ổn định:
sudo nano /etc/network/interfaces
Thêm nội dung sau vào cuối file (giả sử eth1 là card mạng thứ 2 dành cho K3s):
auto eth1
iface eth1 inet manual
auto vmbr1
iface vmbr1 inet manual
bridge_ports eth1
bridge_stp off
bridge_fd 0
Khởi động lại dịch vụ mạng để áp dụng:
systemctl restart networking
Kết quả mong đợi: Lệnh `ip addr show vmbr1` trả về interface bridge đã được tạo và trạng thái UP.
Verify kết quả mạng
Chạy lệnh kiểm tra cấu hình mạng hiện tại:
cat /etc/network/interfaces | grep -A 5 vmbr1
brctl show
Kết quả mong đợi: Thấy vmbr1 được liệt kê trong output của brctl show và cổng eth1 được bridge vào.
3. Chuẩn bị máy ảo (VM) và Container (LXC) cho K3s
Chọn giữa VM và LXC cho Node Kubernetes
Tuy LXC nhẹ hơn và tiết kiệm RAM, nhưng K3s (Docker/containerd) hoạt động tốt nhất và ổn định nhất trên VM đầy đủ (KVM/QEMU) do yêu cầu kernel module và network bridge phức tạp. Bài này sẽ hướng dẫn tạo VM.
Tạo Template Disk cho Node K3s
Để triển khai nhanh nhiều node, ta tạo 1 VM Ubuntu Server làm template, cài sẵn các gói cần thiết, sau đó clone nó.
Trên Web UI Proxmox, chọn Content -> ISO images, upload file Ubuntu Server LTS (ví dụ: ubuntu-22.04.3-live-server-amd64.iso).
Tạo VM mới (Create VM):
- OS: Select the ISO you just uploaded.
- Hardware: 2 Cores, 4GB RAM, 30GB Disk (SCSI/NVMe).
- Network: Bridge vmbr1 (mạng nội bộ K3s).
- Boot Order: IDE (CDROM) first.
Chạy VM và cài đặt Ubuntu Server. Trong quá trình cài đặt:
1. Chọn language English, keyboard US.
2. Network: Giữ nguyên DHCP hoặc đặt IP tĩnh nếu muốn.
3. Profile: Username k3sadmin, Password (ghi nhớ).
4. Software selection: KHÔNG chọn OpenSSH server (sẽ cài sau), chọn Update software.
5. Sau khi cài xong, reboot VM.
Cấu hình VM Template (Preparation)
Truy cập console của VM Ubuntu vừa cài. Thực hiện các bước chuẩn bị sau để tối ưu cho K3s:
1. Cập nhật hệ thống và cài đặt các gói cần thiết:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget apt-transport-https ca-certificates software-properties-common
2. Vô hiệu hóa swap (K3s yêu cầu swap bị tắt):
swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
3. Vô hiệu hóa AppArmor (tùy chọn nhưng khuyến nghị cho K3s để tránh conflict):
sudo systemctl stop apparmor
sudo systemctl disable apparmor
sudo rm /etc/apparmor.d/usr.sbin.unattended-upgrader
4. Cài đặt SSH Server và cấu hình key (nếu chưa có):
sudo apt install -y openssh-server
sudo systemctl enable --now ssh
5. Xóa lịch sử và thông tin nhạy cảm để tạo template sạch:
sudo rm -rf /etc/ssh/ssh_host_*
sudo systemctl reset-failed
sudo cloud-init clean --logs
sudo rm -rf /var/log/*
sudo rm -rf /etc/hosts /etc/hostname
6. Restart VM để đảm bảo sạch sẽ:
sudo reboot
Tạo Template từ VM đã chuẩn bị
Sau khi VM khởi động lại và tắt hẳn, trên Web UI Proxmox:
Click chuột phải vào VM vừa tạo -> chọn "Template".
Đổi tên VM thành "k3s-node-template".
Bây giờ bạn đã có sẵn một template sạch sẽ để clone ra các node Master và Worker.
Clone Node Master và Node Worker
Click chuột phải vào "k3s-node-template" -> "Clone".
1. Clone cho Master Node:
- Name: k3s-master-01
- VM ID: 101
- Storage: local-lvm (hoặc SSD của bạn)
- Network: vmbr1
2. Clone cho Worker Node 1:
- Name: k3s-worker-01
- VM ID: 102
- Storage: local-lvm
- Network: vmbr1
3. Clone cho Worker Node 2:
- Name: k3s-worker-02
- VM ID: 103
- Storage: local-lvm
- Network: vmbr1
Kết quả mong đợi: Web UI hiển thị 3 VM mới (101, 102, 103) với trạng thái "stopped" hoặc "running" tùy chọn clone full.
Cấu hình IP tĩnh cho các Node
Để K3s hoạt động ổn định, các node cần IP tĩnh. Bạn sẽ cấu hình qua Proxmox Hardware Config hoặc Cloud-Init.
Sử dụng Cloud-Init là cách nhanh nhất và tự động hóa nhất. Trên Web UI Proxmox, chọn VM -> Options -> Cloud-init.
1. Chọn "Cloud-init disk" (tạo một disk ảo chứa config).
2. Chọn "Network Config" -> "Static IPv4" (hoặc "DHCP" nếu dùng DHCP server riêng, nhưng khuyên dùng Static).
3. Nhập thông tin cho từng VM:
Cho k3s-master-01 (ID 101):
IP Config: 192.168.1.101/24
Gateway: 192.168.1.1
DNS: 8.8.8.8
Hostname: k3s-master-01
Cho k3s-worker-01 (ID 102):
IP Config: 192.168.1.102/24
Gateway: 192.168.1.1
DNS: 8.8.8.8
Hostname: k3s-worker-01
Cho k3s-worker-02 (ID 103):
IP Config: 192.168.1.103/24
Gateway: 192.168.1.1
DNS: 8.8.8.8
Hostname: k3s-worker-02
Khởi động lại các VM để áp dụng Cloud-init:
qm reboot 101
qm reboot 102
qm reboot 103
Kết quả mong đợi: Các VM tự động boot và nhận đúng IP tĩnh đã cấu hình.
Verify kết quả môi trường VM
SSH vào từng node để kiểm tra kết nối và IP:
ssh k3sadmin@192.168.1.101
hostname -f
ip addr show vmbr1 (hoặc eth0 tùy config)
Kết quả mong đợi: Kết nối SSH thành công, hostname trả về đúng (k3s-master-01) và IP giao diện mạng là 192.168.1.101.
Lặp lại tương tự cho worker-01 và worker-02.
Kiểm tra swap đã tắt hoàn toàn:
free -h
Kết quả mong đợi: Dòng Swap phải hiện 0B.
Đ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 2: Triển khai cụm K3s đầu tiên trên Proxmox »