Tạo và quản lý máy ảo với Proxmox VE: Từ cài đặt đến monitoring thực tế

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Vì sao chọn Proxmox thay vì quản lý KVM thủ công?

Nếu bạn đã từng setup KVM bằng virsh hay libvirt, chắc chắn biết cảm giác ngồi gõ lệnh để tạo VM, chỉnh network, gắn disk — mọi thứ đều phải nhớ syntax. Proxmox VE giải quyết chuyện đó bằng cách bọc KVM (và LXC containers) vào một web interface đầy đủ tính năng, kèm cluster management, snapshot, và backup tích hợp sẵn.

Mình chạy homelab với Proxmox VE quản lý 12 VM và container — playground để test mọi thứ trước khi đưa lên production. Bỏ KVM thuần vì lý do đơn giản: số VM vượt qua 5-6 cái thì quản lý bằng command line bắt đầu ngốn thời gian thật sự. Với Proxmox, tạo VM mới mất khoảng 2 phút qua web UI, còn SSH vào node để gõ lệnh vẫn dùng được bất cứ lúc nào.

Thứ mình thấy tiện nhất so với KVM thủ công: toàn bộ config VM được lưu dưới dạng file text tại /etc/pve/qemu-server/<vmid>.conf, dễ backup và version control. Mỗi thay đổi qua web UI đều được ghi log — khi debug sau này, lọc log một cái là biết ai chỉnh gì lúc mấy giờ.

Cài đặt Proxmox VE

Yêu cầu phần cứng thực tế

Proxmox VE cần CPU hỗ trợ virtualization (Intel VT-x hoặc AMD-V). Kiểm tra trước khi cài:

egrep -c '(vmx|svm)' /proc/cpuinfo
# Kết quả > 0 là CPU hỗ trợ — nếu ra 0, vào BIOS bật Intel Virtualization Technology

Cấu hình tối thiểu để chạy được:

  • CPU: 4 cores (8 cores nếu chạy nhiều VM song song)
  • RAM: 8GB (mình khuyến nghị 32GB+ cho homelab nghiêm túc)
  • Storage: SSD 128GB+ — HDD sẽ tạo bottleneck nghiêm trọng khi nhiều VM cùng ghi disk
  • NIC: 1 port Gigabit (2 port nếu muốn tách management network và VM traffic)

Quy trình cài đặt

Download ISO từ trang chủ Proxmox, tạo USB boot:

dd if=proxmox-ve_8.x.iso of=/dev/sdX bs=1M status=progress
# Thay /dev/sdX bằng device USB của bạn (dùng lsblk để kiểm tra)

Installer khá thẳng — wizard dẫn qua chọn ổ đĩa, timezone, password root. Phần network thì điền cẩn thận hơn một chút:

  • Management IP: IP tĩnh cho Proxmox web UI (ví dụ: 192.168.1.10/24)
  • Gateway: Router của bạn (192.168.1.1)
  • Hostname: FQDN, ví dụ pve.homelab.local

Cài xong, truy cập web UI tại https://192.168.1.10:8006 (HTTPS, port 8006). Đăng nhập bằng root và password vừa đặt. Browser sẽ cảnh báo SSL certificate — đây là self-signed cert của Proxmox, bấm “Advanced → Proceed” để tiếp tục.

Cấu hình chi tiết — Tạo và quản lý VM

Upload ISO vào Proxmox

Trước khi tạo VM, cần có ISO của OS. Cách nhanh nhất là download thẳng vào node qua SSH:

wget -P /var/lib/vz/template/iso/ \
  https://releases.ubuntu.com/22.04/ubuntu-22.04.3-live-server-amd64.iso

# Verify checksum
sha256sum /var/lib/vz/template/iso/ubuntu-22.04.3-live-server-amd64.iso

Hoặc upload từ máy local qua web UI: Datacenter → pve → local (pve) → ISO Images → Upload.

Tạo VM qua Web UI

Click Create VM ở góc phải trên. Wizard đi qua 7 tab — mình sẽ note những điểm hay bị bỏ qua:

  1. General: VM ID tự tăng, đặt tên theo pattern rõ ràng như ubuntu-prod-01, debian-test-02.
  2. OS: Chọn ISO vừa upload, OS type và version (ảnh hưởng đến driver mặc định được load).
  3. System: Linux thì giữ mặc định. Cài Windows thì bật OVMF (UEFI) và thêm TPM 2.0 cho Windows 11.
  4. Disks: Chọn VirtIO Block làm bus type để có I/O performance tốt nhất. Bật Discard nếu storage là SSD (hỗ trợ TRIM).
  5. CPU: Số cores. Đừng assign quá nhiều — overcommit được phép nhưng khi tất cả VM cùng tải sẽ gây CPU contention ngay.
  6. Memory: Bật Ballooning Device để VM trả RAM về host khi idle — tiết kiệm đáng kể khi chạy nhiều VM.
  7. Network: Bridge vmbr0 là mặc định. Model VirtIO cho throughput cao nhất, E1000 nếu OS cũ không có driver VirtIO.

