Progetto

Generale

Profilo

LinuxOpenVZHowto » Cronologia » Versione 20

Amministratore Truelite, 26-02-2010 19:41

1 1 Amministratore Truelite
[[TracNav(TOC)]]
2
3
= Come creare un ambiente "virtualizzato" con OpenVZ su Lenny =
4
5 2 Amministratore Truelite
Il supporto per [http://wiki.openvz.org/ OpenVZ] è presente in Debian a partire da ''Etch''. Come per Vserver la tecnologia dei ''container'' usata da [http://wiki.openvz.org/ OpenVZ], pur non fornendo una macchina virtuale vera e propria, consente  un uso estremamente efficiente delle risorse, permettendo creare una serie di sistemi indipendenti, chiamati ''virtual-environment'' (da qui in breve VE), che girano sotto lo stesso kernel, utilizzando lo stesso filesystem ed un unico stack di rete, che pur non essendo macchine virtuali in senso stretto, nella gestione ordinaria possono essere tranquillamente considerate come tali.
6 1 Amministratore Truelite
7
Ovviamente non trattandosi di una tecnologia di virtualizzazione, non consente di installare un ''virtual-server'' con un sistema operativo diverso, come Windows. Qualora si abbiano di queste esigenze si dovrà ricorrere a tecnologie alternative come Xen o KVM. 
8
9 20 Amministratore Truelite
== Installazione sistema ospite (HN) ==
10 7 Amministratore Truelite
11 20 Amministratore Truelite
Come accennato OpenVZ è supportato a partire da Debian ''Etch'', una volta installato il sistema base (queste note fanno riferimento alla versione distribuita con ''Lenny''), si dovrà installare il kernel modificato per l'uso dello stesso sulla macchina ospite (il cosiddetto ''Hardware Node'', o HN) con il comando:
12 1 Amministratore Truelite
{{{
13
aptitude install linux-image-openvz-686
14
}}}
15 2 Amministratore Truelite
alternativamente, se la macchina è stata installata a 64 bit, si dovrà installare il pacchetto {{{linux-image-openvz-amd64}}}. L'installazione del kernel installa automaticamente anche i tool di base necessari alla gestione delle macchine contenute.
16
17 4 Amministratore Truelite
Su Debian tutti i file di OpenVZ e dei VE vengono mantenuti sotto {{{/var/lib/vz/}}}, ma per compatibilità con altre versioni è suggerito creare un link simbolico sotto la radice come:
18
{{{
19
ln -s /var/lib/vz /vz
20
}}}
21
22 2 Amministratore Truelite
Una volta installato il tutto occorrerà riavviare la macchina per utilizzare il nuovo server, eseguito il riavvio si potrà verificare il funzionamento del sistema verificando che in processo di controllo sia attivo:
23
{{{
24
# ps aux| grep vz
25
root      2488  0.0  0.0      0     0 ?        S    15:20   0:00 [vzmond]
26
}}}
27
e controllando lo stato con:
28
{{{
29
# vzlist -a
30
      VEID      NPROC STATUS  IP_ADDR         HOSTNAME                        
31 1 Amministratore Truelite
}}}
32 3 Amministratore Truelite
che sarà vuoto non essendo stato creato alcun VE.
33 1 Amministratore Truelite
34 7 Amministratore Truelite
== Creazione di un Virtual Environment da un template ==
35
36 9 Amministratore Truelite
Il passo successivo è quello di installare un primo VE, per questo tornano estremamente utili i ''template'', degli scheletri di sistema da cui si può creare in maniera rapida e semplice un nuovo VE; si tratta in sostanza di archivi (in formato {{{.tar.gz}}}) che contengono l'immagine del filesystem di un intero sistema. Questi si possono creare come vedremo più avanti, o scaricare già pronti da 
37
[http://download.openvz.org/template/precreated/ questo sito]. Nel caso si usi un ''template'' giù pronto questo dovrà essere salvato nella directory {{{/var/lib/vz/template/cache}}}, ad esempio per una Debian si potrà fare:
38 4 Amministratore Truelite
{{{
39
cd /vz/template/cache
40
wget http://download.openvz.org/template/precreated/debian-5.0-x86.tar.gz
41
}}}
42 9 Amministratore Truelite
(nel caso si è scaricata è la versione per 686, si usi quella a 64 bit per macchine a 64 bit). 
43 1 Amministratore Truelite
44 9 Amministratore Truelite
Dopo di che la creazione di un VE da un ''template'' può essere eseguita semplicemente con il comando {{{vzctl create}}}, questo in genere fa riferimento al file di configurazione generale di OpenVZ {{{/etc/vz/vz.conf}}} in cui viene definita la variabile (nel caso di Lenny è {{{DEF_OSTEMPLATE="debian"}}}) che indica il ''template'' di default da usare se non se ne indica esplicitamente uno per nome. Si tenga presente però che questo fa riferimento ad un file con lo stesso nome sotto {{{/vz/template/cache}}} per cui se si è scaricato il file precedente occorrerà creare un link simbolico con:
45 5 Amministratore Truelite
{{{
46
ln -s debian-5.0-x86.tar.gz debian.tar.gz
47
}}}
48
49 9 Amministratore Truelite
A questo punto si potrà creare un nuovo VE indicando semplicemente un numero intero (quello che in gergo viene chiamato '''VEID''') che serve ad identificare univocamente ciascuna macchina; nel nostro caso questo può essere creato semplicemente con il comando:
50 5 Amministratore Truelite
{{{
51
# vzctl create 100 
52
Creating VE private area (debian)
53
Performing postcreate actions
54
VE private area was created
55
}}}
56
che usa il VEID 100; una volta creato lo potrà far partire con il comando:
57
{{{
58
# vzctl start 100 
59
Starting VE ...
60
VE is mounted
61
Setting CPU units: 1000
62
Configure meminfo: 65536
63
VE start in progress...
64
}}}
65
verificarne l'attività con:
66
{{{
67
# vzlist -a
68
      VEID      NPROC STATUS  IP_ADDR         HOSTNAME                        
69
       100          8 running -               -                               
70
}}}
71
entrarci con:
72
{{{
73
# vzctl enter 100
74
entered into VE 100
75
vzserver:/#
76
}}}
77
fermarlo con:
78
{{{
79
# vzctl stop 100
80
Stopping VE ...
81
VE was stopped
82 1 Amministratore Truelite
VE is unmounted
83
}}}
84
85 9 Amministratore Truelite
Come si può notare dalla lista precedente in questo modo però il nostro VE non è dotato né di un indirizzo IP né di un nome; una serie di proprietà delle singole macchine possono infatti essere specificate sia in sede di creazione con {{{vzctl create}}}, che successivamente con il comando {{{vzctl set}}}, passando a questi comandi delle opportune opzioni. Ad esempio per impostare un hostname si può creare un VE direttamente con il comando:
86 1 Amministratore Truelite
{{{
87 9 Amministratore Truelite
vzctl create 100  --hostname testlenny
88 1 Amministratore Truelite
}}}
89 9 Amministratore Truelite
oppure una volta creato senza nome lo si può impostare con:
90 1 Amministratore Truelite
{{{
91 9 Amministratore Truelite
vzctl set 100 --hostname testlenny --save
92
}}}
93 12 Amministratore Truelite
dove senza il {{{--save}}} il comando effettua una assegnazione temporanea (effettuabile solo a VE attivo), mentre con {{{--save}}} la configurazione viene registrata in maniera permanente e può essere fatta in qualunque momento. Effettuata questa configurazione la si potrà controllare con:
94
{{{
95
# vzlist -a
96
      VEID      NPROC STATUS  IP_ADDR         HOSTNAME                        
97
       100          5 running -               testlenny
98
}}}
99 1 Amministratore Truelite
100 12 Amministratore Truelite
101 9 Amministratore Truelite
== Configurazione della rete ==
102 1 Amministratore Truelite
103 20 Amministratore Truelite
Una delle caratteristiche più interessanti di OpenVZ (in particolare rispetto a Vserver) è quella di consentire una separazione netta della rete fra i vari VE. Il default è quello che fa ricorso ad una speciale interfaccia virtuale, {{{venet}}} che opera a livello di routing IP diretto. E' possibile anche usare una interfaccia virtuale ethernet,  {{{veth}}}, che realizza una comunicazione diretta fra interfacce ethernet, su cui torneremo più avanti.
104 1 Amministratore Truelite
105 20 Amministratore Truelite
=== Configurazione di rete con venet ===
106
107
La configurazione più comune è quella realizzata attraverso l'uso di una interfaccia virtuale {{{venet}}}, in questo caso la gestione degli indirizzi assegnati ai singoli VE è possibile solo dalla macchina ospite. Questo può comportare alcuni problemi nella fornitura di alcuni servizi (in particolare in questo l'interfaccia non è in grado di supportare pienamente IPv6) ma ha il grosso vantaggio di non consentire alle macchine virtuali di modificare i propri indirizzi IP o eseguire operazioni di basso livello sull'interfaccia, che in caso di cessione a terzi dell'amministrazione delle macchine virtuali sono un bonus di sicurezza. 
108
109
La configurazione della rete di un VE in questo caso viene effettuata attraverso il comando {{{vzctl set}}} che di default usa l'interfaccia {{{venet}}}; per assegnare un IP ad un VE è sufficiente eseguire il comando:
110 6 Amministratore Truelite
{{{
111 1 Amministratore Truelite
vzctl set 100 --ipadd 192.168.0.100  --save
112
}}}
113 12 Amministratore Truelite
da ripetere quante volte si vuole per assegnare ulteriori indirizzi che saranno aggiunti alla lista, questi potranno essere rimossi completamente con il comando: 
114 10 Amministratore Truelite
{{{
115
vzctl set 100 --ipdel all  --save
116
}}}
117
o singolarmente, specificando l'indirizzo IP al posto della parola chiave {{{all}}}.
118 1 Amministratore Truelite
119 10 Amministratore Truelite
L'utilizzo di questa impostazione ha due effetti, nel sistema ospite verrà creata, all'avvio di ciascun VE, una rotta statica per ciascuno degli IP ad esso assegnati, i quali a loro volta, all'interno del VE, verranno impostati sulle interfacce virtuali {{{venet0:0}}},  {{{venet0:1}}}, ecc. configurate in modalità punto-punto con se stesse. 
120 9 Amministratore Truelite
121 10 Amministratore Truelite
I meccanismo fa sì che pacchetti inviati dalla macchina ospite verso l'interfaccia {{{venet}}} vengano automaticamente instradati al VE che ha quell'indirizzo, mentre viceversa i pacchetti inviati dal VE verso quell'interfaccia emergono da questa sulla macchina ospite. L'interfaccia {{{venet}}} fa sostanza da router ma il meccanismo a prima vista risulta abbastanza strano in quanto nel passaggio da macchina ospite a VE non c'è nessun hop; inoltre se si controlla la tabella di instradamento dentro un container si troverà qualcosa del tipo:
122 1 Amministratore Truelite
{{{
123 9 Amministratore Truelite
# route -n
124
Kernel IP routing table
125
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
126 1 Amministratore Truelite
192.0.2.1       0.0.0.0         255.255.255.255 UH    0      0        0 venet0
127
0.0.0.0         192.0.2.1       0.0.0.0         UG    0      0        0 venet0
128 9 Amministratore Truelite
}}}
129 1 Amministratore Truelite
che fa riferimento ad un indirizzo che non è assegnato a nessuna interfaccia, si tratta infatti dell'impostazione di un default gateway fittizio (uno qualunque facente riferimento all'interfaccia {{{venet0}}} funzionerebbe lo stesso), che serve solo a dirigere i pacchetti in uscita verso gli altri indirizzi all'interfaccia {{{venet0}}}, da cui emergeranno nella macchina ospite.
130
131 17 Amministratore Truelite
Questo meccanismo piuttosto complesso ha però il risultato di rendere ogni VE del tutto indipendente dagli altri, e consente di impostare delle regole di firewall all'interno dei singoli VE senza dover essere costretti, come avveniva con VServer, a gestire le regole esclusivamente a livello di sistema ospite. 
132 1 Amministratore Truelite
133 10 Amministratore Truelite
Una volta assegnato l'IP al nostro container il resto della configurazione deve essere effettuato sulla macchine ospite, che deve occuparsi di instradarlo correttamente verso internet, per questo una delle configurazioni essenziali è l'abilitazione del reinoltro dei pacchetti, da farsi manualmente con il comando:
134 1 Amministratore Truelite
{{{
135
echo 1 > /proc/sys/net/ipv4/ip_forward
136 10 Amministratore Truelite
}}}
137
e da impostare permanentemente inserendo in {{{/etc/sysctl.conf}}} la riga:
138
{{{
139
net.ipv4.ip_forward=1
140
}}}
141
142 17 Amministratore Truelite
Viene inoltre consigliato, quando si effettua la configurazione di VE con IP pubblico proprio, di abilitare il proxy arp per l'interfaccia della macchina ospite dietro la quale operano, questo si fa manualmente con il comando:
143 16 Amministratore Truelite
{{{
144
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
145
}}}
146
e si imposta in modo permanentemente inserendo in {{{/etc/sysctl.conf}}} la riga:
147
{{{
148
net.ipv4.conf.eth0.proxy_arp=1
149
}}}
150
151 10 Amministratore Truelite
Il primo caso è quello in cui per i VE si utilizzano degli IP privati, in questo caso perché internet sia raggiungibile occorrerà effettuare un opportuno NAT degli stessi, per cui si dovrà impostare anche:
152
{{{
153 9 Amministratore Truelite
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
154
}}}
155
156 10 Amministratore Truelite
A parte la configurazione degli indirizzi e dell'instradamento, un'altra configurazione necessaria a consentire l'uso della rete ai singoli VE è quella del DNS, che può essere effettuata con il comando:
157 1 Amministratore Truelite
{{{
158
vzctl set 100 --nameserver IP.PUB.DEL.DNS --save
159
}}}
160
161 20 Amministratore Truelite
=== Configurazione di rete con veth ===
162
163
Come accennato questa modalità di gestione della rete è leggermente meno efficiente e più complessa rispetto alla precedente, ma consente di delegare al VE la gestione di una vera e propria interfaccia ethernet virtuale, sulla quale compiere tutte le operazioni volute. Inoltre in caso di macchine dotate di più interfacce di rete consente anche di associare un VE ad una interfaccia o all'altra, ottenendo una separazione delle rispettive reti.
164
165
(da finire)
166 9 Amministratore Truelite
167
== Configurazione delle proprietà di un VE ==
168 1 Amministratore Truelite
169 17 Amministratore Truelite
Una delle caratteristiche più interessanti di OpenVZ è quella di un controllo estremamente dettagliato sulle risorse che si possono assegnare ai vari VE. In particolare tutta una serie di risorse sono associate a dei ''bean counters'' che ne tracciano l'utilizzo, sui quali poi si possono imporre soft ed hard limit. Ciascuna di queste risorse è identificata da un nome, e se ne può anche controllare l'utilizzo, le impostazioni e l'eventuale superamento dei limiti nel file {{{/proc/user_beancounters}}}. 
170 15 Amministratore Truelite
171 17 Amministratore Truelite
Ad esempio se la RAM disponibile in un VE è insufficiente, e se ne vuole aumentare la disponibilità con un limite fra 512M e 1G si potrà utilizzare il comando:
172 15 Amministratore Truelite
{{{
173
vzctl set 100 --privvmpages 512M:1G --save
174
}}}
175
176
Oltre alle risorse associate ai  ''bean counters'' si possono impostare limiti anche su risorse generiche come lo spazio disco, se ad esempio si vuole impostare un limite sullo spazio disco totale si potrà usare il comando: 
177
{{{
178
vzctl set 100 --save --diskspace 10G
179
}}}
180
e dopo averlo utilizzato il VE vedrà il valore impostato come totale, anche in seguito all'esecuzione del comando {{{df}}}.
181
182
da finire
183 7 Amministratore Truelite
184
== Creazione manuale di un template ==
185
186 10 Amministratore Truelite
Nel caso si voglia creare un proprio ''template'' si potrà, nel caso di Debian, ricorrere a {{{deboostrap}}}, in questo caso il primo passo è installarlo nel sistema ospite con:
187 7 Amministratore Truelite
{{{
188
aptitude install deboostrap
189
}}}
190
poi si potrà creare un ambiente iniziale con:
191
{{{
192
debootstrap --arch amd64 lenny /var/lib/vz/private/100 http://ftp.it.debian.org/debian
193
}}} 
194 1 Amministratore Truelite
(si usi il valore di architettura adeguato alla propria macchina). Questo preparerà i file per un VE con id 100; una volta completato il comando occorrerà generare una opportuna configurazione per lo stesso con:
195 7 Amministratore Truelite
{{{
196
vzctl set 100 --applyconfig vps.basic --save
197
}}}
198 10 Amministratore Truelite
inoltre occorrerà aggiungere alla configurazione del VE la variabile {{{OSTEMPLATE}}} con:
199 1 Amministratore Truelite
{{{
200 7 Amministratore Truelite
echo 'OSTEMPLATE="debian"' >> /etc/vz/conf/100.conf
201
}}}
202 10 Amministratore Truelite
infine si potrà configurare la rete come visto in precedenza per poter operare all'interno dello stesso.
203 7 Amministratore Truelite
204 10 Amministratore Truelite
Prima di avviare il nuovo VE occorrerà però eseguire alcune correzioni per adattare quanto installato da {{{deboostrap}}} ad un ambiente che non corrisponde ad una vera macchina, in particolare si dovranno rimuovere le console virtuali da {{{/etc/inittab}}}, bloccare la scrittura sincrona sul syslog ed usare {{{/proc/mounts}}} al posto di {{{/etc/mtab}}}, e cancellare tutti gli pacchetti non necessari (come quanto relativo ad udev e a al kernel), questo si può ottenere con i comandi:
205 1 Amministratore Truelite
{{{
206 7 Amministratore Truelite
sed -i -e '/getty/d' /var/lib/vz/private/100/etc/inittab
207
sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /var/lib/vz/private/100/etc/*syslog.conf
208
rm -f /var/lib/vz/private/100/etc/mtab
209
ln -s /proc/mounts /var/lib/vz/private/100/etc/mtab
210 6 Amministratore Truelite
}}}
211 8 Amministratore Truelite
212
A questo punto si potrà far partire il nostro VE e completare le operazioni di aggiornamento e  pulizia dal suo interno, per questo si eseguano i comandi:
213
{{{
214
apt-get update
215
apt-get upgrade
216
apt-get clean
217
dpkg --purge module-init-tools
218 10 Amministratore Truelite
apt-get remove --purge XXX (lista di altra roba da completare)
219 8 Amministratore Truelite
update-rc.d -f klogd remove
220
}}}
221
e si rimuova tutto quello ritenuto non necessario. 
222
223 17 Amministratore Truelite
Una volta completata la pulizia all'interno si potrà uscire e passare alla creazione del ''template'', per questo però occorre prima rimuovere i dati di indirizzo e DNS inseriti per consentire al nostro VE di accedere ad internet, per questo si faccia:
224 8 Amministratore Truelite
{{{
225
vzctl stop 100
226
vzctl set 100 --ipdel all --save
227
echo > /vz/private/100/etc/resolv.conf
228
rm /vz/private/100/etc/hostname
229
}}}
230 10 Amministratore Truelite
e poi si potrò creare l'immagine del ''template'' con:
231 8 Amministratore Truelite
{{{
232
cd /vz/private/100/
233 14 Amministratore Truelite
tar --numeric-owner -zcf /vz/template/cache/debian-5.0-x86_64-minimal.tar.gz .
234 8 Amministratore Truelite
}}}
235
ed a questo punto una volta creato il link simbolico:
236
{{{
237 13 Amministratore Truelite
ln -sf debian-5.0-x86_64-minimal.tar.gz debian.tar.gz
238 8 Amministratore Truelite
}}}
239
si potrà creare un nuovo VE con:
240
{{{
241
vzctl create 101
242
}}}
243
e verificare che funziona con:
244
{{{
245
vzctl start 101 
246
vzctl enter 101 
247 1 Amministratore Truelite
}}}
248 18 Amministratore Truelite
249
== Dump e backup ==
250
251
Un'altro programma molto utile per la gestione dei VE è {{{vzdump}}}, il pacchetto Debian è disponibile solo da Squeeze, ma può essere facilmente installato (almeno fino alla versione 1.2.4-2) anche su Lenny.  Il comando consente di creare un dump di un VE, anche attivo, che può essere poi facilmente ripristinato con il comando  {{{vzrestore}}}. 
252
253 19 Amministratore Truelite
Esistono tre modalità diverse di eseguire il comando, ma quelle realmente significative sono due. La migliore è quella attivata con l'opzione  {{{--snapshot}}} ma richiede che i file siano stati installati su un volume logico e che sia disponibile LVM ed in tal caso il dump sarà fatto senza downtime. L'altra alternativa è usare {{{--suspend}}}, in tal caso verranno fatti due cicli di {{{rsync}}} sospendendo la macchina solo per il secondo ciclo, in modo da minimizzare il downtime. Questo secondo metodo ha il vantaggio che si può usare sempre, ma porta ad un limitato tempo di fermo per la macchina. 
254 18 Amministratore Truelite
255
Per eseguire un dump basta indicare il VEID del VE che si vuole salvare, non indicando nulla saranno salvati tutti quelli presenti. Ad esempio si potrà salvare la precedente macchina virtuale con:
256
{{{
257
vzdump --snapshot 101
258
}}}
259
e verranno creati un  {{{.tar}}} ed un  {{{.log}}} in  {{{/var/lib/vz/dump/}}}, con nomi nella forma:
260
{{{
261
vzdump-openvz-VEID-YYYY_MM_DD-HH_MM_SS
262
}}}