Appendice D – Ricostruire il laboratorio in virtuale
Il manuale descrive un laboratorio fisico: server, switch, router. Se non hai l’hardware, puoi ricostruire lo stesso laboratorio dentro un unico server Proxmox VE, con la virtualizzazione annidata (nested): i nodi Proxmox VE del laboratorio diventano VM, e dentro quelle VM girano a loro volta VM e container.
Questa appendice spiega come farlo e cosa cambia rispetto all’hardware fisico. I passi chiave sono stati provati davvero: un nodo Proxmox VE 9.2 in una VM, con una VM annidata che usa KVM e un trunk VLAN che raggiunge il resto del laboratorio.
Dipendenze
Sezione intitolata “Dipendenze”- Lab precedenti: Lab 01, per l’inventario dei server, le reti, le VLAN e il piano degli indirizzi.
- Server ospite: un server Proxmox VE 9.2 con CPU Intel VT-x o AMD-V, abbastanza RAM e disco per tutte le VM (vedi Dimensionamento).
- ISO: le stesse del Lab 01, caricate sullo storage del server ospite.
- Nella prova di questa appendice: il server ospite è
desopve03e la VM di prova èpve-virt01(VMID 801,172.27.199.82), eliminata alla fine.
Obiettivi
Sezione intitolata “Obiettivi”- Capire come funziona la virtualizzazione annidata e cosa serve al server ospite.
- Dimensionare le VM che sostituiscono i server del laboratorio.
- Usare un bridge VLAN-aware del server ospite come switch del laboratorio, con trunk verso le VM-nodo.
- Sapere quali risultati dei lab cambiano in virtuale.
Come funziona
Sezione intitolata “Come funziona”Nella virtualizzazione annidata ci sono tre livelli:
- il server ospite (livello 0) esegue Proxmox VE sull’hardware;
- le VM-nodo (livello 1) eseguono Proxmox VE come se fossero server: sono i
desopve01-04del laboratorio; - le VM e i container dei lab (livello 2) girano dentro le VM-nodo.
Perché il livello 1 possa usare KVM, il processore virtuale della VM-nodo deve esporre le estensioni di virtualizzazione (Intel VT-x o AMD-V). Servono due cose:
- sul server ospite, il modulo KVM con l’annidamento attivo (
nested=Y), che è il valore predefinito dei kernel recenti; - sulla VM-nodo, il tipo di CPU
host, che passa alla VM tutte le istruzioni del processore, comprese quelle di virtualizzazione.
La rete del laboratorio diventa un bridge VLAN-aware del server ospite: fa da switch. Una scheda di VM collegata a un bridge VLAN-aware senza tag è una porta trunk: riceve il traffico non taggato del bridge e tutte le VLAN consentite dal bridge (bridge-vids, di solito 2-4094). L’opzione trunks della scheda limita le VLAN a quelle elencate.
Le VM annidate escono con i propri indirizzi MAC, diversi da quello della scheda della VM-nodo. Il bridge Linux li impara come farebbe uno switch, ma il firewall di Proxmox VE sulla scheda della VM-nodo, se attivo, ha il filtro MAC acceso per impostazione predefinita: lascia passare solo il MAC della scheda e blocca quelli delle VM annidate. Sulle schede delle VM-nodo il firewall va quindi lasciato spento, oppure va disattivato il filtro MAC (MAC filter nelle opzioni del firewall della VM).
Dimensionamento
Sezione intitolata “Dimensionamento”Le VM ricalcano l’inventario del Lab 01:
| VM | vCPU | RAM | Dischi | Schede di rete | Note |
|---|---|---|---|---|---|
desopve01-03 |
4, tipo host |
32 GB (minimo 16 GB) | 2 × 50 GB + 2 × 60 GB (+ 1 × 60 GB nel lab 18 su desopve03) |
3 (+ 2 nel lab 20) | VirtIO SCSI single, VirtIO net |
desopve04 |
4, tipo host |
16 GB | 1 × 50 GB (+ 4 × 20 GB, 1 × 20 GB e 2 × 40 GB nei lab 09, 10 e 18) | 2 (+ 1 nel lab 18, + 1 nel lab 23) | VirtIO SCSI single, VirtIO net |
desopve-dc01 |
4 | 8 GB | 90 GB + 300 GB | 2 | UEFI con Secure Boot e TPM, driver VirtIO o schede emulate |
desonas |
4 | 16 GB | 32 GB + 2 × 100 GB | 1 | |
desopbs01, desopdm01 |
4 e 2 | 8 GB e 4 GB | 32 GB + 2 × 100 GB, 32 GB | 1 | |
netsvc |
2 | 2 GB | 20 GB | 2 | una scheda sul bridge del laboratorio, una su quello con l’uscita verso Internet |
rtr-core |
1 | 512 MB | 128 MB | 1-2 | MikroTik CHR, importato come nel Lab 26 |
esxi8 (solo lab 50) |
4, tipo host |
16 GB | 200 GB + 150 GB | 1 |
In totale servono circa 170 GB di RAM e 2,2 TB di disco, che con il thin provisioning occupano molto meno. Con 16 GB per nodo si scende a circa 120 GB di RAM: bastano per tutti i lab tranne Ceph e HA, che con meno memoria diventano lenti.
Due accorgimenti sui dischi:
- Numeri di serie diversi. ZFS, Ceph e TrueNAS riconoscono i dischi dal numero di serie. I dischi di una VM Proxmox VE ne hanno uno diverso per ogni disco (
drive-scsi0,drive-scsi1…); se vuoi valori più realistici imposta l’opzioneserial=di ogni disco. - Dischi aggiunti nei lab. Dove il manuale inserisce un disco in un vano hot-swap, in virtuale aggiungi il disco alla VM-nodo con la VM accesa (
qm set <vmid> --scsiN <storage>:<GB>). Le schede di rete si aggiungono anch’esse a caldo, cosa che su un server fisico non si fa.
Procedura
Sezione intitolata “Procedura”1. Il server ospite
Sezione intitolata “1. Il server ospite”-
Verifica che l’annidamento sia attivo nel modulo KVM:
root@desopve03 cat /sys/module/kvm_intel/parameters/nestedOutput YSu processori AMD il file è
/sys/module/kvm_amd/parameters/nested. Se la risposta èN, attivalo e riavvia il server ospite:Finestra del terminale echo "options kvm_intel nested=Y" > /etc/modprobe.d/kvm-intel.conf -
Prepara i bridge. Per un laboratorio isolato basta un bridge VLAN-aware senza porte fisiche, che fa da switch del laboratorio, più il bridge già esistente con l’uscita verso la tua rete, dove va solo la seconda scheda di
netsvc. In/etc/network/interfacesdel server ospite:auto vmbrlabiface vmbrlab inet manualbridge-ports nonebridge-stp offbridge-fd 0bridge-vlan-aware yesbridge-vids 2-4094#switch del laboratorioApplica con
ifreload -a. Nella prova di questa appendice il server ospite è un nodo del laboratorio, e al posto divmbrlabsono serviti i suoi bridge VLAN-awarevmbr0(gestione) evmbr1(VLAN delle VM).
2. La VM-nodo
Sezione intitolata “2. La VM-nodo”La prova usa una VM-nodo piccola (2 vCPU, 4 GB, un disco), installata in automatico come nell’Appendice A: file di risposte con fqdn = "pve-virt01.proxmox.community", cidr = "172.27.199.82/24", gateway 172.27.199.1, DNS 172.27.199.20, filesystem ext4 su sda, e ISO preparata con proxmox-auto-install-assistant prepare-iso. Per i nodi del laboratorio completo usa le risorse della tabella Dimensionamento e, se preferisci, l’installazione guidata del Lab 03.
-
Crea la VM con il tipo di CPU
hoste avviala:root@desopve03 qm create 801 --name pve-virt01 --memory 4096 --cores 2 --cpu host --machine q35 \--bios ovmf --efidisk0 local-zfs:1,efitype=4m,pre-enrolled-keys=0 --scsihw virtio-scsi-single \--scsi0 local-zfs:32,discard=on,iothread=1 --net0 virtio,bridge=vmbr0 \--ide2 local:iso/pve92-auto.iso,media=cdrom --boot "order=scsi0;ide2" --ostype l26qm start 801Circa cinque minuti dopo l’installazione è finita e il nodo risponde in SSH.
-
Aggiungi la scheda trunk verso le VLAN delle VM.
trunks=10;20lascia passare solo le VLAN 10 e 20:root@desopve03 qm set 801 --net1 "virtio,bridge=vmbr1,trunks=10;20"Output update VM 801: -net1 virtio,bridge=vmbr1,trunks=10;20La configurazione della VM-nodo:
root@desopve03 qm config 801Output bios: ovmfboot: order=scsi0;ide2cores: 2cpu: hostefidisk0: local-zfs:vm-801-disk-0,efitype=4m,pre-enrolled-keys=0,size=1Mide2: local:iso/pve92-auto.iso,media=cdrom,size=1667264Kmachine: q35memory: 4096name: pve-virt01net0: virtio=BC:24:11:2E:A8:FA,bridge=vmbr0net1: virtio=BC:24:11:62:89:7F,bridge=vmbr1,trunks=10;20ostype: l26scsi0: local-zfs:vm-801-disk-1,discard=on,iothread=1,size=32Gscsihw: virtio-scsi-single
3. Verifiche dentro la VM-nodo
Sezione intitolata “3. Verifiche dentro la VM-nodo”-
Il nodo è Proxmox VE 9.2 e vede le estensioni di virtualizzazione:
root@pve-virt01 hostname -f; pveversionOutput pve-virt01.proxmox.communitypve-manager/9.2.2/b9984c6d90a4bd80 (running kernel: 7.0.2-6-pve)root@pve-virt01 lscpu | grep -E "Virtualization|Hypervisor vendor"Output Virtualization: VT-xHypervisor vendor: KVMVirtualization type: fullroot@pve-virt01 ls -l /dev/kvmOutput crw-rw---- 1 root kvm 10, 232 Nov 10 11:26 /dev/kvmVirtualization: VT-xe il device/dev/kvmdicono che KVM è disponibile anche al livello 1. Il nodo è appena installato, quindi è alla versione della ISO (9.2.2): il Lab 04 lo porterebbe all’ultima 9.2.x. -
Una VM annidata parte con l’accelerazione KVM. La VM di prova non ha dischi: basta che si avvii.
root@pve-virt01 qm create 100 --name test-l2 --memory 256 --cores 1 --net0 virtio,bridge=vmbr0qm start 100qm status 100Output status: runningroot@pve-virt01 qm monitor 100qm monitor info kvmOutput kvm support: enabled
Senza disco, il firmware cerca all’infinito un dispositivo di avvio e la VM usa il 100% della sua CPU: è normale. Nell’elenco dei task compare anche un errore di Update package database: il nodo appena installato non ha ancora il proxy per APT, che si configura nel Lab 04.
-
Il trunk porta le VLAN consentite fino al resto del laboratorio. Dentro la VM-nodo la seconda scheda è
ens19: un’interfaccia temporanea sulla VLAN 10 raggiunge il gateway della VLAN (router01, Lab 26) e un container su un altro nodo:root@pve-virt01 ip link set ens19 upip link add link ens19 name ens19.10 type vlan id 10ip addr add 10.10.10.82/24 dev ens19.10ip link set ens19.10 upping -c3 -W1 10.10.10.1Output PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=3.86 ms64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=0.930 ms64 bytes from 10.10.10.1: icmp_seq=3 ttl=64 time=1.46 ms--- 10.10.10.1 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2003msrtt min/avg/max/mdev = 0.930/2.083/3.860/1.274 msroot@pve-virt01 ping -c3 -W1 10.10.10.122Output PING 10.10.10.122 (10.10.10.122) 56(84) bytes of data.64 bytes from 10.10.10.122: icmp_seq=1 ttl=64 time=2.66 ms64 bytes from 10.10.10.122: icmp_seq=2 ttl=64 time=1.61 ms64 bytes from 10.10.10.122: icmp_seq=3 ttl=64 time=0.821 ms--- 10.10.10.122 ping statistics ---3 packets transmitted, 3 received, 0% packet loss, time 2005msrtt min/avg/max/mdev = 0.821/1.697/2.661/0.753 ms -
Una VLAN fuori da
trunksnon passa. La VLAN 100 è la rete di migrazione del Lab 22:root@pve-virt01 ip link add link ens19 name ens19.100 type vlan id 100ip addr add 10.100.10.82/24 dev ens19.100ip link set ens19.100 upping -c3 -W1 10.100.10.21Output PING 10.100.10.21 (10.100.10.21) 56(84) bytes of data.--- 10.100.10.21 ping statistics ---3 packets transmitted, 0 received, 100% packet loss, time 2025msPer le VM-nodo del laboratorio completo lascia le schede senza
trunks, così passano tutte le VLAN del bridge, come sulle porte trunk dello switch fisico.
4. Pulizia della prova
Sezione intitolata “4. Pulizia della prova”La VM di prova ha esaurito il suo compito. La ISO preparata contiene la password di root in chiaro, quindi va distrutta con shred:
qm stop 801 && qm destroy 801 --purge 1 --destroy-unreferenced-disks 1purging VM 801 from related configurations..shred -u /var/lib/vz/template/iso/pve92-auto.iso /dev/shm/answer.tomlrm -f /var/lib/vz/template/iso/proxmox-ve_9.2-1.isoapt remove proxmox-auto-install-assistantCosa cambia rispetto ai server fisici
Sezione intitolata “Cosa cambia rispetto ai server fisici”Il comportamento di Proxmox VE è lo stesso, ma alcuni risultati dei lab cambiano:
- Prestazioni. CPU, dischi e rete passano da due livelli di virtualizzazione: i numeri dei benchmark (Lab 19, Lab 34) sono più bassi e variano di più tra una prova e l’altra. Il multiqueue delle schede VirtIO, che sull’hardware aiuta, in virtuale può non portare vantaggi.
- Ceph. Con dischi lenti Ceph segnala spesso
BLUESTORE_SLOW_OP_ALERT. L’avviso resta visibile 24 ore: conceph config set osd bluestore_slow_ops_warn_lifetime 600sparisce 10 minuti dopo l’ultimo episodio. - Tempi di avvio. Il primo avvio di una VM con firmware UEFI (OVMF) può richiedere qualche minuto, e il messaggio Press any key to boot from CD scade prima che tu lo veda: avvia dalla ISO con il Boot Manager del firmware. L’installazione di Windows Server richiede molto più tempo.
- MTU e VLAN. Il bridge del server ospite decide quali frame passano: per le prove QinQ del Lab 28 e per eventuali jumbo frame alza la MTU del bridge e delle schede delle VM-nodo.
- Guasti. Al posto della scheda di gestione dei server fisici, per spegnere di colpo un nodo usa
qm stop <vmid>sul server ospite, eqm startper riaccenderlo. Il fencing dell’HA (Lab 49) funziona con il watchdog software come sull’hardware. - Hardware nuovo. Dischi e schede di rete si aggiungono con la VM accesa: sull’hardware, invece, le schede si montano a server spento.
Verifica e test
Sezione intitolata “Verifica e test”- Sul server ospite
nestedvaleY. - Dentro la VM-nodo
lscpumostraVirtualization: VT-x(oAMD-V) ed esiste/dev/kvm. - Una VM annidata parte e
info kvmrispondekvm support: enabled. - Dalla VM-nodo le VLAN consentite raggiungono il resto del laboratorio, quelle escluse da
trunksno.
Stato finale del lab
Sezione intitolata “Stato finale del lab”- La VM di prova 801
pve-virt01è eliminata, con i suoi dischi. - Le ISO e il file di risposte sono distrutti, e su
desopve03l’assistente dell’installazione automatica è disinstallato.
Cosa hai imparato
Sezione intitolata “Cosa hai imparato”- La virtualizzazione annidata richiede l’annidamento attivo nel modulo KVM del server ospite e il tipo di CPU
hostnelle VM-nodo. - Un bridge VLAN-aware fa da switch: una scheda senza tag è un trunk, e
trunkssceglie le VLAN che passano. - Il filtro MAC del firewall di Proxmox VE va spento sulle schede delle VM-nodo, altrimenti le VM annidate restano isolate.
- In virtuale i lab funzionano allo stesso modo, ma prestazioni, tempi di avvio e simulazione dei guasti cambiano.