Virtualizzazione oltre confini con KVM

kvm-vitrualization

PREMESSA

Una delle crescenti necessità dei grandi sistemi server Linux, cosi come dei piccoli esperimenti casalinghi, è fornire la possibilità ad amministratori, sistemisti ed utenti smanettoni di godere delle funzionalità di più sistemi operativi. Questo genere di richieste può essere soddisfatto dal supporto alla virtualizzazione, ovvero la possibilità di rendere virtuali le risorse hardware di cui un sistema operativo ha bisogno, per poi installare l’intera piattaforma “virtualmente” su di esse. Per capire quanto ciò sia conveniente, si pensi ai dischi che un sistema virtuale utilizza, che in realtà non sono altro che semplici file, e come essi si prestino meglio alle operazioni di backup, ed anche le periferiche virtuali sono facilmente standardizzabili e, quindi, uniformabili; ciò rende l’hardware (che può essere cosi’ molto vario…), “virtualmente compatibile” con qualsiasi sistema virtualizzato, azzerando i problemi di compatibilità, ed è a questo che serve KVM.

KVM = Kernel-based Virtual Machine
(KVM) è un’infrastruttura di virtualizzazione del kernel Linux. KVM attualmente supporta una completa virtualizzazione usando Intel VT o AMD-V. KVM è implementato come un modulo kernel caricabile, e dotato d’interfaccia grafica, un vero e proprio Virtual Manager Interface , per la gestione completa delle vostre VM. Il progetto nato gia nel 2007, grazie all’opera di Moshe Bar (gia fondatore di Xensource) che fonda l’azienda Qumranet per occuparsi dello sviluppo di questo nuovo modo di fare virtualizzazione. La Qumranet verra’ acuistata circa un anno piu’ tardi direttamente da RedHat che passera’ tutti i suoi progetti di virtualizzazione proprio su KVM.

I vantaggi di KVM
come dicevamo poco fa, per prima cosa KVM è integrato nel kernel di Linux, quindi dal punto di vista di un sysadmin, ci sono molti meno problemi, basta effettuare i normali update della tua distribuzione e sei a posto (per Xen invece sono una vagonata di Patch, non incluse nel kernel).

KVM non richiede alcun kernel modificato lato guest, quindi meno problemi e più libertà per gli utenti. Ed in caso di distribuzioni Linux come guest, anche qui fai i normali update della distro, senza preoccuparci di quale kernel installare (sembra una sciocchezza ma non è così.)

Ciascun guest KVM viene visto a livello di sistema come un normalissimo processo e puo’ essere gestito con i comandi più consueti (top, ps, kill, etc). Xen ad esempio ti obbliga ad usare una vagonata di strumenti e per sapere quanto sta occupando un domU sei costretto ad installare i tools lato client.

KVM è più flessibile in ambienti eterogenei, ad esempio puoi migrare da un nodo 32 bit verso un 64 e viceversa (ovviamente il guest può essere solo a 32 in questo caso, un 64 su un 32 non può andare mentre il 32 può andare sul 64). Puoi migrare da AMD a Intel e viceversa. Xen ti obbliga ad avere un cluster di nodi tutti uguali, o per meglio dire *identici*.

Verificare il supporto alla virtualizzazione

KVM sfrutta il supporto hardware alla virtualizzazione che il processore installato nel PC deve, necessariamente, poter implementare. Molte delle moderne CPU soddisfano questo requisito, considerando che sia AMD che Intel (che insieme raggiungono circa il 98% del mercato dei processori) includono da tempo le tecnologie AMD-V ed Intel VT-x rispettivamente, in grado proprio di supportare la virtualizzazione. Ciò è fondamentale, poiché senza tale supporto hardware, KVM non può funzionare.

Quindi, prima d’installare KVM dobbiamo verificare che l’hardware supporti la virtualizzazione. Per farlo, possiamo digitare, sul terminale, il comando seguente:

Per farlo, possiamo digitare, sul terminale, il comando seguente:

egrep -c ‘(svm|vmx)’ /proc/cpuinfo

Se l’output è diverso da 0, siamo certi che la nostra CPU è compatibile con la virtualizzazione, e possiamo passare al processo di installazione vera e propria. Altrimenti, ahimé, non sarà possibile sfruttare questo potentissimo strumento.

Installare KVM

A questo punto possiamo finalmente installare KVM. La procedura è abbastanza semplice, soprattutto se si utilizzano le maggiori distribuzioni server :

# apt-get install qemu-kvm libvirt-bin bridge-utils virt-manager

Se, invece, non è così, e possiamo avvalerci di yum, utilizzeremo i comandi seguenti:

# yum groupinstall "Virtualisation Tools" "Virtualization Platform"
# yum install python-virtinst

oppure, in alternativa:

# yum install kvm qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools

Terminata l’installazione, c’è ancora un dettaglio da tenere in considerazione. Di norma, le virtual machine di KVM possono essere gestite ed utilizzate soltanto dall’utente root, o da tutti gli utenti appartenenti al gruppo libvirtd. Per questo motivo, se vogliamo utilizzare KVM con il nostro account (diciamo, ad esempio, con l’account pippo), dovremo ultimare l’installazione con il comando seguente:

# adduser pippo libvirtd

Fatto ciò, possiamo verificare che KVM sia stato correttamente installato, riavviando il sistema e verificando che il comando seguente:

$ virsh -c qemu:///system list
@lorenzo:~# virsh -c qemu:///system list
Id    Nome                           Stato
—————————————————-

Se ciò non dovesse accadere, potrebbe non essere stato avviato libvirtd, il demone che gestisce il sistema di virtualizzazione. Possiamo avviarlo con i seguenti comandi:

# chkconfig libvirtd on
# service libvirtd start

A questo punto non resta che configurare in maniera esauriente KVM, ed iniziare a creare ed avviare le macchine virtuali. Se abbiamo a disposizione un ambiente grafico, possiamo affidarci a virt-manager.

virt-manager

Una volta avviato, possiamo subito creare una nuova virtual machine, cliccando sul primo pulsante da sinistra, sulla barra principale della finestra di virt-manager. Qui possiamo:

  • inserire il nome della macchina virtuale
  • scegliere come installare il sistema operativo guest (se utilizzando un’immagine ISO locale, o se effettuare un’installazione via network)
  • selezionare il tipo di sistema operativo che stiamo installando
  • impostare la quantità di memoria RAM da assegnare al sistema, nonché il numero di CPU
  • definire alcune impostazioni avanzate, come l’architettura del sistema, nonché le preferenze di rete

Una nota importante riguarda proprio queste ultime impostazioni relative alla rete. Per default, la virtual machine accede ad internet non come macchina a sé stante, ma tramite un NAT bridge che la rende, dal punto di vista della rete, un tutt’uno col sistema host. E’ possibile modificare questa impostazione tramite le Opzioni avanzate subito prima della fine del processo di creazione della macchina virtuale. Ciò può risultare molto utile se si vuole utilizzare la macchina virtuale come server accessibile all’esterno (una situazione abbastanza tipica). Non resta che giocarci il piu’ possibile ed impratichirsi con tutte le opzioni a disposizione. Buon divertimento.