Kết thúc kỷ nguyên ISO trong HomeLab của tôi
Nửa năm trước, quy trình làm việc trong HomeLab của tôi cực kỳ chậm chạp. Mỗi khi cần một node mới, tôi lại phải tải ISO, mount nó và nhấp chuột qua các màn hình cài đặt Ubuntu giống hệt nhau lần thứ một nghìn. Việc này lặp đi lặp lại, dễ sai sót và tiêu tốn quá nhiều thời gian. Tôi nhận ra mình đã mất từ 15 đến 20 phút chỉ để có được một cửa sổ dòng lệnh cơ bản.
Chuyển sang quy trình Cloud-init đã thay đổi mọi thứ. Giờ đây, thời gian triển khai của tôi đã giảm từ 15 phút xuống còn chính xác 28 giây. Tôi đã chạy thiết lập này trong môi trường production suốt sáu tháng mà không gặp một lỗi nào. Dù tôi đang khởi tạo một cụm K3s 3 node hay một cơ sở dữ liệu tạm thời, quy trình hiện tại luôn đồng nhất và tức thì.
ISO vs. Cloud-init: Tại sao cách làm cũ đang làm lãng phí tài nguyên của bạn
Nếu bạn quản lý nhiều hơn hai VM, phương pháp thủ công chính là một nút thắt cổ chai. Hãy cùng xem tại sao ngành công nghiệp này lại từ bỏ nó.
Phương pháp ISO truyền thống
Hãy coi đây là cách tiếp cận bằng lao động chân tay. Bạn đối xử với VM như một máy tính để bàn vật lý. Bạn khởi động từ CD-ROM ảo, chọn ngôn ngữ, phân vùng đĩa và chờ trình cài đặt tải các gói phần mềm. Nó có thể ổn với một dự án đơn lẻ, nhưng không thể mở rộng quy mô. Nếu bạn cần một cụm năm node, bạn sẽ bị kẹt trong việc lặp lại các bước đó năm lần.
Phương pháp Cloud-init Template
Cloud-init là tiêu chuẩn cho các nhà cung cấp đám mây như AWS hoặc DigitalOcean. Thay vì sử dụng trình cài đặt, chúng ta sử dụng một “Gold Image” đã được cài đặt sẵn do Canonical cung cấp. Chúng ta đưa cấu hình của mình—SSH keys, thiết lập mạng và tài khoản người dùng—trực tiếp vào image. Proxmox sẽ clone image này, áp dụng metadata tùy chỉnh của bạn và VM sẽ sẵn sàng hoạt động trước khi bạn kịp nhấp một ngụm cà phê.
Những đánh đổi trong thực tế
Tại sao phương pháp này vượt trội
- Tốc độ cực nhanh: Việc clone một linked template chỉ mất khoảng 3 giây trên ổ cứng SSD.
- Không có sự sai lệch (Zero Drift): Mọi VM đều bắt đầu với các bản vá bảo mật và quyền người dùng chính xác như nhau.
- Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code): Thiết lập này là bước đầu tiên bắt buộc nếu bạn muốn sử dụng các công cụ như Terraform hoặc Ansible sau này.
- Thiết lập Headless: Bạn sẽ không bao giờ cần mở console VNC của Proxmox nữa. SSH keys của bạn đã sẵn sàng ngay khi VM khởi động xong.
Những rào cản nhỏ
- Nỗ lực một lần duy nhất: Bạn cần dành khoảng 10 phút trên dòng lệnh để xây dựng template đầu tiên.
- Thay đổi kích thước đĩa: Các cloud image thường bắt đầu với dung lượng nhỏ (khoảng 2GB). Bạn phải nhớ mở rộng đĩa trong Proxmox, mặc dù việc này có thể được tự động hóa.
Điều kiện tiên quyết
Tôi đang chạy hệ thống này trên Proxmox VE 8.1 sử dụng Ubuntu 24.04 LTS (Noble Numbat). Các lệnh này cũng tương thích với các image Ubuntu 22.04 hoặc Debian 12.
Bạn sẽ cần:
- Một node Proxmox VE đang hoạt động.
- Quyền truy cập SSH vào host Proxmox của bạn (việc sao chép-dán lệnh vào web shell là một cơn ác mộng).
- Kiến thức cơ bản về terminal Linux.
Từng bước thực hiện: Tạo Ubuntu Template
Tôi sử dụng CLI vì nó có tính lặp lại cao và ngăn chặn việc nhấp chuột nhầm trong giao diện GUI. Hãy chạy các lệnh này trực tiếp trên host Proxmox của bạn.
1. Tải Image chính thức
Chúng ta bắt đầu bằng việc tải cloud image Ubuntu mới nhất đã được xác thực. Tôi thường lưu trữ tệp này trong một thư mục tạm thời như /tmp.
wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
2. Chuẩn bị Image với Guest Tools
Các cloud image thường được tối giản và thiếu qemu-guest-agent. Chúng ta có thể đưa nó vào image trước khi khởi động. Điều này đảm bảo Proxmox có thể thấy địa chỉ IP của VM ngay lập tức.
apt-get update && apt-get install libguestfs-tools -y
virt-customize -a noble-server-cloudimg-amd64.img --install qemu-guest-agent
3. Định nghĩa khung máy ảo (VM Shell)
Chúng ta sẽ tạo một VM mới với ID 9000. Tôi cấp cho nó 2GB RAM và 2 CPU cores như một cấu hình cơ bản hợp lý cho một template.
qm create 9000 --name "ubuntu-2404-template" --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
4. Nhập đĩa ảo (Import Virtual Disk)
Bước này sẽ chuyển image Ubuntu vào bộ lưu trữ Proxmox của bạn. Thay thế local-lvm bằng tên bộ lưu trữ cụ thể của bạn, chẳng hạn như zfs-thin hoặc ceph.
qm importdisk 9000 noble-server-cloudimg-amd64.img local-lvm
qm set 9000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-9000-disk-0
5. Cấu hình Cloud-init và thiết lập phần cứng
Chúng ta cần thêm một ổ đĩa ảo nhỏ để chứa metadata của Cloud-init. Tôi cũng bật serial console để tránh lỗi “màn hình đen” phổ biến khi xem các cloud image trong console của Proxmox.
qm set 9000 --ide2 local-lvm:cloudinit
qm set 9000 --boot c --bootdisk scsi0
qm set 9000 --serial0 socket --vga serial0
qm set 9000 --agent enabled=1
6. Hoàn thiện Template
Sau khi cấu hình đã được chốt, chúng ta chuyển VM này thành một template chỉ đọc.
qm template 9000
Cách khởi chạy một VM mới
Template của bạn hiện đã sẵn sàng. Để triển khai, nhấp chuột phải vào nó trong thanh bên của Proxmox và chọn Clone. Chọn “Full Clone” để có sự độc lập hoàn toàn hoặc “Linked Clone” để tiết kiệm dung lượng đĩa. Trước khi khởi động VM mới, hãy vào tab Cloud-Init và thiết lập:
- User: Tên người dùng quản trị của bạn (ví dụ:
devops). - Password: Một mật khẩu mạnh, mặc dù dùng SSH keys sẽ tốt hơn.
- SSH Keys: Dán nội dung tệp
id_rsa.pubcủa bạn vào đây. Đây là điều bắt buộc để có một lab an toàn. - IP Config: Hầu hết các home lab sử dụng DHCP, nhưng bạn cũng có thể cấu hình IP tĩnh tại đây.
Nhấn Regenerate Image, nhấp start và đợi 20 giây. Giờ đây bạn có thể SSH trực tiếp vào máy chủ mới của mình.
Kết luận sau 6 tháng trải nghiệm
Kể từ khi chuyển đổi, tôi chưa bao giờ phải cài đặt hệ điều hành thủ công một lần nào nữa. HomeLab của tôi mang lại cảm giác như một môi trường chuyên nghiệp thay vì một tập hợp các thử nghiệm lộn xộn. Nếu bạn đã mệt mỏi với việc nhấp chuột qua các menu và muốn tập trung vào việc thực sự chạy phần mềm, thì đây là nâng cấp tốt nhất mà bạn có thể thực hiện cho quy trình làm việc trên Proxmox của mình. Nó nhanh, ổn định và giúp tôi tiết kiệm hàng giờ đồng hồ mệt mỏi mỗi tháng.

