Setup Cluster Lab bằng Vagrant
Mọi bài trong bộ ghi chú này chạy trên một cluster kubeadm gồm 1 master và 2 worker, dựng tự động bằng Vagrant trên VMware theo repo tranvix0910/k8s-vagrant. Hướng dẫn chạy được trên cả macOS và Windows; bước nào khác nhau sẽ có tab riêng cho từng hệ điều hành.
1. Kiến trúc lab
| VM | IP | RAM | CPU | Vai trò | Dùng cho CKA? |
|---|---|---|---|---|---|
k8s-master | 192.168.81.101 | 4 GB | 2 | Control plane | ✅ |
k8s-worker1 | 192.168.81.102 | 4 GB | 2 | Worker | ✅ |
k8s-worker2 | 192.168.81.103 | 4 GB | 2 | Worker | ✅ |
ha-proxy | 192.168.81.100 | 1 GB | 1 | Load balancer (HAProxy) | Không bắt buộc |
dev-server | 192.168.81.104 | 2 GB | 1 | Máy dev | Không bắt buộc |
deploy-server | 192.168.81.105 | 2 GB | 1 | Máy CI/CD | Không bắt buộc |
Để học CKA chỉ cần 3 VM Kubernetes (12 GB RAM). Ba VM còn lại chỉ là máy Ubuntu trống, dùng cho các bài sau như HAProxy hay CI/CD.
| Thành phần | Phiên bản |
|---|---|
| Box | bento/ubuntu-24.04 |
| Kubernetes (kubelet, kubeadm, kubectl) | 1.30.x |
| Container runtime | containerd (từ repo Docker) |
| CNI | Calico 3.30.0 |
2. Chuẩn bị máy host
| Cần | macOS | Windows |
|---|---|---|
| Phần mềm ảo hóa | VMware Fusion | VMware Workstation Pro |
| Vagrant ≥ 2.3 | ✅ | ✅ |
| Vagrant VMware Utility | ✅ | ✅ |
Plugin vagrant-vmware-desktop | ✅ | ✅ |
| Git | ✅ | ✅ |
| RAM trống | ≥ 16 GB | ≥ 16 GB |
| Ổ đĩa trống | ≥ 60 GB | ≥ 60 GB |
- Repo chỉ khai báo provider
vmware_desktop, nên cần VMware (Fusion trên macOS, Workstation trên Windows). VMware Fusion và Workstation Pro hiện miễn phí cho mục đích cá nhân. - Vagrant VMware Utility là dịch vụ trung gian để Vagrant điều khiển VMware. Tải tại developer.hashicorp.com/vagrant/install/vmware.
- macOS
- Windows
Cài VMware Fusion từ trang của Broadcom, sau đó mở Terminal:
brew install --cask vagrant vagrant-vmware-utility
brew install git kubectl
vagrant plugin install vagrant-vmware-desktop
vagrant plugin list
Cài VMware Workstation Pro t ừ trang của Broadcom, sau đó mở PowerShell (Run as Administrator):
winget install Hashicorp.Vagrant
winget install Git.Git
winget install Kubernetes.kubectl
Tải và cài Vagrant VMware Utility (file .msi) từ trang ở trên, khởi động lại máy, rồi mở PowerShell mới:
vagrant plugin install vagrant-vmware-desktop
vagrant plugin list
Nếu Windows đang bật Hyper-V/WSL2, VMware Workstation 16 trở lên vẫn chạy được (qua Windows Hypervisor Platform) nhưng chậm hơn.
3. Clone repo và chỉnh script
- macOS
- Windows
git clone https://github.com/tranvix0910/k8s-vagrant.git
cd k8s-vagrant
git clone --config core.autocrlf=false https://github.com/tranvix0910/k8s-vagrant.git
cd k8s-vagrant
core.autocrlf=falseMặc định Git trên Windows đổi ký tự xuống dòng của file sang CRLF. Script bash có CRLF sẽ lỗi ngay khi chạy trong VM Ubuntu (ví dụ set: pipefail\r: invalid option name). Tùy chọn trên giữ nguyên LF như trong repo.
k8s-vagrant/
├── Vagrantfile # khai báo 6 VM và script provision
└── scripts/
├── common.sh # chạy trên cả 3 node Kubernetes
├── master.sh # kubeadm init + Calico trên k8s-master
└── worker.sh # kubeadm join trên từng worker
3.1. Đổi dải IP Pod (khuyến nghị)
scripts/master.sh mặc định dùng --pod-network-cidr=192.168.0.0/16. Dải này chứa luôn mạng VM 192.168.81.0/24, nên Pod IP có thể trùng với IP node. Các bài trong bộ ghi chú dùng 10.244.0.0/16, vì vậy hãy đổi trước khi chạy:
- macOS
- Windows
sed -i '' 's#192.168.0.0/16#10.244.0.0/16#' scripts/master.sh
grep pod-network-cidr scripts/master.sh
$f = "scripts/master.sh"
(Get-Content $f -Raw) -replace '192\.168\.0\.0/16', '10.244.0.0/16' | Set-Content $f -NoNewline
Select-String -Path $f -Pattern "pod-network-cidr"
-Rawvà-NoNewlinegiữ nguyên ký tự xuống dòng LF của file.- Có thể sửa b ằng VS Code thay cho lệnh, nhưng phải thấy chữ LF ở thanh trạng thái góc dưới bên phải trước khi lưu.
Với kubeadm, Calico tự đọc dải này từ cấu hình cluster, nên không cần sửa manifest Calico.
3.2. Mac Chip Apple Silicon
scripts/common.sh cố định arch=amd64 khi thêm repo Docker. Trên Mac M1/M2/M3/M4, VM là ARM64 nên bước cài containerd sẽ lỗi. Sửa thành:
sed -i '' 's/\[arch=amd64\]/[arch=$(dpkg --print-architecture)]/' scripts/common.sh
Windows và Mac chip Intel thì bỏ qua bước này.