Bài toán: một máy, nhiều thứ muốn thử
Bạn có một chiếc PC cũ hoặc mini server và muốn thử nhiều thứ trên đó cùng lúc:
- một VM chạy Ubuntu để test backend project A
- một VM khác chạy Debian cho project B
- một VM cài k3s để học Kubernetes
- một VM làm DNS nội bộ với Pi-hole
Nếu chạy tất cả trên cùng một hệ điều hành, mọi thứ đan chéo nhau: port conflict, package version khác nhau, cài thứ này hỏng thứ kia. Xoá đi làm lại mất cả buổi.
Proxmox giải quyết bằng cách cho mỗi project một môi trường riêng hoàn toàn. Thử nghiệm, phá, xoá, clone lại từ đầu — tất cả không ảnh hưởng gì đến máy còn lại.
Proxmox VE là gì, tóm gọn
Proxmox Virtual Environment (PVE) là nền tảng ảo hoá mã nguồn mở cài thẳng lên bare metal, quản lý qua web UI. Nó chạy hai loại môi trường ảo:
- VM (KVM): máy ảo đầy đủ, cài bất kỳ OS nào, hoàn toàn cô lập
- LXC container: nhẹ hơn VM, share kernel với host, khởi động nhanh hơn
Bài này tập trung vào VM vì phù hợp nhất cho bài toán "mỗi project một môi trường độc lập".
Cài Proxmox lên máy
Yêu cầu tối thiểu
- CPU 64-bit có hỗ trợ VT-x (Intel) hoặc AMD-V
- RAM 4GB (thực tế nên có 8GB+ để chạy vài VM cùng lúc)
- Ổ cứng 32GB+
- Lưu ý: Proxmox cài lên bare metal và chiếm toàn bộ máy — không phải cài bên trong Windows hay Linux
Tải ISO và tạo USB boot
Tải ISO từ trang chính thức proxmox.com/downloads, chọn Proxmox VE ISO Installer bản mới nhất.
Tạo USB boot:
# Linux
sudo dd if=proxmox-ve_*.iso of=/dev/sdX bs=4M status=progress
# hoặc dùng Balena Etcher trên Windows/macOS
Cài đặt
Boot từ USB, quá trình cài tương tự cài Ubuntu Server:
- Chọn ổ đĩa cài Proxmox
- Đặt timezone và keyboard layout
- Nhập địa chỉ email, đặt password root
- Cấu hình network: đặt IP tĩnh cho Proxmox host (ví dụ
192.168.1.10/24) - Cài xong, máy reboot
Sau khi reboot, truy cập web UI tại:
https://192.168.1.10:8006
Đăng nhập bằng root và password vừa đặt. Browser sẽ cảnh báo SSL self-signed — bỏ qua và tiếp tục.
Tạo VM đầu tiên
Upload ISO vào Proxmox
Trong web UI: local (storage mặc định) → ISO Images → Upload → chọn file ISO Ubuntu/Debian.
Hoặc download thẳng từ URL:
local → ISO Images → Download from URL
Dán link trực tiếp vào Ubuntu/Debian minimal ISO, Proxmox tự download về.
Tạo VM
Click Create VM ở góc trên phải:
| Tab | Cài đặt quan trọng |
|---|---|
| General | Đặt tên VM, chọn VM ID (tự tăng) |
| OS | Chọn ISO vừa upload, type: Linux |
| System | Giữ mặc định q35, BIOS SeaBIOS hoặc OVMF nếu cần UEFI |
| Disks | Chọn storage local-lvm, đặt dung lượng, bật Discard nếu dùng SSD |
| CPU | Số core, type host để tận dụng tối đa CPU host |
| Memory | RAM cho VM này |
| Network | Bridge vmbr0 (mạng LAN), model VirtIO |
Sau khi tạo xong, chọn VM → Start → Console để cài OS như bình thường.
Template và clone — điểm mạnh nhất của Proxmox
Tạo VM từ đầu mỗi lần mất 10–15 phút. Proxmox có cơ chế template + clone cho phép tạo VM mới trong vài giây.
Tạo template
- Cài một VM Ubuntu sạch, cài các package cơ bản cần thiết (git, curl, docker...)
- Trong VM, chạy lệnh reset machine ID để tránh clone ra VM trùng ID:
sudo cloud-init clean
# hoặc nếu không dùng cloud-init:
sudo truncate -s 0 /etc/machine-id
sudo rm /var/lib/dbus/machine-id
sudo ln -s /etc/machine-id /var/lib/dbus/machine-id
- Shutdown VM
- Trong Proxmox UI, chuột phải vào VM → Convert to Template
VM biến thành template (icon thay đổi), không thể start trực tiếp nữa.
Clone VM từ template
Chuột phải vào template → Clone:
- Mode: Full Clone — tạo bản sao hoàn toàn độc lập, không phụ thuộc template
- Mode: Linked Clone — nhẹ hơn, dùng chung disk với template qua snapshot (tiết kiệm dung lượng nhưng phụ thuộc template)
Với homelab thông thường dùng Full Clone cho đơn giản. Clone xong → Start → SSH vào là có môi trường sạch ngay.
Quản lý storage
Các loại storage mặc định
Sau khi cài Proxmox, mặc định có:
- local: lưu ISO, backup, template — dạng directory
- local-lvm: lưu disk VM — dạng LVM thin pool, hiệu suất tốt hơn
Thêm ổ cứng thứ hai
Nếu có ổ HDD/SSD thêm muốn dùng cho VM:
# Xem các ổ đang có
lsblk
# Format ổ mới (cẩn thận chọn đúng ổ)
fdisk /dev/sdb
# tạo partition mới, type Linux
# Tạo LVM
pvcreate /dev/sdb1
vgcreate data-vg /dev/sdb1
lvcreate -L 200G -T data-vg/data-pool # thin pool 200GB
Sau đó vào Proxmox UI: Datacenter → Storage → Add → LVM-Thin, chọn VG và pool vừa tạo.
Thêm disk vào VM đang chạy
Chọn VM → Hardware → Add → Hard Disk → chọn storage, kích thước → Add.
Trong VM, disk mới xuất hiện là /dev/vdb (chưa có partition). Format và mount bình thường:
sudo fdisk /dev/vdb
sudo mkfs.ext4 /dev/vdb1
sudo mount /dev/vdb1 /data
Resize disk VM
Trong Proxmox UI: chọn VM → Hardware → chọn disk → Resize Disk → nhập thêm bao nhiêu GB.
Sau đó vào trong VM resize partition và filesystem:
# Với disk dạng ext4
sudo growpart /dev/vda 1
sudo resize2fs /dev/vda1
# Với LVM bên trong VM
sudo pvresize /dev/vda3
sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
sudo resize2fs /dev/ubuntu-vg/ubuntu-lv
Snapshot — checkpoint trước khi thử nghiệm nguy hiểm
Proxmox cho phép snapshot VM ở bất kỳ thời điểm nào, kể cả đang chạy.
Chọn VM → Snapshots → Take Snapshot:
- Đặt tên mô tả:
before-install-k8s,clean-state - Tick Include RAM nếu muốn snapshot cả trạng thái bộ nhớ (VM tiếp tục đúng chỗ dừng khi restore)
Khi cài thứ gì đó làm hỏng VM, chọn snapshot cũ → Rollback là về trạng thái trước.
Network trong Proxmox
Bridge mặc định vmbr0
Tất cả VM kết nối qua vmbr0 đều vào cùng mạng LAN với máy host. VM có thể lấy IP từ DHCP router hoặc đặt IP tĩnh bình thường.
Tạo mạng nội bộ riêng giữa các VM
Nếu muốn VM giao tiếp với nhau mà không expose ra LAN:
Vào Proxmox host → System → Network → Create → Linux Bridge:
Name: vmbr1
IP: 10.10.10.1/24 # IP của Proxmox host trên bridge này
Comment: internal lab network
Khi tạo VM, chọn thêm network card kết nối vào vmbr1. Các VM trên vmbr1 có thể nói chuyện với nhau qua dải 10.10.10.x.
Một số tip hữu ích
Đặt IP tĩnh cho VM qua DHCP reservation Thay vì đặt IP tĩnh trong từng VM, đặt DHCP reservation trên router theo MAC address của VM. Dễ quản lý hơn vì đổi IP chỉ cần đổi một chỗ.
Dùng SSH key thay vì password
Trong template, bật SSH và thêm public key vào ~/.ssh/authorized_keys. Mỗi VM clone ra đều SSH được ngay mà không cần nhập password.
Dark mode cho web UI Proxmox 8.x có dark mode. Vào Preferences (avatar góc trên phải) → Color Theme → Dark.
Xem resource usage thực tế Tab Summary của từng VM hiển thị CPU, RAM, disk I/O theo thời gian thực. Hữu ích để biết VM nào đang ngốn tài nguyên.
Lỗi hay gặp
Màn hình console đen sau khi boot VM
Thường do VM đang boot nhưng không output ra serial console. Thử nhấn Enter một lần trong cửa sổ console. Nếu vẫn đen, kiểm tra VM đã được gán ISO chưa và đúng boot order chưa (Options → Boot Order).
VM tạo xong không lấy được IP
Kiểm tra network card của VM có dùng vmbr0 không. Nếu dùng mạng DHCP của LAN, router phải nhìn thấy VM. Ping từ host vào IP VM để kiểm tra:
ping 192.168.1.xxx
Proxmox báo lỗi subscription khi update
Proxmox có bản enterprise (trả phí) và community. Để update không cần subscription, thay repo:
# Tắt enterprise repo
echo "# deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise" \
> /etc/apt/sources.list.d/pve-enterprise.list
# Thêm no-subscription repo
echo "deb http://download.proxmox.com/debian/pve bookworm pve-no-subscription" \
> /etc/apt/sources.list.d/pve-no-subscription.list
apt update && apt dist-upgrade
Clone VM bị trùng hostname và IP
Do không reset machine ID trước khi convert sang template. Với VM đã clone rồi, fix bằng cách vào từng VM:
sudo hostnamectl set-hostname ten-moi
# chỉnh /etc/hosts cho khớp
sudo truncate -s 0 /etc/machine-id
sudo systemd-machine-id-setup
Khi nào không dùng Proxmox
- Máy chỉ có 4GB RAM: chạy Proxmox host ~1GB, còn lại 3GB chia cho VM sẽ rất chật
- Chỉ cần một môi trường test đơn giản: WSL2 trên Windows hoặc một VM dùng VirtualBox là đủ
- Đã dùng Kubernetes: k3s/k8s tự xử lý isolation, không cần lớp VM bên dưới trừ khi cần multi-node trên một máy
- Máy không có VT-x/AMD-V: không chạy được KVM VM (chỉ chạy được LXC)