Introduzione alla virtualizzazione
Marco Caberletti
Formazione MCloud WP1 – Ancona 18-19 Marzo 2013
Indice
• Concetti Generali
• Definizioni
• Tipologie di virtualizzazione
• Vantaggi e svantaggi
• Linux KVM e Libvirt
Concetti Generali (1)
• Informalmente, con virtualizzazione si intende la creazione di una versione virtuale di qualcosa
Piattaforma hardware, sistema operativo, dispositivo di storage o risorsa di rete.
• Alla base di tutte le tecnologie di virtualizzazione c'è l'astrazione:
Creare un livello di intermedio tra l'hardware/sistema operativo e le applicazioni che semplifica e nasconde i dettagli sottostanti
Concetti Generali (2)
• Consente di eseguire un programma in un ambiente sempre identico, detto macchina virtuale, senza
sapere su che hardware/sistema operativo sia effettivamente in esecuzione.
Es. Java JVM
• Per le applicazioni,
l'ambiente virtuale è del tutto identico ad un
ambiente fisico.
Tipi di virtualizzazione
• Quando i sistemi virtuali usano un instruction set differente da quello del sistema fisico, si parla di emulazione.
Esempio: emulare ARM o PowerPC su piattaforma Intel
• Quando invece i sistemi virtuali usano lo stesso set di istruzioni dell'host, si parla propriamente di
virtualizzazione.
Si differenzia fra virtualizzazione completa e para- virtualizzazione.
Virtualizzazione completa
• I sistemi operativi delle macchine virtuali (VM), non hanno alcuna consapevolezza di essere eseguite
“sopra” ad un hypervisor.
• I sistemi ospite quindi girano senza alcuna modifica.
• Il virtualizzatore
(hypervisor) è incaricato di un grosso lavoro di
traduzione delle chiamate privilegiate (system call) delle VM per renderle eseguibili.
Para-virtualizzazione
• L'hypervisor presenta alle VM un'interfaccia diversa da quella dell'hardware sottostante, detta hypervisor call o hypercall.
• Sono necessarie modifiche ai sistemi operativi ospiti.
• La maggior parte delle
richieste arriva in maniera diretta all'hardware
Hypervisor
• Lo strato software che fornisce l'astrazione viene chiamato Virtual Machine Monitor (VMM) o
hypervisor.
• Il suo compito principale è quello di gestire le istruzioni protette delle macchine virtuali.
• Gli hypervisor sono classificati in due modi:
Tipo 1 o bare metal
Tipo 2 o hosted
Hypervisor bare metal
• Sono hypervisor che vengono direttamente eseguiti sull'hardware
• Le funzionalità di virtualizzazione si fondono in un SO
“leggero” che include anche tutti i driver per le
periferiche ed il sistema di gestione/realizzazione delle macchine virtuali.
• Esempi: XEN, VMware vSphere, Parallels Server 4 Bare Metal e Hyper-V.
Hypervisor hosted
• Sono hypervisor che vengono eseguiti all'interno di un sistema operativo
• Vengono installati come applicazioni in user-space ed utilizzano le system call per eseguire le istruzioni
privilegiate.
• Esempio: Oracle VirtualBox.
Linux KVM (1)
• KVM (Kernel-based Virtual Machine) non appartiene a nessuna delle precedenti classificazioni.
• Il sistema di virtualizzazione è realizzato come un modulo del kernel Linux.
• Permette di eseguire processi, oltre che nelle modalità kernel e user, in una modalità chiamata guest mode.
• Quest'ultima trasforma il kernel in un vero e proprio hypervisor, dove le macchine virtuali girano come semplici processi.
Linux KVM (2)
• Un processo in modalità guest, ha la possibilità di
eseguire codice sia in user che in kernel mode, come permesso dalle estensioni Intel VT e AMD-V dei nuovi processori.
--> Serve supporto hardware per usare KVM
--> Tutti i processori degli ultimi anni lo supportano
• La gestione della memoria è affidata alle tecnologie
EPT e NPT di Intel e AMD, che permettono la gestione diretta delle page table e dei fault da parte delle
macchine virtuali.
Linux KVM (3)
• Componenti principali di KVM:
Modulo KVM e il device /dev/kvm
QEMU
I processi che rappresentano le VM
• /dev/kvm è un dispositivo a caratteri che fa da interfaccia con il sistema di virtualizzazione.
• QEMU realizza le interfacce di I/O quali dischi, schede di rete e CD-ROM. E' in grado di realizzare via
software tutte le componenti di un PC.
Linux KVM (4)
• Schema della virtualizzazione con KVM:
Vantaggi (1)
• Server consolidation
Molte VM su una sola macchina fisica
Riduce i costi di acquisizione dell'hardware e semplifica operazioni come monitoring e amministrazione
• Sandboxing
Isolare applicazioni
Sviluppo, test e debug di codice
Creazione ambiente per applicazioni legacy
• Creazione delle VM on demand
Vantaggi (2)
• Disaccoppia hardware dal software
Suspend/Resume delle VM
Migrazione di VM fra server fisici
• Test di nuove versioni di SO e applicazioni
• Emulazione di hardware non presente sulla macchina fisica
• Esecuzione di applicazioni non compatibili col sistema operativo della macchina fisica
Svantaggi
• Sicurezza
Si mettono sullo stesso hardware diversi SO, gestiti da un software: è noto che non esiste software privo di bug
• Performance
Overhead per la macchina fisica
Minori prestazioni per la VM, soprattutto nell'I/O
Performance (1)
• Performance CPU:
Performance (2)
• Performance della banda di rete:
Performance (3)
• Performance dell'I/O su disco:
Libvirt (1)
• Hypervisor diversi adottano strumenti di gestione diversi.
• Libvirt è un set di librerie sviluppato con lo scopo di creare una soluzione unica e trasparente per gestire sistemi di virtualizzazione ad alto livello.
• Sono compatibili con i principali sistemi di virtualizzazione:
Oltre a XEN, KVM, e VirtualBox, supporta anche VMware, LXC, OpenVZ e UML
Libvirt (2)
• Offrono binding per numerosi linguaggi di
programmazione: questo consente di scrivere script o applicazioni in maniera del tutto indipendente
dall'hypervisor utilizzato.
• Esempi:
Virsh: una shell che fa uso di file XML per descrivere dominii, reti e storage pool
Virt-manager: un'interfaccia grafica che si appoggia su libvirt, usa sempre file XML
Libvirt (3)
• Esempio XML
• Descrive la VM e tutte le sue periferiche Core
Hard Disk
Libvirt (4)
• Alcune operazioni:
# virsh define centos.xml Definisce una VM (senza avviarla)
# virsh start centos Avvia la VM
# virsh list Elenca le VM attive
# virsh reboot centos Riavvia la VM
# virsh shutdown centos Spegne la VM
# virsh destroy centos Elimina la VM
• Si noti che tutti i comandi sono di alto livello, indipendenti dall'hypervisor
Libvirt (5)
• Libvirt utilizza una terminologia differente per identificare hypervisor e VM:
hypervisor --> node
VM --> domain
• Libvirt consente il controllo sia di VM locali, sia di VM remote
Usa uno speciale tipo di demone, chiamato libvirtd, in esecuzione sui nodi remoti
Libvirt (6)
• Schema funzionamento libvirt:
Grazie per l'attenzione Domande?