Nested Virtualization là kỹ thuật cho phép chạy một hypervisor bên trong một máy ảo (VM) thay vì trên phần cứng vật lý. Nghĩa là bạn có thể tạo một VM chạy Proxmox VE, VMware ESXi hoặc Hyper-V bên trong một Proxmox host — và bên trong VM đó lại chạy thêm các VM khác.
Ứng dụng phổ biến nhất của Nested Virtualization là xây dựng lab môi trường để test, học tập, chuẩn bị certification (VCP, RHCSA), hoặc phát triển CI/CD pipelines mà không cần đầu tư nhiều server vật lý. Trên Proxmox VE, việc kích hoạt nested virtualization rất đơn giản và hỗ trợ cả Intel lẫn AMD.
Trong bài viết này, mình sẽ hướng dẫn bạn từng bước: từ kích hoạt nested virtualization trên Proxmox host, tạo VM hỗ trợ nested, cài đặt Proxmox/VMware ESXi/Hyper-V bên trong VM, cho đến tối ưu performance và troubleshooting.
Nested Virtualization hoạt động như thế nào?
Thông thường, hypervisor (như Proxmox VE) chạy trực tiếp trên phần cứng vật lý (bare-metal) và có quyền kiểm soát CPU virtualization extensions (Intel VT-x hoặc AMD-V). Khi bạn chạy một VM bình thường, VM đó không có quyền truy cập các extensions này — nên không thể chạy hypervisor bên trong.
Nested Virtualization giải quyết vấn đề này bằng cách passthrough CPU virtualization extensions từ host xuống VM. Khi enabled, VM guest có thể thấy và sử dụng VT-x/AMD-V, cho phép nó chạy hypervisor riêng và tạo thêm VM bên trong.
Quy trình hoạt động đơn giản: Physical Host → KVM (Proxmox) → Nested VM (có VT-x/AMD-V) → Hypervisor Guest (Proxmox/ESXi/Hyper-V) → VM bên trong.
Kích hoạt Nested Virtualization trên Proxmox
Kiểm tra trạng thái hiện tại
# Kiểm tra nested đã enabled chưa (Intel) cat /sys/module/kvm_intel/parameters/nested # Output: N = disabled, Y = enabled # Kiểm tra nested đã enabled chưa (AMD) cat /sys/module/kvm_amd/parameters/nested # Output: 0 = disabled, 1 = enabled
Kích hoạt Nested Virtualization
# Kích hoạt nested virtualization (Intel) echo "options kvm-intel nested=1" > /etc/modprobe.d/kvm-intel.conf # Kích hoạt nested virtualization (AMD) echo "options kvm-amd nested=1" > /etc/modprobe.d/kvm-amd.conf # Reload module để áp dụng ngay modprobe -r kvm_intel && modprobe kvm_intel # Verify lại cat /sys/module/kvm_intel/parameters/nested # Output: Y
Lưu ý: Nếu module đang được sử dụng bởi VMs đang chạy, bạn cần stop tất cả VMs trước khi reload module. Hoặc đơn giản hơn: reboot host để áp dụng thay đổi.
Tạo VM hỗ trợ Nested Virtualization
Qua Web UI
Để VM có thể chạy hypervisor bên trong, bạn cần cấu hình CPU mode là host (passthrough). Điều này cho phép VM truy cập trực tiếp CPU features của physical host, bao gồm VT-x/AMD-V.
# Web UI Steps: # 1. Create VM → chọn OS type # 2. System → CPU: chọn "host" (passthrough) # 3. Memory: tối thiểu 8GB (nếu chạy Proxmox/ESXi bên trong) # 4. Disk: tối thiểu 64GB # 5. Network: VirtIO (khuyến nghị) # 6. Confirm → Start VM
Qua CLI
# Tạo VM với CPU host passthrough qm create 900 --name nested-lab --memory 8192 --cores 4 --cpu host --scsi0 local-lvm:64 --net0 virtio,bridge=vmbr0 # Verify CPU mode qm config 900 | grep cpu # Output: cpu: host
Verify nested hoạt động trong VM: Sau khi boot VM, kiểm tra xem CPU virtualization extensions đã available:
# Linux: kiểm tra VT-x/AMD-V grep -E "vmx|svm" /proc/cpuinfo | head -1 # Nếu có output = nested đang hoạt động # Windows: Task Manager → Performance → Virtualization: Enabled
Chạy Proxmox VE bên trong VM (Nested Proxmox)
Đây là use case phổ biến nhất: chạy Proxmox VE bên trong một VM trên Proxmox host. Phù hợp để build lab, test cluster, hoặc học tập Proxmox mà không cần nhiều server vật lý.
# Tạo VM cho nested Proxmox qm create 100 --name nested-proxmox --memory 8192 --cores 4 --cpu host --scsi0 local-lvm:128 --net0 virtio,bridge=vmbr0 # Mount Proxmox ISO qm set 100 --ide2 local:iso/proxmox-ve_8.2-1.iso,media=cdrom # Boot và cài đặt Proxmox như bình thường # Truy cập: https://VM-IP:8006 # Yêu cầu tối thiểu cho nested Proxmox: # - 2 CPU cores (4+ khuyến nghị) # - 4GB RAM (8GB+ khuyến nghị) # - 32GB disk (64GB+ khuyến nghị)
Sau khi cài đặt xong, bạn có thể truy cập Proxmox Web UI của nested VM tại https://VM-IP:8006 và tạo thêm VMs/containers bên trong như một Proxmox server bình thường.
Chạy VMware ESXi bên trong Proxmox
Chạy VMware ESXi nested là cách tuyệt vời để học VMware, chuẩn bị VCP certification, hoặc test VMware features mà không cần hardware riêng. ESXi yêu cầu cấu hình cao hơn Proxmox nested.
# Tạo VM cho nested ESXi qm create 200 --name nested-esxi --memory 16384 --cores 8 --cpu host --bios ovmf --scsi0 local-lvm:256 --net0 e1000,bridge=vmbr0 # Mount ESXi ISO qm set 200 --ide2 local:iso/VMware-VMvisor-8.0.iso,media=cdrom # Cài đặt ESXi # Yêu cầu tối thiểu: # - 4GB RAM (8GB+ khuyến nghị) # - 8GB disk # - 2+ CPU cores với VT-x/AMD-V # - Network adapter: E1000 (ESXi không nhận VirtIO)
Lưu ý quan trọng: VMware ESXi yêu cầu network adapter E1000 hoặc VMXNET3. Adapter VirtIO của Proxmox không được ESXi nhận. Ngoài ra, ESXi cần BIOS mode OVMF (UEFI) cho phiên bản 7.0+.
Chạy Hyper-V / WSL2 bên trong Proxmox
Nếu bạn cần chạy Windows với Hyper-V hoặc WSL2 bên trong Proxmox VM, nested virtualization cũng cần được kích hoạt. Use case phổ biến: developer cần Docker Desktop trên Windows VM.
# Tạo Windows VM với nested support qm create 300 --name windows-dev --memory 8192 --cores 4 --cpu host --bios ovmf --scsi0 local-lvm:128 --net0 virtio,bridge=vmbr0 # Mount Windows ISO và VirtIO drivers qm set 300 --ide2 local:iso/windows-11.iso,media=cdrom qm set 300 --ide3 local:iso/virtio-win.iso,media=cdrom # Sau khi cài Windows, kiểm tra Hyper-V: # PowerShell: systeminfo | findstr /C:"Hyper-V" # Hoặc: Task Manager → Performance → Virtualization: Enabled
Docker trong LXC Container (thay thế Nested VM)
Nếu mục đích của bạn chỉ là chạy Docker containers, không cần tạo VM nested. Proxmox hỗ trợ Docker trong LXC container — nhẹ hơn, nhanh hơn, và ít overhead hơn nhiều so với nested VM.
# Tạo LXC container với nesting enabled pct create 400 local:vztmpl/ubuntu-24.04-standard.tar.gz --hostname docker-host --cores 4 --memory 4096 --rootfs local-lvm:32 --net0 name=eth0,bridge=vmbr0,ip=dhcp --features nesting=1 # Start container pct start 400 # Vào container và cài Docker pct enter 400 apt update && apt install docker.io -y docker run --rm hello-world # Verify: "Hello from Docker!" = thành công
So sánh Docker trong LXC vs Nested VM:
| Tiêu chí | Docker trong LXC | Nested VM |
|---|---|---|
| Overhead | Rất thấp (~2%) | 5-15% |
| Startup time | Giây | Phút |
| Resource usage | Tối thiểu | Cần nhiều RAM/CPU |
| Use case | Docker, CI/CD | Lab hypervisor, certification |
Tối ưu Performance cho Nested VMs
- CPU host passthrough: Luôn dùng CPU mode “host” cho nested VMs — đây là bắt buộc để nested hoạt động
- Dedicated CPU cores: Đừng oversubscribe CPU. Nếu host có 16 cores, không nên chạy quá 3-4 nested VMs với 4 cores mỗi cái
- Tắt memory ballooning: Cố định RAM cho nested VMs, không dùng ballooning — nested hypervisor cần RAM ổn định
- Dùng VirtIO drivers: Cho disk và network của parent VM — giảm I/O latency đáng kể
- NVMe storage: Dùng NVMe cho parent VM disk — giảm I/O bottleneck khi nested VMs đọc/ghi đồng thời
- Tắt KSM: Kernel Same-page Merging có thể gây overhead cho nested VMs, nên disable nếu host có đủ RAM
Troubleshooting Nested Virtualization
| Vấn đề | Nguyên nhân | Cách xử lý |
|---|---|---|
| Nested VM không boot | VT-x/AMD-V chưa enabled trên host | Kích hoạt nested trong /etc/modprobe.d/ và reload module |
| ESXi báo lỗi CPU | ESXi cần CPU features cụ thể | Dùng CPU mode “host”, kiểm tra compatibility |
| Performance rất chậm | Overallocated resources | Tăng RAM/CPU cho parent VM, giảm số nested VMs |
| “Virtualization not enabled” | Nested chưa enabled trên host | Verify: cat /sys/module/kvm_intel/parameters/nested |
| VM freeze hoặc crash | Memory overcommit quá nhiều | Giảm RAM allocation, tắt ballooning và KSM |
| Network chậm trong nested | Sai driver network | Dùng VirtIO cho Proxmox, E1000 cho ESXi |
FAQ – Câu hỏi thường gặp
- Nested virtualization có ảnh hưởng performance không? Có, overhead khoảng 5-15% so với bare metal. Tuy nhiên, đủ cho lab, testing và certification preparation.
- Có thể chạy bao nhiêu nested VMs? Phụ thuộc vào tài nguyên host. Thông thường 3-5 nested VMs với 4 cores mỗi cái trên host 16 cores là ổn định.
- Nested virtualization có ổn định cho production không? Không khuyến nghị. Nested virtualization phù hợp cho lab, testing và development. Production nên dùng bare-metal hypervisor.
- Làm sao verify nested đang hoạt động? Trong guest VM, chạy:
grep -E "vmx|svm" /proc/cpuinfo. Nếu có output, nested đang hoạt động. - Có thể chạy Docker mà không cần nested VM không? Có. Dùng Docker trong LXC container với
nesting=1— nhẹ hơn và nhanh hơn rất nhiều so với nested VM.
Tìm hiểu thêm về Proxmox Backup Server và Proxmox vs VMware trên vnhte.com.