Thay vì cài đặt Ubuntu từ đầu mỗi lần tạo VM mới, bạn có thể dùng cloud images để deploy nhanh hơn rất nhiều. Cloud images boot cực nhanh, dùng cloud-init để cấu hình tự động, và resize disk dễ dàng. Bài viết này hướng dẫn chi tiết cách setup cloud image template trên Proxmox VE.
Nếu bạn mới dùng Proxmox, hãy xem thêm Monitorix Proxmox để giám sát hệ thống và Proxmox Backup Server để backup VMs.
Tại sao nên dùng Cloud Images?
- Boot nhanh: Cloud images được tối ưu sẵn, không có các package không cần thiết.
- Cloud-init: Tự động cấu hình user, network, SSH keys khi khởi động.
- Clone dễ dàng: Tạo template một lần, clone bao nhiêu VM cũng được.
- Disk linh hoạt: Dễ dàng resize disk theo nhu cầu.
1. Tạo VM rỗng
Đầu tiên, tạo một VM rỗng để làm template. Bạn có thể chạy lệnh này trên Proxmox shell:
# Tạo VM template
qm create 990001 \
--name ubuntu-2404-cloud-init \
--description "Ubuntu 24.04 Cloud Init template" \
--ostype l26 \
--cpu cputype=host \
--cores 1 \
--sockets 1 \
--memory 2048 \
--scsihw virtio-scsi-pci \
--net0 virtio,bridge=vmbr0
Giải thích các thông số:
990001— VM ID (chọn số cao để tránh trùng với các VM khác).ostype l26— Linux kernel 2.6+ (Ubuntu, Debian, CentOS đều dùng).scsihw virtio-scsi-pci— Dùng VirtIO SCSI để performance tốt nhất.net0 virtio,bridge=vmbr0— Network card VirtIO, kết nối vào bridge vmbr0.
2. Download Cloud Image
Download Ubuntu 24.04 cloud image về Proxmox:
# Download Ubuntu 24.04 cloud image
wget -O /tmp/noble-server-cloudimg-amd64.img \
https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img
# Hoặc dùng các distribution khác:
# Debian
wget -O /tmp/debian-12-cloudimg.qcow2 \
https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2
# CentOS Stream
wget -O /tmp/centos-stream.qcow2 \
https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-GenericCloud-9-latest.x86_64.qcow2
# Fedora
wget -O /tmp/fedora-cloud.qcow2 \
https://download.fedoraproject.org/pub/fedora/linux/releases/41/Cloud/x86_64/images/Fedora-Cloud-Base-Generic-41-1.4.x86_64.qcow2
3. Import Disk vào VM
Import cloud image vào storage của Proxmox và attach vào VM:
# Import disk vào storage local-lvm
qm importdisk 990001 /tmp/noble-server-cloudimg-amd64.img local-lvm
# Nếu dùng local-zfs storage:
# qm importdisk 990001 /tmp/noble-server-cloudimg-amd64.img local-zfs
Attach disk vừa import vào VM:
# Attach disk vào VM
qm set 990001 --scsi0 local-lvm:vm-990001-disk-0
# Set boot order: boot từ scsi0
qm set 990001 --boot c --bootdisk scsi0
4. Cấu hình Console
Cloud images dùng serial console thay vì VGA monitor. Cấu hình để xem output đúng:
# Thêm serial port và set VGA thành serial console
qm set 990001 --serial0 socket --vga serial0
5. Thêm Cloud-Init Drive
Cloud-init drive chứa cấu hình cho VM: user, password, SSH keys, network…
# Thêm cloud-init drive
qm set 990001 --ide2 local-lvm:cloudinit
6. Convert thành Template
Sau khi hoàn tất, convert VM thành template. Template không thể khởi động, chỉ dùng để clone:
# Convert thành template
qm template 990001
Giờ bạn sẽ thấy VM 990001 trong Proxmox với icon template:
7. Clone từ Template
Trong Proxmox web interface:
- Click chọn template
ubuntu-2404-cloud-init. - Click phải → Clone.
- Điền thông tin: – Name: ubuntu-web-01 – Mode: Full Clone (tạo VM độc lập hoàn toàn)
8. Cấu hình Cloud-Init
Sau khi clone xong, chọn VM mới → Cloud-Init tab để cấu hình:
User Configuration
- User: Tên user đăng nhập (VD: admin)
- Password: Password cho user
- SSH Public Keys: Paste public key để login không cần password
Network Configuration
- IPv4: DHCP hoặc Static (điền IP, gateway, subnet)
- DNS: Nameserver (VD: 8.8.8.8, 1.1.1.1)
DNS Configuration
- DNS Domain: Search domain (VD: example.com)
- DNS Server 1, 2: Nameservers
Sau khi cấu hình xong, click Regenerate Image để áp dụng.
9. Khởi động VM
Start VM và xem boot process qua console:
# Start VM
qm start 101
# Xem console (từ Proxmox shell)
qm terminal 101
# Thoát console: Ctrl+O, sau đó Ctrl+C
Trong web interface, dùng xterm.js console thay vì noVNC để:
- Text rõ ràng hơn.
- Có scrollback buffer.
- Dễ bắt lỗi khi boot.
10. Script tạo Template tự động
Tạo script để tự động setup template cho các distribution khác nhau:
#!/bin/bash
# create-cloud-template.sh
VM_ID=$1
DISTRO=$2
DISK_SIZE=$3
if [ -z "$VM_ID" ] || [ -z "$DISTRO" ]; then
echo "Usage: $0 [disk-size]"
echo "Distro: ubuntu2204, ubuntu2404, debian12, centos9, fedora41"
exit 1
fi
DISK_SIZE=${DISK_SIZE:-8}
# Tạo VM rỗng
qm create $VM_ID \
--name "${DISTRO}-template" \
--ostype l26 \
--cpu cputype=host \
--cores 2 \
--memory 2048 \
--scsihw virtio-scsi-pci \
--net0 virtio,bridge=vmbr0
# Download cloud image
case $DISTRO in
ubuntu2204)
IMG_URL="https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img"
;;
ubuntu2404)
IMG_URL="https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img"
;;
debian12)
IMG_URL="https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-generic-amd64.qcow2"
;;
*)
echo "Unsupported distro"
exit 1
;;
esac
wget -q -O /tmp/cloud-img.img "$IMG_URL"
# Import disk
qm importdisk $VM_ID /tmp/cloud-img.img local-lvm
# Attach disk và cấu hình
qm set $VM_ID --scsi0 local-lvm:vm-${VM_ID}-disk-0
qm set $VM_ID --boot c --bootdisk scsi0
qm set $VM_ID --serial0 socket --vga serial0
qm set $VM_ID --ide2 local-lvm:cloudinit
# Resize disk
qm disk resize $VM_ID scsi0 ${DISK_SIZE}G
# Convert thành template
qm template $VM_ID
echo "Template created: $VM_ID"
# Cleanup
rm /tmp/cloud-img.img
Sử dụng script:
# Tạo Ubuntu 24.04 template
./create-cloud-template.sh 990001 ubuntu2404
# Tạo Debian 12 template
./create-cloud-template.sh 990002 debian12
11. Troubleshooting
VM không boot
- Kiểm tra boot order:
qm set--boot c --bootdisk scsi0 - Kiểm tra disk đã attach:
qm config| grep scsi
Cloud-init không chạy
- Kiểm tra cloud-init drive:
qm config| grep ide2 - Regenerate cloud-init: Click “Regenerate Image” trong Cloud-Init tab
- Xem cloud-init logs:
journalctl -u cloud-init
Console không hiển thị gì
- Kiểm tra VGA setting:
qm set--vga serial0 - Thử dùng xterm.js console thay vì noVNC
Kết Luận
Dùng cloud images trên Proxmox VE giúp tiết kiệm rất nhiều thời gian khi deploy nhiều VMs. Chỉ cần setup template một lần, sau đó clone và cấu hình cloud-init là xong.
Kết hợp với UFW Firewall để bảo mật VMs trên Proxmox.
- Tạo template với cloud image.
- Dùng cloud-init để cấu hình tự động.
- Clone khi cần tạo VM mới.
- Tiết kiệm thời gian install từ ISO.