Quando si parla di virtualizzazione in ambito server viene immediato pensare a VMware vSphere e magari, in seconda battuta, a Hyper-V di Microsoft o a Citrix XenServer, piuttosto che a Red Hat Virtualization (KVM). Proxmox Virtual Environment (VE) è una alternativa senza dubbio meno blasonata e conosciuta, ma comunque valida e originale.
UPDATE: in datata 12 Dicembre, dopo la fine delle nostre prove, è stata rilasciata la versione 4.1. Basata sull'ultima release Debian Jessie con Kernel 4.2.6, LXC e QEMU 2.4.1. Sono stati risolti alcuni bug e migliorata l'integrazione con ZFS, oltre che svariate funzioni legate ai container su LXC.
Proxmox è un progetto open source basato su KVM e – dalla nuova versione 4.0 – anche su LXC (Linux Containers): è gratuito ma la società che lo sviluppa mette a disposizione il supporto commerciale a pagamento. Si tratta di un hypervisor basato su Debian, che usa una versione modificata del kernel Red Hat Enterprise Linux (RHEL) ed è fornito come immagine ISO installabile in modalità bare-metal direttamente sugli host fisici. La sua interfaccia di gestione è esclusivamente Web e non richiede un server o una VM dedicata per il management. Come la maggior parte dei progetti Linux based, può succedere che si renda necessario l’utilizzo della linea di comando per svolgere alcune operazioni avanzate. La documentazione disponibile è discreta, non mancano guide dettagliate per tutte le operazioni principali consultabili sulla Wiki dedicata, ma siamo comunque molto lontani dai livelli di progetti come vSphere o Hyper-V.
Proxmox permette di creare due tipologie di macchine virtuali (VM): Full Virtualization con l’utilizzo di KVM (Kernel-based Virtual Machine) e Container-based. Nel primo caso si tratta di classiche VM autonome con risorse e sistema operativo dedicati, mentre l’utilizzo dei Container permette di implementare una virtualizzazione a livello di sistema operativo, per più sistemi Linux isolati su un singolo host. Da specificare che, a partire dalla release 4.0, i Container sono gestiti utilizzando LXC (Linux Containers) al posto di OpenVZ che è stato abbandonato.
Come le migliori piattaforme IAAS, Proxmox permette di creare cluster multi-nodo per implementare l’alta affidabilità (HA, high availability): questa funzione ad esempio non è gestibile direttamente da interfaccia Web ma deve essere realizzata da linea di comando. L’architettura multi-master consente di non avere nodi dedicati alla gestione centralizzata, permettendo un risparmio in termini di risorse ed escludendo la presenza di Single Point of Failure (SPOF). Infatti, accedendo via Web a uno qualsiasi degli host, è possibile vedere e gestire tutti quelli presenti nel cluster. Avendo a disposizione una configurazione di questo tipo, si può anche implementare l’HA singolarmente sia sulle VM sia sui Container, a patto di avere uno storage condiviso dedicato. Come accade con vSphere sono supportati sia i dischi locali (con i file system LVM, ZFS) sia storage di rete collegati via protocollo NFS, iSCSI, o configurati con file system di tipo GLusterFS. Nell’ottica della configurazione in cluster, è interessante la possibilità di implementare uno storage distribuito utilizzando il file system Ceph, che però richiede un server di gestione del servizio dedicato (anche se è possibile installarlo su un nodo del cluster in ambienti di piccole dimensioni)
La piattaforma supporta snapshot multipli e include funzionalità di backup native, anche schedulabili, per ogni singola VM. Non mancano le possibilità di migrazione “live” delle VM anche tra storage differenti e senza downtime (per intenderci l’equivalente di vMotion e Storage vMotion in ambito VMware).
Il networking è strutturato sul modello bridged, similmente a quanto accade su vSphere, un bridge è l’equivalente software di uno switch fisico, dove più macchine virtuali possono collegarsi e condividere il canale di comunicazione. Per ogni host è possibile realizzare fino a 4096 bridge e l’accesso al mondo esterno avviene associando questi ultimi a porte di rete fisiche sul server. La gestione del networking può esser completamente controllata tramite l’apposita voce dell’interfaccia Web.
Installazione e utilizzo
La procedura di installazione risulta piuttosto semplice, durante le varie fasi è possibile selezionare le impostazioni di default, oppure intervenire per alcuni setup specifici come, ad esempio, la configurazione dello storage locale con file system ZFS (soluzione che risulta utile in casi dove si preferisca una gestione completamente software dei dischi, al posto di un RAID realizzato via hardware dal controller fisico). L’aggiunta di storage di rete (nel nostro caso con NFS) può essere fatta in pochi semplici passaggi, rendendoli visibili sia al singolo host che all’intero cluster.
Una volta terminato il setup di Proxmox sui nodi, abbiamo provato a realizzare il cluster, fase indispensabile per l’High Availability. Questa funzionalità va implementata da linea di comando agendo sui singoli nodi, una volta creato il cluster sul primo, è sufficiente “agganciare” gli altri per vederli comparire nella colonna di sinistra dell’interfaccia Web. Contrariamente a quanto si possa pensare, sono sufficienti due semplici comandi per effettuare queste operazioni: pvecm create [nome-cluster] (per creare il cluster da uno qualsiasi dei nodi), e pvecm add [Indirizzo-IP-cluster] (per aggiungereli al cluster esistente - nell'immagine la procedura di creazione).
Come già accennato in precedenza, la natura multi-master di Proxmox permette una gestione completamente decentralizzata, è infatti possibile agire sui vari host del cluster nello stesso modo a prescindere da quello su cui si è collegati.
Per chi conosce altre piattaforme IAAS, come vSphere, la creazione di macchine virtuali è strutturata in modo molto simile, è possibile assegnare risorse (Disco, RAM, schede di rete etc.) e agganciare una ISO del sistema operativo da installare. È possibile interfacciarsi con le VM create utilizzando la console HTML5 noVNC (o SPICE in alternativa) inclusa, sia integrata nell’interfaccia Web che eseguibile in una finestra autonoma.
Per quanto riguarda i Container la procedura di creazione differisce fondamentalmente nel passaggio in cui si assegna il sistema operativo da utilizzare. Data la natura dei Container stessi, la parte di configurazione di rete, DNS e risorse hardware è paragonabile a quella delle VM classiche, ma al posto del sistema operativo avviabile è necessario fornire a Proxmox un apposito Template. I template sono immagini di sistemi operativi pre-configurati che è possibile scaricare direttamente dall’interfaccia di gestione principale e sono già pronti per essere implementati. La maggior parte della documentazione relativa a questo argomento fa ancora riferimento ai template disponibili per OpenVZ (per cui era disponibile un apposito repository). Con l’introduzione di LXC il download viene fatto direttamente dalla pagina di gestione storage degli host, tramite il tasto Template, che permette di accedere a quelli attualmente disponibili per LXC (Ubuntu 14.04, Arch-base, CentOS 6, Debian 7.0 etc).
Per l’utilizzo dell’HA è necessario indicare a Proxmox quali macchine virtuali devono essere incluse, nella pagina Web di gestione è prevista una voce di menu dedicata, ma naturalmente è possibile farlo con un apposito comando anche via CLI (Command Line Interface). Interessante indicare che Proxmox offre un HA Simulator, una funzionalità che permette di realizzare e testare l’high availability in sicurezza all’interno di un ambiente simulato.
Le nostre prove
Il laboratorio di prova è stato realizzato configurando in cluster tre server HP di generazioni diverse (Proliant DL360 e DL380), tutti collegati alla stessa sottorete e dotati di storage locale su cui è stato installato Proxmox (l’installazione su SD o chiavette USB è supportata solo a livello di test, non in ambienti di produzione).
Due dei nodi sono stati configurati utilizzando la procedura standard senza andare ad agire sulle impostazioni avanzate. Sul terzo server abbiamo invece provato ad utilizzare lo storage locale, configurandolo senza problemi con file system ZFS durante l’installazione. Al di là della differenza di gestione a livello dischi tra il RAID hardware via controller e via software affidato a ZFS, l’utilizzo dello spazio di memorizzazione disponibile sul nodo è risultato del tutto trasparente. L’utilizzo delle macchine virtuali risulta paragonabile a quello offerto dalle soluzioni più blasonate: la console noVNC permette infatti di interagire in modo relativamente comodo anche con sistemi desktop. Assolutamente trasparente rispetto all’hypervisor utilizzato è invece l’accesso alle VM tramite SSH o interfaccia Web. Abbiamo sperimentato senza problema alcuno anche la clonazione e la creazione di template. Anche la successiva migrazione di macchine virtuali e dischi da un host all’altro non ci ha creato particolari problemi, agendo dall’interfaccia Web la procedura è piuttosto facile da portare a termine in quanto è sufficiente indicare quale sia l’host di destinazione (nel caso dei dischi si può anche indicare se tenere o rimuovere il disco originale).
Leggermente più articolato è la gestione dei Container: il passaggio da OpenVZ a LXC ha reso prima di tutto necessaria la possibilità di convertire quelli creati precedentemente (per cui è disponibile una apposita guida sulla Wiki), inoltre la possibilità di migrazione (offline) è stata introdotta solo a partire dalla release 4.0 beta2. Nonostante le best practices di Proxmox prevedano l’utilizzo di una porta di rete (e relativo networking virtuale) dedicata alla migrazione di vm e Container, le nostre prove si sono svolte utilizzando una sola porta fisica dell’host su cui era mappata la configurazione virtuale.
Importante segnalare un problema che abbiamo riscontrato nel testing dell’alta affidabilità, pur utilizzando macchine HP di fascia Enterprise (su cui abbiamo testato diverse versioni di ESXi fino anche all’ultima 6.0 senza alcun problema di compatibilità). Un bug di Linux nel collegamento tra il sistema e la iLO (sistema di gestione fuori banda dei server HP), necessaria per verificare lo stato attuale dell’host fisico e rilevare eventuali necessità di migrazione, porta al crash del nodi nel cluster su cui viene attivata la funzione di HA per una qualsiasi delle macchine virtuali (nello specifico un Kernel Panic generato dal modulo hpwdt). Per risolvere questo inconveniente è sufficiente disabilitare il servizio watchdog.
Perché scegliere Proxmox
Proxmox è una soluzione gratuita e molto completa per la gestione di infrastrutture virtuali in ambienti di piccole e medie dimensioni, ma prima di lanciarsi su questo progetto è bene considerare alcune controindicazioni. Il difetto principale è l’assenza di un ecosistema vasto e completo di software, servizi, documentazione e supporto associati alla piattaforma, come invece avviene con i concorrenti Microsoft e VMware, così come l’alto livello di affidabilità necessario in ambienti di produzione, magari di grosse dimensioni. Il baco rilevato durante la configurazione dell’alta affidabilità è stato un esempio che ci ha fatto riflettere sulle possibili conseguenze nell’adozione di questa soluzione in ambienti critici. Considerata la recente, e molto forte, tendenza del mercato IT verso l’ecosistema dei Container, Proxmox può essere un ottimo punto di partenza per avvicinarsi all’argomento. È infatti molto semplice e intuitivo iniziare a lavorare con questa diversa metodologia di virtualizzazione, anche senza una approfondita preparazione in merito e una infrastruttura dedicata.
Sicuramente Proxmox è un progetto ricco di potenzialità e con ampio margine di sviluppo, ma vi invitiamo a fare tutte le dovute valutazioni prima di adottarlo in progetti di lunga durata o che richiedano un livello di durabilità e affidabilità superiore.