LinuxOpenVZHowto » Cronologia » Versione 9
Amministratore Truelite, 10-11-2009 17: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 | 7 | Amministratore Truelite | == Installazione sistema ospite == |
10 | |||
11 | 3 | 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 di [http://linux-vserver.org/ linux-vserver], 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 | 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. |
||
94 | |||
95 | == Configurazione della rete == |
||
96 | |||
97 | 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}}}, ma è meno efficiente e più complesso. |
||
98 | |||
99 | La configurazione della rete 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: |
||
100 | {{{ |
||
101 | 6 | Amministratore Truelite | vzctl set 100 --ipadd 192.168.0.100 --save |
102 | 1 | Amministratore Truelite | }}} |
103 | 9 | Amministratore Truelite | (da ripetere quante volte si vuole per assegnare ulteriori indirizzi). |
104 | |||
105 | L'utilizzo di questo comando ha due effetti, nel sistema ospite viene creata, all'avvio di ciascun VE, una rotta statica per ciascuno degli IP ad esso assegnati, che a loro volta, all'interno del VE, vengono impostati sulle interfacce virtuali {{{venet0:0}}}, {{{venet0:1}}}, ecc. configurate in modalità punto-punto con se stesse. |
||
106 | |||
107 | I pacchetti inviati dalla macchina ospite verso l'interfaccia {{{venet}}} vengono 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}}} fai 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: |
||
108 | 1 | Amministratore Truelite | {{{ |
109 | 9 | Amministratore Truelite | # route -n |
110 | Kernel IP routing table |
||
111 | Destination Gateway Genmask Flags Metric Ref Use Iface |
||
112 | 192.0.2.1 0.0.0.0 255.255.255.255 UH 0 0 0 venet0 |
||
113 | 0.0.0.0 192.0.2.1 0.0.0.0 UG 0 0 0 venet0 |
||
114 | 7 | Amministratore Truelite | }}} |
115 | 9 | 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. |
116 | 1 | Amministratore Truelite | |
117 | 9 | 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. |
118 | 1 | Amministratore Truelite | |
119 | |||
120 | |||
121 | 9 | Amministratore Truelite | |
122 | 1 | Amministratore Truelite | Se l'IP assegnato alla macchina interna è pubblico i due passi illustrati sono sufficienti, altrimenti occorrerà anche eseguire le ulteriori configurazioni: |
123 | {{{ |
||
124 | echo 1 > /proc/sys/net/ipv4/ip_forward |
||
125 | iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
||
126 | }}} |
||
127 | |||
128 | 7 | Amministratore Truelite | |
129 | 9 | Amministratore Truelite | |
130 | |||
131 | |||
132 | ad esempio per creare una macchina con IP {{{192.168.0.101}}} e nome {{{prova101}}} si potrà fare: |
||
133 | mentre per impostare nome ed IP alla macchina creata in precedenza sarà sufficiente: |
||
134 | ed inoltre si dovrà importare anche un DNS con: |
||
135 | |||
136 | |||
137 | {{{ |
||
138 | vzctl set 100 --nameserver IP.PUB.DEL.DNS --save |
||
139 | }}} |
||
140 | |||
141 | |||
142 | 7 | Amministratore Truelite | incompleto... |
143 | 9 | Amministratore Truelite | |
144 | == Configurazione delle proprietà di un VE == |
||
145 | |||
146 | 7 | Amministratore Truelite | |
147 | |||
148 | == Creazione manuale di un template == |
||
149 | |||
150 | Nel caso si voglia creare un template si potrò, nel caso di Debian, ricorrere a {{{deboostrap}}}, in questo caso il primo passo è installarlo nel sistema ospite con: |
||
151 | {{{ |
||
152 | aptitude install deboostrap |
||
153 | }}} |
||
154 | poi si potrà creare un ambiente iniziale con: |
||
155 | {{{ |
||
156 | debootstrap --arch amd64 lenny /var/lib/vz/private/100 http://ftp.it.debian.org/debian |
||
157 | }}} |
||
158 | (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: |
||
159 | {{{ |
||
160 | vzctl set 100 --applyconfig vps.basic --save |
||
161 | }}} |
||
162 | inoltre occorrerà aggiungere la variabile {{{OSTEMPLATE}}} con: |
||
163 | {{{ |
||
164 | echo 'OSTEMPLATE="debian"' >> /etc/vz/conf/100.conf |
||
165 | }}} |
||
166 | infine si potrà configurare la rete come visto al punto precedente. |
||
167 | |||
168 | Prima di avviare il nuovo VE occorrerà però eseguire alcune correzioni per 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 |
||
169 | }}}, questo si può ottenere con i comandi: |
||
170 | {{{ |
||
171 | sed -i -e '/getty/d' /var/lib/vz/private/100/etc/inittab |
||
172 | sed -i -e 's@\([[:space:]]\)\(/var/log/\)@\1-\2@' /var/lib/vz/private/100/etc/*syslog.conf |
||
173 | rm -f /var/lib/vz/private/100/etc/mtab |
||
174 | ln -s /proc/mounts /var/lib/vz/private/100/etc/mtab |
||
175 | 6 | Amministratore Truelite | }}} |
176 | 8 | Amministratore Truelite | |
177 | 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: |
||
178 | {{{ |
||
179 | apt-get update |
||
180 | apt-get upgrade |
||
181 | apt-get clean |
||
182 | dpkg --purge module-init-tools |
||
183 | update-rc.d -f klogd remove |
||
184 | }}} |
||
185 | e si rimuova tutto quello ritenuto non necessario. |
||
186 | |||
187 | Una volta completata la puliza all'interno si potrà uscire e passare alla creazione del template, per questo però occorre prima rimuovere i dati inseriti per consentire al nostro VE di accedere ad internet, per questo si faccia: |
||
188 | {{{ |
||
189 | vzctl stop 100 |
||
190 | vzctl set 100 --ipdel all --save |
||
191 | echo > /vz/private/100/etc/resolv.conf |
||
192 | rm /vz/private/100/etc/hostname |
||
193 | }}} |
||
194 | e poi si potrò creare l'immagine del template con: |
||
195 | {{{ |
||
196 | cd /vz/private/100/ |
||
197 | tar --numeric-owner -zcf /vz/template/cache/debian-4.0-i386-minimal.tar.gz . |
||
198 | }}} |
||
199 | ed a questo punto una volta creato il link simbolico: |
||
200 | {{{ |
||
201 | ln -sf debian-4.0-x86_64-minimal.tar.gz debian.tar.gz |
||
202 | }}} |
||
203 | si potrà creare un nuovo VE con: |
||
204 | {{{ |
||
205 | vzctl create 101 |
||
206 | }}} |
||
207 | e verificare che funziona con: |
||
208 | {{{ |
||
209 | vzctl start 101 |
||
210 | vzctl enter 101 |
||
211 | }}} |