Virtualizzazione

La virtualizzazione e' una tecnica che ci permette di eseguire delle macchine virtuali (guest) all'interno di un sistema (host o hypervisor).

Sotto linux abbiamo a disposizione diversi tipi di virtualizzazione, a seconda delle necessita' possiamo scegliere tra funzionalita' e prestazioni massimizzate.

L'emulazione ci permette di eseguire macchine virtuali con architetture differenti dal processore montato sull'host. Possiamo per esempio testare un'applicazione scritta per android eseguendola su piu' macchine virtuali create con qemu in modo da testarla su versioni differenti di android e su devices di prestazioni differenti.

La full virtualization invece ci permette di migliorare le prestazioni a discapito della liberta' di architettura. KVM e' un modulo del kernel che ci permette di sfruttare le estensioni di alcuni processori x86_64 (intel/AMD 64 bit) create apposta per la virtualizzazione. La macchina virtuale e' in grado di eseguire tutto il software che sarebbe in grado di eseguire la macchina fisica. oVirt e Red Hat Enterprise Virtualization sono basati proprio su KVM.

La Paravirtualizzazione invece richiede di sacrificare anche l'uso del kernel standard a vantaggio delle prestazioni. Infatti il kernel della macchina guest viene modificato per “comunicare” con il kernel della macchina host. Nel caso di XEN non tutte le distribuzioni rendono disponibile il kernel XEN e non e' possibile eseguire in modalita' paravirtualizzata sistemi Windows.

I driver VirtIO sono una via di mezzo tra la full virtualization e la paravirtualizzazione. Si utilizzano con kvm e sono driver che migliorano sensibilmente le prestazioni di disco e networking della macchina guest non modificata (linux, windows, bsd). I driver vanno installati come comuni driver.

LXC, linux container, e' una tecnica poco ortodossa di virtualizzazione, ma sicuramennte dalle prestazioni migliori. Da la possibilita' di avviare piu' server che utilizzano lo stesso kernel. Negli altri casi era possibile emulare l'hardware, in questo caso e' invece il fisico condiviso tra le macchine.

libvirtd

Libvirtd e' un software che semplifica molto la vita di chi utilizza la virtualizzazione e gestisce poche macchine virtuali. Si interfaccia con vari sistemi di virtualizzazione (kvm, xen ed altri) mettendo a disposizione delle API comuni per la gestione delle VM. Per gestire le macchine gli utenti possono usare virsh, virt-manager oppure scrivere propri tool con python o altri linguaggi di programmazione.

Per creare una macchina virtuale con virt-manager:

- Avviamo virt-manger clicchiamo su “New”

- Scegliamo un nome per la macchina virtuale e click su “Forward”

- Scegliamo il supporto da cui andremo a prendere i files di installazione della macchina virtuale; ho scaricato una iso di una distribuzione, percio' scegliero' “Use ISO image” e faccio click su “Forward”

- Diamo un quantitavo di ram adeguato alla macchina virtuale, per esempio, 1000mb, scegliamo quante cpu assegnarle e click su “Forward”

- Decidiamo di creare un disco rigido virtuale di 8gb e facciamo click su “Forward”

- Ci viene dato un resoconto di come abbiamo configurato la macchina virtuale, click su “Finish” e iniziara' la fase di installazione della distribuzione

oVirt / RHEV

oVirt e' un sistema di gestione di macchine virtuali OpenSource. Esiste anche una versione supportata da Red Hat chiamata RHEV (Red Hat Enterprise Virtualization).

Questi strumenti sono caratterizzati da piu' macchine utilizzate come hypervisor KVM, collegate tramite rete ad uno storage condiviso (iSCSI, o meglio GlusterFS o Fiber Channel) e controllate da un manager, che puo' essere una macchina fisica o una macchina virtuale. Il manager contiene tutte le info sulle macchine virtuali grazie ad un Data Base PostgreSQL, ed offre tre iterfacce per manipolare le macchine: un pannello (html) amministratore, un pannello (html) utente e delle API xml.

Possiamo virtualizzare Server GNU/Linux o qualsiasi altro sistema operativo, oppure implementare un sistema di VDI (Virtual Desktop Infrastructure) particolarmente performante grazie al protocollo di desktop premoto “spice” in grado di esportare 4 schermi FullHD, audio e usb.