Tạo VM bằng CLI (qm command)

Khi cần tạo nhiều VM cùng lúc hoặc viết automation script, dùng qm:

# Tạo VM với ID 200
qm create 200 --name ubuntu-test \
  --memory 2048 \
  --cores 2 \
  --net0 virtio,bridge=vmbr0 \
  --scsihw virtio-scsi-pci \
  --scsi0 local-lvm:32 \
  --ide2 local:iso/ubuntu-22.04.3-live-server-amd64.iso,media=cdrom \
  --boot c --bootdisk scsi0 \
  --ostype l26

# Start VM
qm start 200

# Xem trạng thái
qm status 200

# Shutdown graceful (gửi ACPI signal)
qm shutdown 200

# Stop ngay lập tức (tương đương rút điện)
qm stop 200

Snapshot và Clone VM

Đây là tính năng mình dùng nhiều nhất — snapshot trước khi test thứ gì đó rủi ro, clone để tạo VM mới từ template:

# Tạo snapshot
qm snapshot 200 snap-before-upgrade --description "Before Ubuntu dist-upgrade"

# List tất cả snapshot của VM
qm listsnapshot 200

# Rollback về snapshot (VM phải stop hoặc dùng live snapshot)
qm rollback 200 snap-before-upgrade

# Xóa snapshot không cần nữa
qm delsnapshot 200 snap-before-upgrade

Golden image workflow mình hay dùng cho homelab: chuẩn bị 1 VM với OS cài sẵn, SSH keys, và các package thường dùng. Convert thành template. Sau đó clone ra mỗi khi cần VM mới — nhanh hơn cài từ đầu rất nhiều:

# Convert VM thành template (sau khi convert không start được nữa)
qm template 200

# Clone full từ template (independent VM, chiếm disk riêng)
qm clone 200 301 --name web-server-01 --full

# Clone linked (tiết kiệm disk, nhưng phụ thuộc vào template)
qm clone 200 302 --name web-server-02

# Start VM vừa clone
qm start 301

Kiểm tra và Monitoring

Monitor tài nguyên qua Web UI

Không cần setup Grafana ngay từ đầu — built-in monitoring của Proxmox đủ dùng cho homelab. Mở summary của bất kỳ node hay VM nào, bạn thấy ngay real-time graph: CPU, memory, disk I/O, và network traffic.

Lịch sử metric được giữ theo nhiều khoảng thời gian: hour, day, week, month, year. Khi VM nào đó bỗng dưng chậm, mình thường check graph CPU/disk I/O 24h qua là tìm ra nguyên nhân trong vài phút — không cần mò logs thủ công.

Monitor bằng CLI

# List tất cả VM và trạng thái
qm list

# Xem chi tiết config của VM
qm config 200

# Status real-time của VM (CPU, memory, uptime)
pvesh get /nodes/pve/qemu/200/status/current

# List tất cả VM dưới dạng JSON, lọc tên
pvesh get /nodes/pve/qemu --output-format json | jq '.[].name'

# Kiểm tra disk usage của storage
pvesh get /nodes/pve/storage --output-format table

# Xem toàn bộ tasks (kể cả failed)
pvesh get /nodes/pve/tasks --output-format table | head -20

Script alert khi VM down

Proxmox 8.x đã có Notifications tích hợp sẵn (vào Datacenter → Notifications). Nếu muốn alert đơn giản qua Telegram, script này đủ dùng:

#!/bin/bash
# /root/check-vms.sh — chạy mỗi 5 phút qua cron
TELEGRAM_BOT_TOKEN="your_bot_token"
CHAT_ID="your_chat_id"

for vmid in $(qm list | awk 'NR>1 {print $1}'); do
  status=$(qm status $vmid | awk '{print $2}')
  name=$(qm config $vmid | grep '^name:' | awk '{print $2}')
  
  if [ "$status" != "running" ]; then
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
      -d "chat_id=${CHAT_ID}&text=⚠️ VM ${name} (ID: ${vmid}) status: ${status}"
  fi
done
# Thêm vào crontab
*/5 * * * * /root/check-vms.sh

Backup VM với vzdump

Scheduled backup qua web UI tại Datacenter → Backup là cách dễ nhất. CLI dùng khi cần backup ngoài lịch:

# Backup VM 200 với compression zstd (nhanh, tỉ lệ nén tốt)
vzdump 200 --storage local --compress zstd --mode snapshot

# Backup tất cả VM
vzdump --all --storage local --compress zstd --mode snapshot

# Restore từ file backup
qmrestore /var/lib/vz/dump/vzdump-qemu-200-2024_01_15-10_30_00.vma.zst 300
# 300 là VM ID mới sau khi restore

Mẹo hay: dùng mode snapshot thì không cần tắt VM trong lúc backup. Proxmox tạo KVM snapshot, backup từ đó rồi tự dọn — VM chạy xuyên suốt, không bị gián đoạn.

Share: