Elaborato Crispano Naomi N46000048

Transcript

Elaborato Crispano Naomi N46000048
Valutazione della tecnologia di virtualizzazione OpenVz
Facoltà di Ingegneria
Corso di Studi in Ingegneria Informatica
Elaborato finale in Reti di Calcolatori
Valutazione della tecnologia di
virtualizzazione OpenVZ
Anno Accademico 2010/11
Candidato:
Naomi Crispano
matr. N46000048
I
Valutazione della tecnologia di virtualizzazione OpenVz
Ai miei genitori.
Il loro appoggio mi ha portato dove sono.
II
Valutazione della tecnologia di virtualizzazione OpenVz
Indice
Introduzione
4
Capitolo 1. La virtualizzazione: definizione e tipologie
7
1.1
1.2
1.3
1.4
1.5
1.5.1
Realizzazione del VMM
Virtualizzazione completa
Paravirtualizzazione
VMM di sistema e VMM ospitati
Virtualizzazione a livello di sistema operativo
Il concetto di Container
11
13
18
22
24
26
Capitolo 2. OpenVZ
2.1
2.2
2.2.1
2.2.2
2.2.3
28
Concetto di Virtual Environment
Kernel di OpenVZ
Virtualizzazione e isolamento
Gestore delle risorse
Checkpointing e migrazione live
29
29
30
31
32
Capitolo 3. Funzionalità di OpenVZ
3.1
3.1.1
3.1.2
3.1.3
3.2
3.2.1
3.2.2
3.2.3
3.3
3.3.1
3.3.2
33
Caratteristiche distintive di OpenVZ
Applicazioni
Networking
Template
Come funziona OpenVZ
I modelli
Le licenze
Considerazioni sull’Hardware
Utilizzo concreto della tecnologia OenVZ
Installazione di OpenVZ
Creazione di un Container
34
36
37
38
39
40
42
45
47
47
52
Bibliografia
55
Ringraziamenti
56
3
Valutazione della tecnologia di virtualizzazione OpenVz
Introduzione
Prima di affrontare la tematica in oggetto di questa Tesi, intendo rispondere
innanzitutto a delle domande in modo da chiarire lo scenario in cui ci si sta
muovendo.
Cos'è una macchina virtuale?
In informatica il termine macchina virtuale (VM) indica un software che crea
un ambiente virtuale che emula il comportamento di una macchina fisica.
In origine, il termine virtual machine veniva usato per indicare la creazione di
una molteplicità di ambienti di esecuzione identici in un unico computer,
ciascuno con il proprio sistema operativo.
Figura 1 - Esempio di molteplicità di ambienti su un solo pc
4
Valutazione della tecnologia di virtualizzazione OpenVz
In qualsiasi momento possiamo aprire una finestra e al suo interno viene avviato
quello che appare come un computer totalmente diverso e autonomo con un
sistema operativo diverso e programmi differenti. Lo scopo di questa tecnica era
quello di dividere tra più utenti l'uso di un singolo computer dando ad ognuno
l'impressione di esserne gli unici utilizzatori, oltre ad avere vantaggi che le
macchine reali non hanno (poniamo il caso di dover riavviare la macchina ad
esempio, con macchine virtuali questa operazione è più veloce anche perché c'è
la possibilità di scegliere quali componenti attivare e quali no).
Perché utilizzarle?
Ci sono dei casi in cui emulare altri sistemi operativi dal proprio sistema
operativo principale può portare notevoli vantaggi:
• per esempio quello della sicurezza. Quando si
naviga un eventuale virus verrebbe preso dal
sistema operativo virtuale e non da quello reale;
• per provare nuovi programmi potenzialmente
dannosi,
• per conoscere altri sistemi operativi diversi dal
Figura 2 - Sicurezza nel Web
nostro.
Questa soluzione che appare ideale aveva però due svantaggi:
era costosa e l'emulazione del secondo sistema operativo virtuale, rallentava
tutto. Questi svantaggi sono stati ormai superati per la diffusione dei nuovi
computer cui le risorse non mancano.
5
Valutazione della tecnologia di virtualizzazione OpenVz
Che differenza c'è tra virtualizzazione e avere una partizione con un
nuovo sistema operativo? Dove si hanno maggiori vantaggi?
La virtualizzazione consente di avere uno o più sistemi operativi funzionanti
contemporaneamente all'interno del sistema operativo principale, a costo di una
lentezza (leggermente) maggiore, minori prestazioni grafiche, maggior utilizzo
di memoria.
Una partizione con un nuovo sistema operativo, è invece il modo di avere un
sistema operativo completamente nuovo e separato dall'attuale, che non risente
di alcuna limitazione, ma che non si può utilizzare in contemporanea con altri
sistemi operativi.
6
Valutazione della tecnologia di virtualizzazione OpenVz
Capitolo 1
La virtualizzazione: definizione e tipologie
Il concetto di virtualizzazione è da tempo ampiamente utilizzato in vari settori della
computer science, dalla progettazione di sistemi software complessi (esempio,
sistemi operativi), ai linguaggi di programmazione, alle architetture dei
processori e alla trasmissione dei dati.
Da un punto di vista generale le tecnologie di virtualizzazione puntano a
disaccoppiare il funzionamento logico delle risorse hardware e software di un
sistema di elaborazione dalla loro realizzazione fisica, con l’obiettivo di
ottenere maggiore efficienza, affidabilità e sicurezza. Il disaccoppiamento è
ottenuto introducendo tra le due viste della risorsa, la logica e la fisica, un
livello di indirezione la cui realizzazione dipende dal tipo di virtualizzazione
che si intende adottare.
Un primo esempio di virtualizzazione coincide con il concetto di astrazione.
In questo caso l’obiettivo è semplificare l’uso di una risorsa nascondendo
alcuni aspetti di dettaglio relativi alla sua realizzazione. Si parla in questo caso
di risorsa virtuale (oggetto astratto) e il livello di indirezione introdotto è
costituito dalle operazioni (interfaccia) con le quali è possibile accedere alle
risorse. Questo concetto di virtualizzazione viene normalmente applicato nella
7
Valutazione della tecnologia di virtualizzazione OpenVz
progettazione di sistemi di elaborazione complessi, che vengono organizzati
come un insieme di livelli di astrazione strutturati gerarchicamente. Al livello
più esterno le applicazioni dispongono di una macchina virtuale il cui set di
istruzioni è composto dalle istruzioni non privilegiate della macchina fisica e
da un insieme di nuove istruzioni rappresentate dalle funzioni fornite dal S.O.
(system call), mediante le quali è possibile accedere alle risorse del sistema in
modo semplice e sicuro.
Il sistema di elaborazione è visto come un insieme di macchine virtuali, una per
ogni processo attivo, che utilizzano tutte lo stesso livello di disaccoppiamento
dalla macchina fisica rappresentato dall’interfaccia fornita dal S.O. Esse
dipendono quindi dal S.O. di cui utilizzano le system call e dall’hardware sul
quale sono eseguite.
Un caso diverso di macchina virtuale si presenta quando il livello di
disaccoppiamento dalla macchina fisica è rappresentato dal codice generato da
un compilatore di un linguaggio del tipo HLL. Tale codice, chiamato codice
astratto, risulta completamente indipendente dal set di istruzioni della
macchina fisica e dalle system call del S.O. che in essa opera. Si parla in questo
caso di macchina virtuale a livello di linguaggio.
L’obiettivo di questa VM è permettere la portabilità dello stesso codice astratto
su molteplici piattaforme (hardware e S.O.) diverse. Ciascuna di queste
realizza una VM capace di caricare ed eseguire il codice astratto e un insieme
di librerie specifiche. Nella sua forma più semplice, la VM contiene un
interprete e, nei casi più sofisticati, un compilatore, che partendo dal codice
astratto genera codice per la macchina fisica sulla quale la VM è in esecuzione.
Un esempio ben noto di tale paradigma è la Java Virtual Machine (JVM).
Lo sforzo di implementare per le architetture più comuni una VM capace di
caricare ed eseguire il codice macchina astratto è ben ripagato dalla piena
portabilità del software attraverso le piattaforme.
8
Valutazione della tecnologia di virtualizzazione OpenVz
Un diverso utilizzo del concetto di virtualizzazione, prevede l’introduzione di
un livello di indirezione, che si chiama Virtual Machine Monitor (VMM) o
hypervisor il cui compito è quello di trasformare la singola interfaccia di
macchina fisica in N interfacce virtuali. Ciascuna di queste interfacce
(macchine virtuali) è una replica della macchina fisica dotata quindi di tutte le
istruzioni del processore (sia privilegiate che non privilegiate) e delle risorse
del sistema (memoria, dispositivi di I/O). Su ogni macchina virtuale può essere
eseguito un sistema operativo. Compito del VMM è quindi consentire la
condivisione da parte di più macchine virtuali di una singola piattaforma
hardware. Esso si pone come mediatore unico nelle interazioni tra le macchine
virtuali e l’hardware sottostante, garantendo un forte isolamento tra loro e la
stabilità complessiva del sistema.
Un primo esempio di tale tipo di architettura è quello introdotto da IBM negli
anni ‘60 col sistema di elaborazione denominato originariamente CP/CMS e
successivamente VM/370. Il CP (Control Program) svolge le funzioni del
VMM, viene eseguito sulla macchina fisica ed ha il solo compito di creare più
interfacce della stessa, senza fornire alcun servizio all’utente. Ciascuna di
queste interfacce (macchine virtuali) è una replica del semplice hardware.
Il CMS (Conversational Monitor System) è il sistema operativo, interattivo e
monoutente, che gira su ogni macchina virtuale. L’idea architetturale delle
macchine virtuali, propria del nuovo sistema, consentiva ad ogni utente, tramite
il CP, di avere la propria macchina virtuale con la propria partizione sul disco e
di supportare lo sviluppo dei suoi programmi in tale macchina virtuale tramite
il CMS. Tutta l’architettura risultava più semplice da gestire rispetto ad un
tradizionale sistema time-sharing in quanto risultavano separate, e quindi
sviluppabili indipendentemente, le due parti di suddivisione dell’uso delle
risorse fisiche tra gli utenti e di mascheramento per l’utente delle peculiarità
dell’hardware. Inoltre, poiché ogni macchina virtuale era funzionalmente
9
Valutazione della tecnologia di virtualizzazione OpenVz
identica all’hardware della macchina fisica, era possibile mettere in esecuzione
su di esse qualunque sistema operativo compatibile con l’hardware stesso e
diverse macchine virtuali potevano eseguire differenti sistemi operativi.
Un altro aspetto di interesse era l’elevata affidabilità del sistema dal momento
che la struttura del VMM consentiva l’esecuzione separata delle macchine
virtuali garantendo quindi che un errore in un sistema operativo non avesse
influenza sull’esecuzione degli altri S.O.
La diffusione in quegli anni di questo tipo di architettura portò anche alla
progettazione di architetture hardware pensate per consentire in modo
efficiente di soddisfare queste esigenze di virtualizzazione.
A partire dagli anni ‘70 si sono diffusi i moderni sistemi operativi multitasking
e contemporaneamente si è assistito ad un crollo nel costo dell’hardware. I
mainframe hanno progressivamente lasciato il posto ai minicomputer e ad un
paradigma del tipo “un server per ogni applicazione”, e così lo sviluppo dei
VMM si è interrotto al punto che le architetture non hanno più fornito
l’hardware necessario per implementarli in modo efficiente.
Si può ricordare che un caso particolare di virtualizzazione si presenta quando
si richiede l’esecuzione di programmi compilati per un certo insieme di
istruzioni su un sistema di elaborazione dotato di un diverso insieme di
istruzioni. Si parla in questo caso di emulazione. Il modo più diretto per
emulare è interpretare: un programma interprete legge, decodifica ed esegue
ogni singola istruzione utilizzando il nuovo set di istruzioni. È un metodo
molto generale e potente, ma produce un sovraccarico mediamente molto
elevato poiché possono essere necessarie decine di istruzioni dell’host per
interpretare una singola istruzione sorgente.
Una famosa implementazione, molto cara agli appassionati di giochi, è
MAME, una VM per host IA-32 in grado di caricare ed eseguire il codice
binario originale delle ROM dei videogiochi da bar degli anni ’80, emulando
10
Valutazione della tecnologia di virtualizzazione OpenVz
l’hardware tipico di quelle architetture. Facendo leva
sull’enorme potenza di calcolo degli attuali PC rispetto ai
primordiali processori per videogiochi dell’epoca, la VM
può tranquillamente operare secondo il paradigma
dell’interpretazione
senza
compromettere
in
modo
significativo l’esperienza di gioco, almeno per i
videogiochi più vecchi che non facevano ancora un uso
Figura 3 - Marchio MAME
massiccio della grafica.
1.1 Realizzazione del VMM
Come si è visto nel paragrafo precedente, compito del VMM è consentire la
condivisione, da parte di più macchine virtuali, di una singola piattaforma
hardware. Il VMM espone ad ogni macchina virtuale un insieme di interfacce
hardware funzionalmente equivalenti a quelle di una macchina fisica e si pone
come mediatore unico nelle interazioni tra le macchine virtuali e l’hardware
sottostante, garantendo un forte isolamento tra esse e la stabilità complessiva
del sistema
Al di là dei modi diversi in cui si può progettare un VMM, esso deve
comunque soddisfare poche condizioni essenziali: fornire un ambiente per i
programmi sostanzialmente identico a quello della macchina reale; garantire
una
elevata
efficienza
nella
esecuzione
dei
programmi;
possedere
caratteristiche di elevata semplicità.
Il primo obiettivo richiede che qualsiasi programma eseguito all’interno di una
macchina virtuale generi lo stesso risultato che si otterrebbe se il programma
fosse eseguito direttamente sulla macchina reale. Le uniche differenze possono
11
Valutazione della tecnologia di virtualizzazione OpenVz
essere legate alle dipendenze temporali imposte dalla presenza delle altre
macchine virtuali concorrenti e dalla disponibilità di risorse di sistema.
Il secondo obiettivo, l’efficienza, richiede che l’overhead imposto dalla
virtualizzazione sia comunque tale da offrire all’utente l’illusione di operare
sulla macchina reale. Per ottenerlo occorre che un sottoinsieme statisticamente
dominante delle istruzioni del processore virtuale siano eseguite direttamente,
senza la mediazione del VMM, sul processore reale. Questo approccio, noto
come esecuzione diretta, è centrale per potere realizzare efficacemente la
virtualizzazione. In pratica esso prevede che le istruzioni non privilegiate, che
sono la frazione più consistente di un instruction set, quelle da cui non può
derivare l’eventuale blocco del sistema, siano eseguite direttamente in
hardware senza coinvolgere in alcun modo il VMM. Quest’ultimo interviene
invece solo nell’esecuzione delle istruzioni privilegiate, minimizzando così il
sovraccarico.
Infine, il requisito della semplicità nella realizzazione è essenziale per garantire
la stabilità e la sicurezza dell’intero sistema, minimizzando l’occorrenza di
malfunzionamenti che comprometterebbero l’esistenza delle macchine virtuali.
In altre parole è necessario che il VMM, nonostante la disponibilità delle
istruzioni privilegiate per le macchine virtuali, resti sempre nel pieno controllo
delle risorse hardware e che non sia mai possibile ai programmi in esecuzione
negli ambienti virtuali accedere all’hardware in modo privilegiato scavalcando
il controllo del VMM.
Vi sono diversi modi per realizzare un VMM con queste proprietà; le
differenze fondamentali tra le implementazioni più diffuse si possono
ricondurre a due fattori discriminanti:
i principi che governano il dialogo tra la macchina virtuale ed il VMM, ed il
livello dove si intende collocare il VMM rispetto all’architettura del sistema di
elaborazione.
12
Valutazione della tecnologia di virtualizzazione OpenVz
Rispetto alla prima scelta, che è la più importante in termini di metodo, si
distingue tra i paradigmi di virtualizzazione completa e paravirtualizzazione.
Rispetto alla seconda scelta, si distingue tra VMM posti direttamente sopra
l’hardware dell’elaboratore (VMM di sistema) che integrano un sistema
operativo “leggero” con le funzionalità di virtualizzazione e VMM che si
istallano invece come applicazioni dentro un sistema operativo preesistente
(VMM ospitati).
Normalmente viene indicato con il termine host la piattaforma di base sulla
quale si realizzano macchine virtuali, che comprende la macchina fisica,
l’eventuale sistema operativo e il VMM; si indica invece con il termine guest
tutto ciò (applicazioni e sistema operativo) che ha a che fare con la macchina
virtuale.
Quindi le tre principali tipologie di virtualizzazione sono:
• virtualizzazione completa;
• paravirtualizzazione;
• virtualizzazione a livello di sistema operativo.
1.2 Virtualizzazione completa
Il paradigma della virtualizzazione completa prevede che l’hardware virtuale
esposto dal VMM sia funzionalmente
identico a quello della sottostante
macchina fisica.
In questo modo è possibile installare
dentro le macchine virtuali sistemi
operativi standard, senza che abbiano
subito alcuna modifica specifica per
eseguire in ambiente virtuale.
Figura 4 - Esempio schermata durante l'utilizzo di
13
VMware
Valutazione della tecnologia di virtualizzazione OpenVz
Questo
approccio
semplifica
notevolmente
la
creazione
e
gestione
dell’ambiente guest, ma rende un po’ più complesso il disegno del VMM;
inoltre vedremo che per una efficace implementazione è richiesta la
collaborazione dell’architettura della CPU. Negli approfondimenti che seguono
supponiamo, per semplicità, che il VMM sia installato direttamente
sull’hardware del calcolatore.
Un’architettura CPU in generale opera secondo livelli (ring) di protezione: per
semplicità consideriamo due soli livelli, supervisore ed utente, anche se molte
architetture implementano livelli intermedi usati ad esempio per l'I/O.
Il livello supervisore è riservato al software che deve accedere alle risorse del
sistema con il massimo privilegio (sistema operativo, driver), e in tale stato si
possono eseguire tutte le istruzioni proprie dell’architettura, tra cui anche le
istruzioni privilegiate che danno pieno accesso alle risorse hardware e ai
registri del sistema. Il livello utente è riservato al software meno privilegiato
(applicazioni), e in tale stato non è possibile accedere alle istruzioni privilegiate
della CPU. Se dallo stato utente si invocano istruzioni privilegiate si attiva il
meccanismo di protezione della CPU che non esegue l’istruzione in questione
ma notifica allo stato supervisore, mediante una eccezione (trap), la richiesta
ricevuta e gli passa il controllo. Normalmente, alcune delle componenti di un
sistema operativo (il kernel ed i driver) si aspettano di essere eseguite nello
stato supervisore, poiché devono controllare l’hardware. In un contesto di
virtualizzazione tuttavia, è solamente il VMM ad occupare lo stato supervisore,
mentre tutti i software guest che vi girano sopra (applicazioni, ma anche
sistemi operativi) sono spinti più in alto, nel livello utente, con i privilegi di
semplici applicazioni. Vi sono dunque due ordini di problemi nella gestione di
un sistema operativo guest che non si intende modificare ai fini della
virtualizzazione: esso è chiamato ad operare in uno stato che non gli è proprio,
poichè le chiamate di accesso alle risorse gli sono inibite (problema di ring
14
Valutazione della tecnologia di virtualizzazione OpenVz
deprivileging), inoltre esso è schiacciato nello stato utente insieme alle
semplici applicazioni, con il problema di doversi proteggere da queste
(problema di ring compression). Il VMM deve dunque mascherare ai sistemi
operativi guest la natura dello stato in cui sono eseguiti, facendosi carico di
intercettare ogni richiesta di accesso privilegiato all’hardware ed emulandone il
comportamento.
Si tratta infatti di richieste che non possono essere eseguite direttamente, ma
non possono nemmeno essere ignorate pena il malfunzionamento o il blocco
del sistema guest, di cui si interromperebbe il normale flusso operazionale. Per
intercettare tali chiamate il VMM è aiutato in modo determinante dalle
funzionalità di protezione dell’architettura CPU: quando l’ambiente guest tenta
di eseguire un’istruzione privilegiata, la CPU notifica un’eccezione al VMM
(posto nello stato supervisore) e gli trasferisce il controllo.
Il VMM verifica la correttezza dell’operazione richiesta e provvede ad
emularne il comportamento atteso. Se per esempio, un guest tenta di eseguire
l’istruzione privilegiata che disabilita gli interrupt, il VMM riceve la notifica di
tale richiesta e ne emula il comportamento atteso, cioè sospende la consegna
degli interrupt solamente a quella macchina virtuale. Così facendo, la macchina
virtuale prosegue secondo il normale flusso operazionale che seguirebbe in un
ambiente reale ed il sistema rimane complessivamente stabile; se invece la
richiesta della macchina virtuale fosse eseguita sul processore, sarebbero
disabilitati tutti gli interrupt per tutti i sistemi e questo impedirebbe al VMM di
riguadagnare il controllo della CPU. Il meccanismo di notifica della CPU aiuta
a mantenere piuttosto semplice il disegno del VMM, che in modo trasparente è
chiamato ad intervenire solamente per mediare l’accesso alle risorse hardware,
di cui per altro mantiene sempre il controllo. La soluzione è anche efficiente in
quanto consente che tutte le istruzioni non privilegiate siano eseguite
15
Valutazione della tecnologia di virtualizzazione OpenVz
direttamente dall’hardware, senza alcuna supervisione da parte del VMM che
non sarebbe di alcuna utilità ed introdurrebbe solo latenza.
Un’architettura CPU si dice “naturalmente virtualizzabile” se supporta l’invio
di notifica allo stato supervisore per ogni istruzione privilegiata eseguita dallo
stato utente. Un’architettura di questo tipo favorisce un disegno semplice del
VMM e supporta nativamente la tecnica dell’esecuzione diretta, fondamentale
per garantire prestazioni.
È necessario osservare tuttavia che non tutte le architetture sono naturalmente
virtualizzabili.
Alcune istruzioni privilegiate di questa architettura se eseguite nello spazio
utente non provocano un’interruzione da parte del meccanismo di protezione
della CPU ma vengono semplicemente ignorate e non consentono quindi un
trasparente intervento del VMM.
Inoltre, vi sono istruzioni non privilegiate, dunque consentite liberamente
anche nello spazio utente, che permettono di accedere in lettura ad alcuni
registri di sistema le cui informazioni andrebbero però mascherate ad una
macchina virtuale e la cui gestione dovrebbe essere riservata solo al VMM
(problema di ring aliasing). Vi è per esempio un registro (code segment
register) che segnala il livello di privilegio corrente e la cui lettura da parte di
un sistema operativo guest, che come tale è eseguito nello spazio utente, che
non gli sarebbe proprio, segnalerebbe al medesimo un’anomalia di
collocazione.
Questa assenza di supporto da parte dell’hardware impone al VMM di
implementare stratagemmi di varia natura per garantire il funzionamento della
virtualizzazione completa; i problemi possono essere risolti, ma al prezzo di un
aumento di complessità ed una riduzione delle prestazioni. Una soluzione
tipica prevede che il VMM scansioni il codice prima di passarlo in esecuzione
16
Valutazione della tecnologia di virtualizzazione OpenVz
per impedire che blocchi contenenti queste istruzioni siano eseguiti
direttamente.
VMware, per esempio, implementa la tecnica della fast binary translation per
sostituire i blocchi contenenti simili istruzioni problematiche in blocchi
Figura 5 - Schema logico di un ambiente virtualizzato tramite VMware
equivalenti dal punto di vista funzionale e contenenti istruzioni per la notifica
di eccezioni che favoriscono l’intervento del VMM; tali blocchi equivalenti
sono passati poi in esecuzione diretta ed inoltre sono conservati in una cache
apposita per riusi futuri, risparmiando il costo di ulteriori traslazioni. Questo
processo di traslazione va applicato almeno all’intero kernel del guest OS, per
essere certi che tutte le istruzioni privilegiate che non notificano eccezioni
vengano intercettate e gestite.
Ciò che sinora è stato visto quindi è l'approccio “emulazione” alla
virtualizzazione: un software che simula in toto un computer fisico, su cui è
possibile installare un intero sistema operativo (e di conseguenza i software
desiderati funzionanti con quel sistema operativo).
L'approccio classico alla virtualizzazione consente (sempre con VMWare, per
esempio) di installare ed avviare su un unico computer fisico più macchine
virtuali (dotate ognuna di un proprio sistema operativo e dei propri software).
17
Valutazione della tecnologia di virtualizzazione OpenVz
Questo approccio alla virtualizzazione è molto potente, ha forse un unico limite:
un software di virtualizzazione che utilizzi l'approccio dell'emulazione è
piuttosto esoso in termini di risorse hardware, per cui è possibile andare
incontro a problemi di sovraccarico e di scarsa densità.
Utilizzando l'approccio di emulazione si può in taluni casi non essere del tutto
soddisfatti delle prestazioni della macchina virtuale, a causa dell'elevata
richiesta di risorse di cui ha bisogno.
Volendo pensare in modo semplificato: su un unico computer fisico si ha
installato un sistema operativo e, sopra a questo, un programma che consente di
installare (condividendo le risorse hardware, e dunque memoria, CPU, accesso
ai dischi, ecc...) un altro sistema operativo. In pratica: su uno stesso PC girano
contestualmente due sistemi operativi che, chiaramente condividono e si
contendono le risorse.
Per ottimizzato che sia il software di virtualizzazione, con l'approccio
“emulazione” un certo sovraccarico si crea e le prestazioni ne possono risentire
(soprattutto in determinati contesti). Pensate quanto sia caricato un PC (o
server) fisico che contestualmente fa girare più macchine virtuali.
Ne
consegue
che
anche
la
densità
(numero
di
macchine
virtuali
contemporaneamente attive e funzionanti su una macchina fisica che utilizzi
un'infrastruttura di virtualizzazione) non potrà raggiungere valori soddisfacenti
in determinati contesti.
1.3 Paravirtualizzazione
Il paradigma della paravirtualizzazione prevede che l’hardware virtuale esposto
dal VMM sia funzionalmente simile, ma non identico, a quello della sottostante
macchina fisica. Piuttosto che emulare le periferiche hardware esistenti, il
VMM espone una semplice astrazione delle periferiche.
18
Valutazione della tecnologia di virtualizzazione OpenVz
Nella paravirtualizzazione viene introdotto un layer (uno strato) software
leggero fra l'hardware e il sistema operativo delle macchine virtuali: tale layer
denominato “hypervisor”.
In particolare, l’interfaccia hardware virtuale che il VMM espone ai sistemi
guest è ridisegnata nella forma di una Applications Programming Interface
(Virtual Hardware API), che i sistemi guest devono sapere richiamare per
guadagnare l’accesso alle risorse.
Figura 6 - Schema logico di un ambiente virtualizzato tramite l'utilizzo delle API
Si richiede dunque che i sistemi operativi guest non siano più tenuti all’oscuro,
ma siano consapevoli di operare in un ambiente virtuale. Evidentemente questo
impone di modificarne il kernel ed i driver per renderli compatibili con le
proprietà del VMM utilizzato; ma, ed è la cosa più importante, non occorre
assolutamente modificare le applicazioni che girano sui sistemi operativi guest,
perchè l’interfaccia tra le applicazioni ed il sistema operativo non viene toccata
in alcun modo da questo approccio. Va dunque realizzato un porting dei
sistemi operativi esistenti, poiché gli attuali non sono scritti per dialogare con
una API di paravirtualizzazione ma solamente per gestire le interfacce
hardware standard. Questo è certamente un problema, soprattutto per vecchi
sistemi operativi di tipo legacy. Di riflesso però risulta enormemente
semplificata la struttura del VMM, poiché esso non deve più preoccuparsi di
19
Valutazione della tecnologia di virtualizzazione OpenVz
individuare e catturare le operazioni privilegiate dei guest OS per poi emularle,
ma si avvale invece della loro diretta e consapevole collaborazione.
Viene così meno il vincolo di operare con architetture CPU naturalmente
virtualizzabili,
non
più
essenziale
per
il
funzionamento
della
paravirtualizzazione.
Il vantaggio maggiore di questo tipo di tecnica, rispetto alla precedente,
consiste proprio nella maggiore semplicità ed efficienza di esecuzione del
VMM. Inoltre, vi sono contesti in cui la cooperazione tra il VMM ed il sistema
guest è necessaria per raggiungere un risultato efficace: per esempio
nell’ambito della gestione della memoria, si osserva che il VMM, come i
tradizionali sistemi operativi, può fare uso della paginazione per spostare
pagine di memoria dalla memoria primaria al disco, con il consueto vantaggio
di potere allocare più memoria di quella strettamente disponibile.
Ciò è particolarmente importante nel contesto della virtualizzazione, con molti
sistemi e processi che insistono sulle stesse risorse sovra-allocate. Occorre
dunque un meccanismo efficiente che consenta al VMM di reclamare ed
ottenere in caso di necessità dalle diverse macchine virtuali le porzioni di
memoria meno utilizzate. È chiaro che il sistema operativo di ogni macchina
virtuale possiede informazioni relative a quali siano le pagine di memoria più
adatte ad essere spostate su disco, decisamente migliori di quelle del VMM.
Per esempio, un guest OS può notare che una pagina di memoria appartiene
ad un processo terminato e dunque tale pagina non sarà più acceduta.
Il VMM, operando al di fuori dei singoli guest OS, non può rendersi conto di
questo e dunque non sarebbe altrettanto efficiente nel decidere quali pagine di
memoria trasferire su disco per quella macchina.
20
Valutazione della tecnologia di virtualizzazione OpenVz
Una strategia comunemente adoperata per risolvere questo problema è di tipo
“paravirtualizzante”:
su ogni macchina virtuale è in esecuzione un processo, a volte detto balloon
process (processo aerostato) che comunica con il VMM. Quando vi è necessità
di rastrellare memoria, il VMM chiede al balloon process di allocare più
memoria, cioè di “gonfiarsi”. Il guest OS, che meglio di tutti conosce l’utilizzo
della memoria nell’ambito della macchina virtuale, seleziona le pagine da
offrire al balloon process per soddisfarne la richiesta;
il balloon process comunica tali pagine al VMM che ne rientra in possesso. La
richiesta del balloon process provoca da parte del guest OS il trasferimento su
disco delle pagine probabilmente meno utilizzate dalla macchina virtuale, con
l’effetto netto di avere liberato memoria a favore del VMM, che provvede alla
riallocazione. Anche VMM che per il resto operano secondo il paradigma della
virtualizzazione completa, come lo stesso VMware, fanno largo uso di questi
meccanismi tipici della paravirtualizzazione, in specifico nella gestione della
memoria che , effettuata completamente dal di fuori, sarebbe altrimenti molto
complessa e poco efficiente. In particolare, VMware offre l’opzione di
installare dentro i sistemi guest un pacchetto di programmi (VMware Tools) in
cui sono presenti questa e altre “sonde” per migliorare lo scambio di dati tra
VMM e guest.
Nonostante la difficoltà di dovere realizzare il porting dei sistemi operativi
esistenti, la paravirtualizzazione sta catalizzando un’attenzione sempre
crescente. Il progetto attualmente più promettente di un VMM che opera
secondo tale paradigma è XEN, un VMM open source sviluppato
dall’Università di Cambridge. Nell’ambito del progetto è stato realizzato il
porting di Linux su XEN (XenoLinux), con un costo in termini di righe di
codice del Kernel modificato per dialogare con la API del Virtual Hardware
pari a circa 3000 righe, cioè circa 1,36% del totale.
21
Valutazione della tecnologia di virtualizzazione OpenVz
Attualmente lo sviluppo di XEN è alla versione 3; tra le funzionalità più
rilevanti vi è il supporto per sistemi multiprocessore e per i più recenti kernel di
Linux. Sono supportati inoltre meccanismi di “live migration” di VM da un
host con XEN ad un altro: ciò permette di eseguire manutenzioni su di un
singolo calcolatore senza interrompere i servizi, oppure bilanciare il carico
complessivo tra i vari host con XEN di cui si dispone.
Inoltre le principali distribuzioni di Linux commerciali (Suse e RedHat)
offrono già i pacchetti precompilati per installare XEN, nonchè le immagini
della propria distribuzione modificate per la paravirtualizzazione.
Lo scotto da pagare, in sintesi, è che le macchine virtuali devono avere un
sistema operativo modificato, opportunamente adattato all'utilizzo in ambiente
di paravirtualizzazione ma, a parte questo, i sistemi di paravirtualizzazione
centrano l'obiettivo di aumentare le prestazioni (in termini di velocità) delle
macchine virtuali e parzialmente di abbassare la richiesta di risorse hardware da
parte delle macchine virtuali stesse: la richiesta di RAM è comunque
considerevole, e la più pesante conseguenza che ne deriva è una densità media
di macchine virtuali presenti e funzionanti sulla medesima macchina fisica.
1.4 VMM di sistema e VMM ospitati
Soffermiamoci su un’ultima distinzione rilevante che caratterizza i sistemi di
virtualizzazione:
il livello dove si intende collocare il VMM rispetto all’architettura del sistema
di elaborazione.
Abbiamo già accennato che si distingue in questo caso tra VMM posti
direttamente sopra l’hardware dell’elaboratore (VMM di sistema) e VMM che
si istallano invece come applicazioni dentro un sistema operativo preesistente
(VMM ospitati).
22
Valutazione della tecnologia di virtualizzazione OpenVz
Figura 7 - Schema puramente indicativo di un VMM ospitato su di un sistema operativo
Nella prima opzione si integrano ad un sistema operativo “leggero” le
funzionalità di virtualizzazione, in un unico sistema che esegue direttamente
sopra l’hardware dell’elaboratore.
Un’implementazione così a basso livello offre migliori prestazioni, anche se
si rende necessario corredare il VMM di tutti i driver necessari per pilotare le
periferiche. In generale i prodotti implementati secondo questo modello
supportano un numero molto limitato di hardware certificato, rendendo meno
impegnativa la gestione delle periferiche altrimenti molto difficile vista
l’enorme varietà degli hardware nel mercato consumer.
La seconda opzione prevede invece l’installazione del VMM come
un’applicazione sopra un sistema operativo preesistente e non direttamente
sull’hardware del calcolatore. Con un certo livello di approssimazione per non
entrare troppo nei dettagli, si può dire che il VMM, anziché collocarsi sotto
tutti gli altri livelli software, opera nello spazio utente e accede all’hardware
attraverso le system call messe a disposizione dal sistema operativo su cui si
installa.
Le performance sono certamente inferiori, ma ci sono alcuni vantaggi
importanti: il VMM è più semplice da installare poiché è come
un’applicazione; inoltre potrà fare affidamento sul sistema operativo
sottostante, più fornito di driver per l’hardware più diffuso, per la gestione
23
Valutazione della tecnologia di virtualizzazione OpenVz
delle periferiche; infine, potrà servirsi di vari altri servizi dell’host OS come lo
scheduling e la gestione delle risorse. È dunque una soluzione comoda che
sacrifica le performance. Spesso tale opzione è più che sufficiente per un utente
che abbia solo l’esigenza di avere contemporaneamente attivi sul proprio PC
diversi sistemi operativi per sviluppare o testare applicazioni.
1.5 Virtualizzazione a livello di sistema operativo
Un'altra tecnica di virtualizzazione consiste nell'utilizzare un sistema operativo
appositamente modificato, in funzione sulla macchine fisica, che abbia come
scopo quello di gestire (nella maniera più efficiente possibile) delle macchine
virtuali, intese come esecuzione di ambienti ( container ), che utilizzano tutti il
medesimo kernel (di un determinato sistema operativo).
Figura 8 - Schema logico di un ambiente virtualizzato tramite l'utilizzo dei containers
Con questa tecnologia si ottengono le migliori prestazioni in termini di
prestazioni delle macchine virtuali, di densità, di allocazione dinamica delle
risorse assegnate alle macchine virtuali stesse. D'altro canto (forse lo si è già
capito) lo scotto da pagare consiste nel non poter utilizzare macchine virtuali
(sulla stessa macchina fisica) che utilizzino kernel differenti (e quindi sistemi
operativi differenti) sulla stessa macchina fisica.
Per fare un esempio: non è possibile con la virtualizzazione a livello di sistema
24
Valutazione della tecnologia di virtualizzazione OpenVz
operativo avere sulla stessa macchina fisica due macchine virtuali di cui una è
una macchina Linux e l'altra Windows. E' possibile avere più macchine virtuali
Linux basate su distribuzioni differenti di Linux, ovviamente a patto di
utilizzare per tutte il medesimo kernel (che è quello presente sulla macchina
fisica).
In pratica, invece di cercare di eseguire un intero sistema operativo guest, la
virtualizzazione tramite container isola degli ospiti, ma non cerca di
virtualizzare l'hardware; avremo dei contenitori (da qui il nome) per ogni
ambiente virtuale.
Con la virtualizzazione basata su container, l'installazione di un sistema
operativo guest non è così semplice come con i sistemi hypervisor: al momento
dell’istallazione dovrà essere creato un modello di contenitore.
Siccome un solo sistema operativo viene usato per eseguire tutti gli ambienti
virtuali, la virtualizzazione con l’utilizzo di container offre un livello di densità
molto più elevato. I container possono perfettamente ospitare il doppio o il
triplo di ambienti virtuali in più rispetto all'hypervisor. Ciò avviene perché una
grande parte del sovraccarico della macchina è rappresenta dal sistema
operativo che esegue. Questo è fantastico per eseguire una soluzione ad alta
densità in cui tutti gli ambienti virtuali sulla stessa macchina possono usare solo
un sistema operativo.
Inoltre, siccome c'è un solo sistema operativo da mantenere, un aggiornamento
coinvolge tutti gli ambienti virtuali presenti contemporaneamente su quella
macchina.
Dove 30 macchine virtuali richiederebbero 20 elaborazioni di gestione separate
su 3 o 4 server, gli stessi 30 ambienti virtuali richiederebbero solo
un'elaborazione di gestione. Questo fatto suppone un grande risparmio.
25
Valutazione della tecnologia di virtualizzazione OpenVz
Un prodotto che utilizza questa tipologia di virtualizzazione è, ad esempio,
OpenVZ.
1.5.1 Il concetto di Container
Questa sezione vuole fornire una panoramica sul concetto di Container,
descrivere le tecniche utilizzate per ottenere l'isolamento.
Un contenitore fornisce l'immagine composta di un file system radice, un
(sicuro e condiviso) insieme di librerie di sistema ed eseguibili.
Ogni VM può essere avviato, spento e riavviato proprio come un normale
sistema operativo. Risorse come lo spazio su disco, le garanzie di CPU,
memoria, ecc, sono assegnate a ciascuna macchina virtuale al momento della
creazione, ma spesso possono essere variate dinamicamente in fase di
esecuzione. Per le applicazioni e l'utente di un sistema basato sui contenitori, il
VM appare proprio come un host separato.
La figura sottostante illustra schematicamente la progettazione.
Figura 9 - Progettazione VM tramite containers
Come mostrato nella figura, vi sono tre piattaforme di base. La piattaforma di
hosting consiste essenzialmente nella comune immagine del SO e un VM ospite
26
Valutazione della tecnologia di virtualizzazione OpenVz
privilegiato. Questa è la VM che un amministratore di sistema utilizza per
gestire altre macchine virtuali. La piattaforma virtuale è la vista del sistema dal
punto di vista dei VM guest. A questo livello, c'è poca differenza tra un
contenitore e sistema basato su hypervisor. Tuttavia, si differenziano
fondamentalmente
le
tecniche
che
usano
per
implementare
l’isolamento tra VM e nel modo in cui mappare le macchine virtuali ai
controller delle risorse
Per i container l’approccio all’ isolamento coinvolge direttamente oggetti interni
del sistema operativo (PID, UID, IPC, e così via). Le tecniche di base per
utilizzare in modo sicuro questi oggetti riguardano:
• separazione degli spazi dei nomi (contesti), ovvero gli identificatori
globali (ad esempio gli ID di processo, IPC , ID utente, ecc) vivono in
spazi completamente diversi. Attraverso questa contestualizzazione gli
identificatori globali diventano identificatori globali per VM;
• controllo degli accessi (filtri), verifica se la macchina virtuale disponga
delle autorizzazioni appropriate per eccedere ad un determinato oggetto.
27
Valutazione della tecnologia di virtualizzazione OpenVz
Capitolo 2
OpenVZ (Open VirtualiZation) è una tecnologia di virtualizzazione a livello di
Sistema Operativo basata su kernel Linux. OpenVZ alloca un server fisico su
cui ‘girano’ multiple istanze di sistemi operativi isolati, noti come containers,
Virtual Private Servers (VPS), o Virtual Environments (VE). Ogni container
si comporta esattamente come un server stand-alone; un container può essere
riavviato in modo indipendente dagli altri e avrà propri:
• utenti,
• indirizzi IP,
• memoria,
• processi,
• file,
• applicazioni,
• librerie di sistema,
• file di configurazione.
OpenVZ è basato su i Containers Virtuozzo, un software proprietario prodotto e
messo a disposizione dalla società Parallels.
OpenVZ si compone di un kernel personalizzato e da tool di livello utente.
28
Valutazione della tecnologia di virtualizzazione OpenVz
2.1 Concetto di Virtual Environment
Virtual Environment (VE, conosciuto anche come VPS, container, partizione
ecc.) è un ambiente di esecuzione dei programmi isolato, che (dal punto di vista
dell’utente) appare come un server fisico separato.
Un VE ha un proprio set di processi di start, file system, utenti (incluso il root),
interfacce network con indirizzi IP, tabelle di routing, ecc.
Più VE possono co-esistere all’interno di un singolo server fisico. Differenti VE
possono ‘girare’ differenti distribuzioni di Linux, ma ciascuno VE opera sotto lo
stesso kernel.
2.2 Kernel di OpenVZ
In genere il kernel è il ‘cuore’ di un sistema operativo (nucleo) e fornisce tutte
le funzioni essenziali per il sistema, in particolare la gestione della memoria,
delle risorse del sistema e delle periferiche, assegnandole di volta in volta ai
processi in esecuzione.
Il kernel di OpenVZ è un kernel modificato di Linux che aggiunge le seguenti
funzionalità: virtualizzazione e isolamento dei diversi sottosistemi, gestore
delle risorse, e checkpointing.
• La virtualizzazione e isolamento abilita il funzionamento dei diversi
ambienti virtuali all’interno del singolo kernel;
• Il gestore delle risorse dei sottosistemi
limita (e in alcuni casi
garantisce) l’utilizzo delle risorse come ad esempio CPU, RAM, e spazio
sul disco ad ogni VE.
• Il checkpointing è un processo che ‘congela’ un VE, salvando
completamente il suo stato su un file disk, con la possibilità poi di
‘scongelare’ questo stato in futuro.
Le varie componenti sono descritte qui di seguito.
29
Valutazione della tecnologia di virtualizzazione OpenVz
2.2.1 Virtualizzazione e isolamento
Ogni VE ha un suo insieme di risorse messe a disposizione dal kernel del
sistema operativo. All’interno del kernel, queste risorse vengono virtualizzate o
isolate.
Ogni VE ha poi un insieme di oggetti qui elencati:
• File – librerie di sistema, applicazioni, sistemi e procedure virtualizzate,
blocchi virtualizzati, ecc.
• Utenti e gruppi – ciascuna VE ha il proprio root utente, come per altri
utenti e gruppi.
• Albero dei processi – Un VE vede solo i proprio processi, che vengono
startati nell’init. I PID sono virtualizzati, così che il PID dell’init sarà
sempre 1 come deve essere.
• Network – Dispositivo di rete virtuale, che permette al VE di avere i
propri indirizzi IP, così come una serie di tabelle IP e le regole di routing.
• Dispositivi – Alcuni dispositivi sono virtualizzati. In aggiunta, nel caso in
cui fosse necessario, ad alcuni VE è consentito (in esclusivo) l’accesso ai
dispositivi reali come le interfacce network, porte seriali, partizione del
disco, ecc.
• Oggetti IPC– memoria condivisa, semafori, e messaggi.
30
Valutazione della tecnologia di virtualizzazione OpenVz
2.2.2 Gestore delle risorse
Il gestore delle risorse ha un’importanza fondamentale per la virtualizzazione a
livello di sistema operativo, questo perchè c’è un insieme finito di risorse
all’interno del singolo kernel che devono essere condivise tra i diversi Virtual
Environments. Tutte queste risorse devono essere controllate in modo che i
molti ambienti virtuali coesistano su un singolo sistema, e non si influenzino a
vicenda.
Il gestore delle risorse di OpenVZ è costituito di tre componenti:
• Due livelli di quota del disco – L’amministratore del server OpenVZ
può settare le quote del disco per ciascun VE in termini di spazio sul
disco. Questo è il primo livello di quota.
Il secondo livello di quota del disco consente all'amministratore di VE
(VE root) di usare gli strumenti di quota standard di UNIX per settare lo
spazio sul disco per gli utenti e per i gruppi.
• “Equo” scheduler della CPU – Lo scheduler della CPU di OpenVZ ha
anch’esso due livelli.
Al primo livello si decide a chi tra i VE dare la slice di tempo, tenendo
conto delle priorità della CPU dei VE e le impostazioni dei limiti.
Al secondo livello, lo scheduler standard di Linux decide a quale
processo nel VE andrà la slice di tempo, usando il processo standard
delle priorità.
• Utente Beancounters – Si tratta di una serie di contatori, limiti e
garanzie (per ciascun VE). Vi è una serie di circa 20 parametri che
vengono scelti accuratamente per coprire tutti gli aspetti del
31
Valutazione della tecnologia di virtualizzazione OpenVz
funzionamento dei VE, in modo tale che nessun singolo può abusare di
una qualsiasi risorsa che è limitata per l'intero computer, e quindi
danneggiare gli altri ambienti virtuali. Le risorse che vengono controllate
sono principalmente la memoria e vari oggetti nel kernel, tra i quali i
segmenti di memoria condivisi, buffer di rete, ecc
2.2.3 Checkpointing e migrazione live
Il checkpointing consente la migrazione “live” di un VE ad un altro server
fisico. Il VE è “congelato” e il suo stato è completamente salvato su di un file
disk. Questo file può essere trasferito su di un’atra macchina e il VE può essere
“scongelato” li. L'intero processo richiede pochi secondi, e dal punto di vista
del client non sembra un tempo di inattività, ma piuttosto un ritardo nella
elaborazione, dato che le connessioni di rete stabilite sono migrate.
32
Valutazione della tecnologia di virtualizzazione OpenVz
Capitolo 3
Funzionalità di OpenVZ
Le funzionalità di base OpenVZ VPS sono:
• Partizionamento Dynamic Real-time - partizionare un server fisico in
decine di VPS, ciascuno con tutte le funzionalità di un server dedicato.
• Resource Management - Assegnazione e controllo dei parametri delle
risorse ai VPS e ri-allocazione delle risorse stesse in tempo reale.
• Gestione di massa - Consente di gestire una moltitudine di server fisici
e server privati virtuali in modo unificato.
OpenVZ fornisce una soluzione completa per l'hosting service provider
consentendo loro di avere centinaia di clienti con i loro singoli server virtuali
con funzionalità complete private (Virtual Private Server) che condividono un
singolo server fisico. Se si amministra un certo numero di server dedicati Linux
all'interno di un'azienda, ognuno dei quali gestisce un determinato servizio, è
possibile utilizzare OpenVZ per consolidare tutti questi server su un singolo
computer senza perdere informazioni preziose e senza compromettere le
prestazioni.
33
Valutazione della tecnologia di virtualizzazione OpenVz
Come già ribadito in precedenza i Virtual Private Server si comportano proprio
come server stand-alone isolati, ovvero:
• Ogni VPS ha i suoi propri processi, utenti, file e fornisce pieno accesso
alla shell di root;
• Ogni VPS ha i suoi indirizzi IP, i numeri di porta, il filtraggio e regole di
routing;
• Ogni VPS può avere una propria configurazione del sistema e software
applicativo, così come le sue versioni di librerie di sistema. E 'possibile
installare software e personalizzare i pacchetti all'interno di un VPS in
modo indipendente da altri VPS o il sistema host.
Distribuzioni multiple di un pacchetto possono essere eseguite su una sola e
stessa macchina Linux.
In realtà, centinaia di server possono essere raggruppati in questo modo. Oltre
agli
evidenti
vantaggi
di
tale
consolidamento
(maggior
facilità
di
somministrazione e simili), ci sono altri vantaggi a cui forse non si è pensato,
per esempio, al taglio delle bollette di elettricità!
3.1 Caratteristiche distintive di OpenVZ
Il concetto di VPS fornito da OpenVZ è distinto dal concetto tradizionale di
macchina virtuale, questo perché i Virtual Private Server devono eseguire tutti
lo
stesso kernel di un medesino SO come sistema host (Linux su Linux,
Windows su Windows, ecc.).
Supponendo di utilizzare Linux 2.6, ogni contenitore è scalabile come il kernel
Linux 2.6, con i benefici che ne comporta, esempio: supporta fino a 64
processori e fino a 64 GB di RAM. Un unico contenitore può scalare fino a
34
Valutazione della tecnologia di virtualizzazione OpenVz
raggiungere tutte le possibilità fisiche, vale a dire utilizzare tutte le CPU e tutto
lo spazio RAM.
Questa tecnologia di implementazione single-kernel consente di eseguire
Virtual Private Server, con un overhead (tempo medio di CPU necessario per
eseguire i moduli del kernel) limitato, e può essere trascurato in molti scenari.
Così, i VPS di OpenVZ offrono un ordine di grandezza maggiore in termini di
efficienza e gestibilità rispetto alle tecnologie di virtualizzazione tradizionali.
Per quanto riguarda le densità, OpenVZ è in grado di ospitare centinaia di
contenitori su un buon hardware (le principali limitazioni sono RAM e CPU).
Figura 10 - Grafico che mostra il tempo di risposta di un contenitore
Il grafico mostra la relazione del tempo di risposta del contenitore con un server
web Apache col variare del numero di contenitori. Le misurazioni sono state
effettuate su un macchina con 768 MB di RAM; ogni contenitore fa eseguire
l’insieme di processi: init, syslogd, crond, sshd e Apache ed è stato registrato il
primo tempo di risposta. Come il crescere del numero di contenitori, il tempo di
risposta diventa più elevato a causa della carenza di RAM e swap eccessivi. In
questo scenario è possibile eseguire fino a 120 contenitori con 768 MB di RAM.
35
Valutazione della tecnologia di virtualizzazione OpenVz
Cresce in maniera lineare, per cui è possibile eseguire fino a circa 320
contenitori su server dotato di 2 GB di RAM.
Infine, per ciò che attiene alla gestione generale, un amministratore (cioè root)
di OpenVZ su un server fisico (conosciuto anche come un nodo hardware o
sistema host) può vedere tutti i processi in esecuzione e i file su tutti i
contenitori del sistema. Ciò rende possibile la gestione generale (mass
management). VMware o Xen sono utilizzati per il consolidamento del server:
per applicare un aggiornamento a 10 server virtuali è richiesto che una
amministratore acceda a ciascuna virtual machine ed esegua l’aggiornamento
mentre OpenVZ con un semplice script di shell è in grado di aggiornare tutti i
contenitori in una sola volta.
OpenVZ si rivela prezioso anche per le istituzioni educative che possono ora
fornire tutti gli studenti con un server Linux personale, che può essere gestito in
remoto. Società di sviluppo software possono utilizzare gli ambienti virtuali a
fini di prova e simili.
Così, OpenVZ può essere applicato in modo efficace in una vasta gamma di
settori: web hosting, lo sviluppo e test del software, formazione degli utenti, e
così via.
3.1.1 Applicazioni
Dal punto di vista delle applicazioni e utenti
dei Virtual Private Server,
ciascuno VPS è un sistema indipendente. Questa autonomia è assicurata da un
livello di virtualizzazione nel kernel del sistema operativo host. Si noti che solo
una parte infinitesimale delle risorse della CPU viene speso per la
virtualizzazione (circa 1-2%).
36
Valutazione della tecnologia di virtualizzazione OpenVz
Le caratteristiche principali dello strato di virtualizzazione attuata da OpenVZ
sono le seguenti:
• Un VPS si presenta come un normale sistema operativo Linux. Ha
standard di script di avvio, i software dei fornitori possono essere eseguiti
all'interno VPS OpenVZ senza modifiche o specifici di adeguamento;
• Un utente può modificare qualsiasi file di configurazione e installazione
di software aggiuntivo;
• Virtual Private Server sono completamente isolati gli uni dagli altri
(file system, i processi, Inter Process Communication (IPC), le variabili
sysctl);
3.1.2 Networking
Lo strato di rete virtualizzato da OpenVZ è progettato per isolare i VPS uno
dall'altro e dalla rete fisica:
Ogni VPS ha un proprio indirizzo IP, indirizzi IP multipli per ogni VPS sono
consentiti;
La rete traffico di un VPS viene isolata dalle altre VPS: in altre parole, i Virtual
Private Server sono protetti l’uno dall'altro in modo che si renda impossibile lo
snooping del traffico;
Può essere usato Firewalling all'interno di un VPS (l'utente può creare regole
che limitano l'accesso ad alcuni servizi utilizzando lo strumento canonico
iptables all'interno delle VPS). E’ possibile quindi impostare le regole del
firewall dall'interno di una VPS;
Manipolazioni della tabella di routing sono autorizzate a beneficiare di
funzionalità avanzate di routing. Ad esempio, impostando diverse unità di
trasmissione massima (MTU) per diverse destinazioni, specificare gli indirizzi
di origini diverse per diverse destinazioni, e così via.
37
Valutazione della tecnologia di virtualizzazione OpenVz
3.1.3 Template
Un modello operativo in OpenVZ è fondamentalmente un insieme di pacchetti
da una qualche distribuzione Linux utilizzata per compilare uno o più VPS. Con
OpenVZ, distribuzioni differenti possono coesistere sullo stesso hardware,
quindi più modelli di sistema operativo sono disponibili.
Un modello operativo è costituito da programmi di sistema, librerie e gli script
necessari per avviare e gestire il sistema (VPS), così come alcune applicazioni
di base e di utilità. Applicazioni come un compilatore e un server SQL di solito
non sono incluse in un modello di sistema operativo.
Resource Management controlla la quantità di risorse disponibili per Virtual
Private Server. Le risorse controllate includono parametri quali la potenza della
CPU, spazio su disco, una serie di parametri relativi alla memoria.
La gestione delle risorse OpenVZ consente:
• efficace condivisione delle risorse hardware disponibili nodo tra VPS;
• Garanzia di qualità-of-Service (QoS) in conformità con un Service Level
Agreement (SLA);
• fornire prestazioni e l'isolamento delle risorse e proteggere da attacchi;
• contemporaneamente assegnare e controllare le risorse per una serie di
Virtual Private Server, ecc
38
Valutazione della tecnologia di virtualizzazione OpenVz
3.2 Come funziona OpenVZ
In questa sezione si cercherà di formare una idea più o meno precisa del modo
in cui il software OpenVZ funziona sul vostro computer.
Si prega di vedere la figura seguente:
Figura 11 - Architettura server con OpenVZ
Questa figura presuppone che si dispone di un numero di server fisici uniti in
una rete. In effetti, si può avere solo un server dedicato per utilizzare in modo
efficace OpenVZ per le esigenze della vostra rete. Se più di un server è basato
su OpenVZ, ciascuno dei server avrà una architettura simile. Nella terminologia
di OpenVZ, tali server sono chiamati nodi hardware (o HN, o solo Nodi),
perché
rappresentano
le
unità
hardware
all'interno
di
una
rete.
OpenVZ è installato su Fedora Core 3 o 4 o Red Hat Enterprise Linux 4
configurato in un certo modo. Tale configurazione personalizzata comprende la
creazione di una partizione /vz, che è la partizione di base per l'hosting di
Virtual Private. I problemi di configurazione e simili sono più facilmente risolti
durante l'installazione di Linux sul nodo hardware.
39
Valutazione della tecnologia di virtualizzazione OpenVz
OpenVZ viene installato in modo tale che si è in grado di avviare il computer
sia con il supporto OpenVZ o senza di esso. Questo supporto è presentato come
"OpenVZ" nel boot loader e mostrato come “Layer OpenVZ” nella figura
sopra.
Tuttavia, a questo punto non si è ancora in grado di creare un Virtual Private
Server. Un VPS è funzionalmente identico a un server stand-alone isolato, ha i
suoi indirizzi IP, processi, file, gli utenti, i suoi file di configurazione, le proprie
applicazioni, librerie di sistema e così via. I Virtual Private Server condividono
lo stesso nodo hardware e lo stesso kernel del Sistema Operativo. Tuttavia, essi
sono isolati uno dall'altro. Un Virtual Private Server è una sorta di 'sandbox' per
i processi e gli utenti.
Ogni VPS può eseguire la propria versione di Linux. In questo caso si dice che
un VPS è basato su un template del SO. I template del sistema operativo sono
pacchetti spediti con OpenVZ. Prima di essere in grado di creare un Virtual
Private Server, è necessario installare il template corrispondente di SO in
OpenVZ. Questo messaggio viene visualizzato come ‘templates’ (modelli)
OpenVZ nello schema di cui sopra.
Dopo aver installato almeno un modello di sistema operativo, è possibile creare
un numero qualsiasi di VPS con l'aiuto di utility standard di OpenVZ,
configurare la propria rete e / o altre impostazioni, e lavorare con questi VPS
come con un server Linux completamente funzionale.
3.2.1 I modelli
Un modello è un blocco utile per la costruzione di un VPS. Un modello
operativo è un insieme di pacchetti necessari per far funzionare un VPS. I
modelli sono generalmente creati direttamente sul tuo nodo hardware, è
40
Valutazione della tecnologia di virtualizzazione OpenVz
sufficiente disporre di strumenti di modello (vzpkg) e metadati di template.
I metadati di template sono informazioni su un modello specifico di sistema
operativo. Esso contiene:
• un elenco di pacchetti inclusi in questo modello (in forma di nomi di
pacchetti);
• di posizione (di rete) repository di pacchetti;
• distribuzione di specifici script eseguiti su varie fasi di installazione del
template;
• chiave pubblica GPG necessaria per controllare le firme dei pacchetti;
Tutte queste informazioni sono contenute in alcuni file installati nella cartella
/vz /template/osname/osrelease/config /directory. Ad esempio, i metadati per
il modello di Fedora Core 4 sono installati nella directory /vz/template/fedoracore/4/config/.
Insieme con i metadati , alcuni pacchetti specifici di OpenVZ sono di solito
installati in /vz/template/osname/OSVersion/vz-addons/directory.
I metadati forniscono informazioni sufficienti per creare un modello operativo.
Durante la creazione del modello operativo, i file del pacchetto necessari
vengono scaricati dal repository al nodo hardware e installato in un VPS
temporaneo, che viene poi compresso con gzip e salvato nella cache del
template.
La cache di modello viene utilizzata per creare velocemente i VPS. In sostanza,
tutto quello che serve per creare un VPS è scompattare il file. I file di modello
di cache sono memorizzati nella cartella /vz/template/cache/directory.
Qualsiasi file di cache diventa obsoleto con il tempo a causa dei nuovi
41
Valutazione della tecnologia di virtualizzazione OpenVz
aggiornamenti che vengono rilasciati per la distribuzione data. Naturalmente, c'è
un modo per aggiornare rapidamente la cache dei template così come tutte le
VPS creati in precedenza con gli ultimi aggiornamenti.
Oltre a essere in grado di eseguire tutti i tipi di attività all'interno di un Virtual
Private Server inclusi i pacchetti rpm di costruzione e la loro installazione,
OpenVZ fornisce un modo semplice e molto più efficace di installare le
applicazioni necessarie sul VPS. Nello stesso modo con cui si installa un
modello operativo sul sistema OpenVZ in modo da creare un numero qualsiasi
di Virtual Private Server e condividere le fra loro le risorse, è possibile installare
le applicazioni in OpenVZ al fine di condividere i file dei pacchetti tra un
qualsiasi numero di VPS. È quindi possibile aggiungere queste applicazioni a
qualsiasi numero di Virtual Private Server.
E 'ovvio che nel caso si desideri installare un'applicazione su un solo VPS, non
c'è bisogno di lavorare con i modelli: si può anche lavorare all'interno delle VPS
corrispondenti.
3.2.2 Le licenze
Il software OpenVZ è costituito dal kernel OpenVZ e strumenti a livello utente,
che sono concessi per mezzo di due diverse licenze open source.
• Il kernel OpenVZ è basato sul kernel Linux, distribuito sotto i termini
della GPL, ed è sotto licenza GNU GPL versione 2. Il testo della licenza
è disponibile all'indirizzo http://openvz.org/documentation/licenses/gnugpl.
•
Gli strumenti a livello utente (vzctl, vzquota e vzpkg) sono rilasciati
sotto i termini della licenza QPL. Il testo della licenza è disponibile
all'indirizzo http://openvz.org/documentation/licenses/qpl.
42
Valutazione della tecnologia di virtualizzazione OpenVz
vzctl e un programma di utilità per il controllo dei contenitori (creare,
distruggere,
avviare,
arrestare,
impostare
i
parametri
ecc).
vzquota è un programma di utilità per gestire le quote per i contenitori.
Molto usato mediante l’utilizzo di vzctl.
OpenVZ consente di configurare in modo flessibile le diverse impostazioni per
il sistema OpenVZ, in generale, così come per ogni Virtual Private Server. Tra
queste impostazioni ricordiamo quelle per il disco e le quota utente, i parametri
di rete, percorsi di file predefiniti ei file di configurazione, e altri.
OpenVZ memorizza le informazioni di configurazione in due tipi di file: il file
di configurazione globale /etc/sysconfig/vz e file di configurazione VPS
/etc/sysconfig/VZ-scripts/vpsid.conf.
Il file di configurazione globale, definisce i parametri globali e di default per il
funzionamento VPS, ad esempio, le impostazioni di registrazione, attivazione e
disattivazione delle quote disco per VPS, il file di configurazione di default e il
modello di SO sulla base dei quali viene creato un nuovo VPS, e così via.
D'altra parte, un file di configurazione VPS definisce i parametri per un dato
VPS, come quota del disco e limiti delle risorse assegnate, l'indirizzo IP e nome
host, e così via. In caso in cui parametro sia configurato sia nel file di
configurazione globale che in quello VPS, il file di configurazione VPS ha la
precedenza.
43
Valutazione della tecnologia di virtualizzazione OpenVz
I file di configurazione vengono letti quando OpenVZ e/o VPS vengono avviati.
Tuttavia, le utility standard, per esempio, vzctl, permettono di modificare
numerose impostazioni di configurazione "on-the-fly", senza modificare i file
di configurazione corrispondenti o con la loro modifica (se si desidera che le
modifiche da applicare siano valide anche ai successivi avvii di OpenVZ /o
VPS).
Figura 12 - Control Panel di OpenVZ
44
Valutazione della tecnologia di virtualizzazione OpenVz
3.2.3 Considerazioni sull’Hardware
La disponibilità di hardware in questo caso è ancora più importante rispetto ad
un normale server. Dal momento che ‘girano’ più server virtuali che forniscono
una serie di servizi critici, un'interruzione hardware potrebbe essere molto
costosa.
Al fine di aumentare la disponibilità hardware, ci sono dei suggerimenti da
seguire:
• Utilizzare l'archiviazione RAID per i VPS che eseguono attività critiche.
Anche il RAID 1 (mirroring)
potrebbe essere utilizzato come una
possibile soluzione.
Un RAID, acronimo di Redundant Array of Independent Disks, in
italiano insieme ridondante di dischi indipendenti, è un sistema
informatico che usa un gruppo di dischi rigidi per condividere o replicare
le informazioni. I benefici del RAID sono di aumentare l'integrità dei
dati, la tolleranza ai guasti e le prestazioni, rispetto all'uso di un disco
singolo.
Il sistema RAID 1 crea una copia esatta (mirror) di tutti i dati su due o
più dischi. È utile nei casi in cui la ridondanza è più importante che usare
tutti i dischi alla loro massima capacità: infatti il sistema può avere una
capacità massima pari a quella del disco più piccolo. In un sistema ideale,
formato da due dischi, l'affidabilità aumenta di un fattore due rispetto al
sistema a disco singolo, ma è possibile avere più di una copia dei dischi.
Poiché ogni disco può essere gestito autonomamente nel caso l'altro si
guasti, l'affidabilità aumenta linearmente al numero di dischi presenti.
RAID-1 aumenta anche le prestazioni in lettura, visto che molte
implementazioni possono leggere da un disco mentre l'altro è occupato.
45
Valutazione della tecnologia di virtualizzazione OpenVz
• Non eseguire il software sul nodo hardware stesso. Creare speciali
Virtual Private Server in cui è possibile ospitare i servizi necessari come
BIND, FTPD, HTTPD, e così via. Sul nodo hardware in sé, è necessario
solo il demone SSH. Preferibilmente, dovrebbe accettare le connessioni
da un set predefinito di indirizzi IP unici.
BIND (Berkeley Internet Name Domain) è il server DNS più usato su
Internet, specialmente sui sistemi Unix e derivati, sui quali è lo standard
di fatto.
FTPD è il processo del server Internet File Transfer Protocol. Il server
usa il protocollo TCP e ascolta la porta specificata nelle specifiche del
servizio FTP.
L'acronimo HTTPD sta per Hyper Text Transfer Protocol Daemon
(ovvero web server).
SSH è un modo sicuro e crittato di stabilire connessioni a sistemi o server
remoti. Un server SSH accetta connessioni da client SSH e consente loro
di effettuare il login nel sistema come se fossero seduti di fronte ad esso.
Usando SSH, puoi eseguire programmi da riga di comando.
• Non creare utenti sul nodo hardware stesso. È possibile creare tutti gli
utenti di cui si hai bisogno in ogni Virtual Private Server.
Bisogna ricordare che compromettere il nodo hardware significa
compromettere tutte le Virtual Private Server pure.
46
Valutazione della tecnologia di virtualizzazione OpenVz
3.3 Utilizzo concreto della tecnologia OpenVZ
Qui di seguito vengono mostrati alcuni esempi di utilizzo concreto di OpenVZ,
come ad esempio l’installazione del software e la creazione di un container.
3.3.1 Installazione di OpenVZ
Requisiti
Si presuppone si usi una distribuzione di recente rilascio come Fedora Core
(FC5 o superiore) o RHEL / CentOS 4. Attualmente, il kernel di OpenVZ cerca
di supportare lo stesso hardware compatibile con i kernel di Red Hat. Per un
completo elenco di compatibilità hardware è possibile consultare Hardware
Compatibility List di Virtuozzo.
Filesystem
Si raccomanda di utilizzare una partizione separata per la directory dei container
privati (di default /VZ/private / <veid>). Il motivo per cui si dovrebbe fare così
è perché se si desidera utilizzare la funzione per-container disk quota di
OpenVZ, non si è in grado di utilizzare le quote disco di Linux sulla stessa
partizione.
La gestione della quota dei container di OpenVZ è supportato solo su
filesystem ext2/ext3. Quindi conviene utilizzare uno di questi filesystem ( è
raccomandato ext3 in quanto garantisce una maggiore integrità dei dati e ha,
nella maggior parte dei casi, un velocità maggiore rispetto a ext2) se si vuol
adoperare il gestore delle quote incluso in OpenVZ.
Usare rpm o yum?
RPM ovverosia Red Hat Package Manager è stato uno dei primi, se non il
primo, gestore di pacchetti mai creati per Linux.
47
Valutazione della tecnologia di virtualizzazione OpenVz
YUM è un programma per l'aggiornamento automatico di pacchetti rpm. Yum
controlla le dipendenze dei pacchetti e tutto il necessario per installare
correttamente programmi da varie repositories.
Nel caso in cui è disponibile l’utility yum sul sistema, è possibile utilizzarla in
modo efficace per installare e aggiornare i pacchetti di OpenVZ. Nel caso in cui
non si può usare yum, o non lo si desidera utilizzare, è possibile utilizzare i
pacchetti rpm.
Le istruzioni per rpm e yum sono fornite di seguito:
• pre-setup con yum
Se si desidera utilizzare yum, prima si dovrebbe configurare il repository
di OpenVZ.
Scaricare il file openvz.repo (http://download.openvz.org/openvz.repo) e
metterlo nel repositori locale /etc/yum.repos.d/. Questo può essere fatto
usando i seguenti comandi, come utente root:
#cd /etc/yum.repos.d
# wget http://download.openvz.org/openvz.repo
# rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
Nel caso in cui non è possibile riuscire ad eseguire il comando
cd/etc/yum.repos.d, significa che yum non è installato sul proprio
sistema, o la versione di yum è troppo vecchia. In tal caso, basta seguire
il metodo di installazione per rpm.
L’installazione del kernel
In primo luogo, è necessario scegliere quale “flavor” del kernel si desidera
installare.
48
Valutazione della tecnologia di virtualizzazione OpenVz
• Usando yum
Eseguire il seguente comando
# yum install ovzkernel[-flavor]
Qui [-flavor] è facoltativo, e può essere -smp o -enterprise.
Questo problema è comunque risolto in versioni più recenti di yum.
• Usando i pacchetti rpm
Occorre scaricare il kernel binario RPM dalla sezione download del
kernel, si prega di sceglierne uno a seconda del proprio hardware.
Quindi, installare l’RPM del kernel che è stato scelto:
# rpm -ihv ovzkernel[-flavor]*.rpm
Qui [-flavor] è facoltativo, e può essere -smp o -enterprise.
Nota: rpm-U (U-dove l’acronimo di aggiornamento) non deve essere
usato, altrimenti tutti i kernel attualmente installato saranno disinstallati.
Configurare il bootloader
Sarà automaticamente configurato GRUB come boot loader (programma che
carica il kernel di un sistema operativo e ne permette l'avvio).
Configurazione
Assicurarsi che i seguenti passaggi vengono eseguiti prima di riavviare il kernel
OpenVZ.
• sysctl
Ci sono un certo numero di parametri del kernel che dovrebbe essere
impostati per far funzionare correttamente OpenVZ . Questi parametri
vengono memorizzati nel file /etc/sysctl.conf. Saranno cambiate delle
49
Valutazione della tecnologia di virtualizzazione OpenVz
porzioni importanti del file.
Deve essere consentito l’inoltro dei
pacchetti
al
nodo
hardware
e
disabilitato il proxy arp:
#net.ipv4.ip_forward = 1
#net.ipv4.conf.default.proxy_arp = 0
Occorre abilitare la verifica del
mittente del percorso:
#net.ipv4.conf.all.rp_filter = 1
Figura 13 - Vista del file sysctl.conf
SELinux
Rappresenta un'architettura creata per aumentare la sicurezza del vostro sistema
e in questo caso deve essere disattivato. A tal fine, mettere la seguente riga nel
file /etc/sysconfig/selinux:
#SELINUX=disabled
Riavvio del kernel OpenVZ
Ora riavviare la macchina e scegliere “OpenVZ” nel menu del boot loader. Se il
kernel OpenVZ è stato avviato con successo, procedere alla installazione a
livello utente degli strumenti di OpenVZ.
Installare i tool
OpenVZ necessita dell’istallazione di alcuni strumenti a livello utente.
Questi sono:
• vzctl
Un programma di utilità per il controllo dei contenitori (creare,
distruggere, avviare, arrestare, impostare i parametri ecc)
50
Valutazione della tecnologia di virtualizzazione OpenVz
• vzquota
Un programma di utilità per gestire le quote per i contenitori. Molto usato
mediante l’utilizzo di vzctl.
Usando yum
# yum install vzctl vzquota
Usando il formato rpm
Scaricare il binario RPM di questi servizi di pubblica utilità da
http://wiki.openvz.org/Download/utils. Installarli:
# rpm -Uhv vzctl*.rpm vzquota*.rpm
Quando tutti gli strumenti sono installati, avviare il sottosistema di OpenVZ.
Avviare OpenVZ
Come utente root, eseguire il seguente comando:
# /sbin/service vz start
In questo modo tutti i moduli necessari del kernel OpenVZ vengono caricati.
Questo script dovrebbe avviare anche tutti i contenitori contrassegnati per essere
auto-avviabili al boot della macchina (se ce ne sono già).
Durante
il
successivo
riavvio,
questo
script
deve
essere
eseguito
automaticamente.
Prossimi passi
OpenVZ è ora installato sulla macchina. Per caricare il kernel di OpenVZ di
default, modificare la linea in /boot/grub/grub.conf nel punto del kernel
OpenVZ. Ad esempio, se il kernel OpenVZ è il primo kernel menzionato nel
file, metterlo come default=0.
51
Valutazione della tecnologia di virtualizzazione OpenVz
3.3.2 Creazione di un container
Innanzitutto
è
possibile
scaricare
dalla
pagina
http://wiki.openvz.org/Download/template/precreated il template già pronto di
Debian 5.0 (quello x86 per sistemi a 32 bit oppure x86_64 per la versione a 64
bit).
Collocare
l’archivio
scaricato,
senza
scompattarlo,
nella
cartella
/vz/template/cache del proprio computer.
Per creare un container (un vps) a partire dal modello scaricato, basta eseguire il
comando, avendo cura di mettere debian-5.0-x86_64 se si è scelto un template a
64 bit:
# /usr/sbin/vzctl create 101 –ostemplate debian-5.0-x86
Dopo qualche secondo viene creato un nuovo container, ma per poterlo usare
bisogna avviarlo:
# /usr/sbin/vzctl start 101
Per poter utilizzare una connessione di rete e quindi rendere il vps contattabile
almeno dalla LAN assegnare un indirizzo IP facente parte della rete (anche
mentre l’ambiente è in esecuzione):
# /usr/sbin/vzctl set 101 –ipadd 192.168.1.101
Per potersi collegare al vps basta
usare il comando:
# /usr/sbin/vzctl enter 101
Figura 14 - Utilizzo del comando vzctl start 101
52
Valutazione della tecnologia di virtualizzazione OpenVz
Prima di tutto controllare che la rete sia effettivamente funzionante provando
con un ping ad un indirizzo della subnet.
Se il ping non mostra alcun pacchetto di risposta può essere necessario
disattivare l’interfaccia virtuale nel container creata già con un indirizzo non
adeguato alle caratteristiche della propria rete: col comando “ipconfig” vengono
mostrate l’interfaccia di loopback, l’interfaccia creata con l’IP personalizzato
(come spiegato precedentemente) e una scheda di rete con IP 10.1.1.1 che va
eliminata col comando:
vps:/# ifdown venet0:0
Ora è possibile fare un upgrade del sistema con le ultime patch di sicurezza:
vps:/# apt-get update
vps:/# apt-get upgrade
Può darsi che abbia problemi con la risoluzione dei nomi (cioè che sia in grado
di raggiungere l’esterno usando un indirizzo IP pubblico ma non sia capace di
risolvere ad esempio google.it), in questo caso vedere le regole usate per
iptables sul server fisico (disabilitarle temporaneamente).
Non c’è sinceramente molto da fare perché Apache è già installato all’interno
del container.
Se si vuole usare Apache per creare un VirtualHost si può adoperare questo
modello:
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName www.adminsite.com
ServerAlias adminsite.com
53
Valutazione della tecnologia di virtualizzazione OpenVz
DocumentRoot /var/www/adminsite
<Directory /var/www/adminsite>
Options FollowSymLinks -Indexes
AllowOverride All
</Directory>
ErrorLog /var/log/apache2/adminsite_error.log
CustomLog /var/log/apache2/adminsite_custom.log combined
</VirtualHost>
Se si preferisce sostituire Apache con un web server più leggero come lighttpd o
nginx si può disinstallare Apache con:
vps:/# /etc/init.d/apache2 stop
vps:/# apt-get remove apache2
54
Valutazione della tecnologia di virtualizzazione OpenVz
Bibliografia
[1]
Boari, Balboni. “Tecniche di virtualizzazione. Teoria e pratica. “ Mondo
Digitale, Marzo 2007
[2]
Prof. Fabio Cantaro, “'Macchine virtuali”
[3]
Kirilli Klyshkin, “Virtualization in Linux”
[4]
Stephen Soltesz, Herbert P-otzl, Marc E. Fiuczynski,
Andy Bavier, Larry Peterson,
“Container-based Operating System Virtualization:
A Scalable, High-performance Alternative to Hypervisors”
[5]
OpenVZ.org
[6]
parallels.com
[7]
Valent Emulazione virtuale, http://www.valent-blog.eu/
[8]
HPL-2007-59 technical report
http://www.hpl.hp.com/techreports/2007/HPL-2007-591R1.html?
jumpid=reg_R1002_USEN
55
Valutazione della tecnologia di virtualizzazione OpenVz
Ringraziamenti
Eccomi finalmente tagliare “IL TRAGUARDO”.
Termina un percorso intrapreso tre anni fa e che si è rivelato, in alcune
circostanze, molto difficile.
Tante volte avrei voluto lasciare ma guardando dove sono arrivata il mio
ringraziamento va a tutte quelle persone che mi sono state sempre vicino.
Un immenso grazie va ai miei genitori che mi hanno sempre incoraggiata e
spronata a dare il massimo, che hanno creduto nelle mie capacità e mi hanno
consolato nei momenti difficili.
Un ringraziamento speciale va anche ai miei amici di corso Raffaele, Pasquale,
Fabio, Vincenzo, Claudio e Davide; la loro amicizia ha riempito le mie giornate
universitarie ed è anche merito loro se oggi sono qui.
Sicuramente la soddisfazione più grande che questi anni di studio mi hanno
regalato è quella di aver firmato, in un momento in cui i giovani hanno mille
dubbi su cosa fare dopo aver conseguito la Laurea, un contratto di lavoro che mi
permette di mettere in pratica quello per cui mi sono tanta impegnata.
Grazie di Cuore
56
Valutazione della tecnologia di virtualizzazione OpenVz
57