In questa guida vi illustrerò come poter installare ed utilizzare OpenVZ, un sistema di virtualizzazione completamente opensource come branch gratuito di Virtuozzo.
Per il nostro test abbiamo utilizzato Centos 6.3 gratuitamente scaricabile dal sito di Centos, non tratteremo in questa sede l’installazione del sistema operativo in se in quanto abbastanza banale (windows 2 la vendetta).
Tale sistema non crea delle vere e proprioe macchine virtuali (come VmWare), ma piuttosto crea dei Virtual Private Server un qualcosa di simile ad un chroot per capirci.
Vediamo brevemente i pro e i contro di questo sistema
Pro
– Performance: da delle prove fatte pare che l’overhead rispetto al sistema fisico sia attorno all’1-3% quindi molto più performante rispetto a qualunque altro sistema
– Modifiche delle risorse on-the-fly
– Template già pronti, con pochi comandi è possile avere una macchina virtuale up and running
– Patchando il kernel del server fisico si patchano in un unico colpo tutti quelli delle macchine virtuali hostate
Contro
– Essendo il sistema legato al kernel sottostante non è possibile creare macchine virtuali windows o di altri sistemi operativi che non siano linux based
– Poca possibilità di configurazione, di fatto tutte le vm usano la stessa versione di kernel
– Il settaggio delle risorse può diventare piuttosto complicato in ambienti complessi
– Non puoi installare versioni a piacimento delle distro Linux se non quelle per cui hai il template
– Non c’è un interfaccia grafica decente per la gestione è tutto riga di comando
– L’utente non ha il controllo della macchina virtuale in caso di blocco del sistema
Iniziamo!
1. Installazione di OpenVZ
Innanzitutto aggiungiamo un paio di software che ci torneranno utili e i repository di OpenVZ
yum install wget nano
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
rpm --import http://download.openvz.org/RPM-GPG-Key-OpenVZ
Editiamo ora il file openvz.repo
nano openvz.repo
il file dovrebbe essere già corretto ma controllate di aver disabilitato [openvz-kernel-rhel5]
con l’opzione enabled a 0, e di aver invece abilitato [openvz-kernel-rhel6]
con enabled a 1, avendo il file come quello sotto riportato.
[...]
[openvz-kernel-rhel5]
name=OpenVZ RHEL5-based kernel
#baseurl=http://download.openvz.org/kernel/branches/rhel5-2.6.18/current/
mirrorlist=http://download.openvz.org/kernel/mirrors-rhel5-2.6.18
enabled=0
gpgcheck=1
gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ
[...]
[openvz-kernel-rhel6]
name=OpenVZ RHEL6-based kernel
#baseurl=http://download.openvz.org/kernel/branches/rhel6-2.6.32/current/
mirrorlist=http://download.openvz.org/kernel/mirrors-rhel6-2.6.32
enabled=1
gpgcheck=1
gpgkey=http://download.openvz.org/RPM-GPG-Key-OpenVZ
[...]
Installiamo ora il kernel con supporto OpenVZ con il comando
yum install vzkernel
ed installiamo gli OpenVZ Tools
yum install vzctl vzquota
Editiamo il file /etc/sysctl.conf abilitando un paio di cosette per il funzionamento del networking, assicuratevi che le voci indicate abbiano gli stessi valori
[...]
net.ipv4.ip_forward = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
[...]
Se avete dovuto effettuare delle modifiche a questo file allora è necessario eseguire il comando
sysctl -p
ATTENZIONE: se la macchina virtuale utilizzare un indirizzo IP di una subnet non appartenente alla macchina host sotto, allora dovrete apportare anche una modifica al file di configurazione /etc/vz/vz.conf
nano /etc/vz/vz.conf
e modificate la riga seguente
[...]
NEIGHBOUR_DEVS=all
[...]
Disabilitiamo SELinux
nano /etc/sysconfig/selinux
ed editiamo la riga SELINUX=disabled
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
Dobbiamo inoltre modificare le regole di iptables del nodo fisico
nano /etc/sysconfig/iptables
qua commentiamo le due righe
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
in modo da ottenere
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#-A INPUT -j REJECT --reject-with icmp-host-prohibited
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
A questo punto diamo un bel reboot al sistema
reboot
2. Utilizzare OpenVZ
Per prima cosa andiamo a questo indirizzo http://wiki.openvz.org/Download/template/precreated, qui abbiamo una lista di template di macchine virtuali già pronte solo da scaricare e mettere nell’apposita cartella. Nel nostro esempio vogliamo installare una debian 6.0 a 64 bit procediamo quindi con
cd /vz/template/cache
wget http://download.openvz.org/template/precreated/debian-6.0-x86_64.tar.gz
Creiamo ora la macchina virtuale con il comando
vzctl create 101 --ostemplate
debian-6.0-x86_64
--config basic
101 = ID univoco della macchina
debian-6.0-x86_64 = è il template che vogliamo usare che corrisponde al nome del file senza l’estensione .tar.gz
Se vogliamo fare in modo che la macchina venga avviata al boot del sistema allora dobbiamo lanciare il comando
vzctl set 101 --onboot yes --save
Configuriamo poi l’hostname e l’indirizzo ip della macchina
vzctl set 101 --hostname test.temporini.net --save
vzctl set 101 --ipadd 192.168.0.200 --save
Assegnamo ora il numero dei socket e i nameserver da attribuire alla macchina
vzctl set 101 --numothersock 120 --save
vzctl set 101 --nameserver 8.8.8.8 --nameserver 8.8.4.4 --save
Per avviare la macchina procediamo con
vzctl start 101
settiamo la password di root
vzctl exec 101 passwd
A questo punto possiamo colelegarci alla macchina in due modi o tramite ssh oppure direttametne dalla shell con il comando
vzctl enter 101
per uscire basta un bel
exit
Per fermare la macchina virtuale basta un bel
vzctl stop 101
Per riavviarla
vzctl restart 101
Per eliminarla
vzctl destroy 101
Con il seguente comando invece vediamo quali sono le macchine virtuali in esecuzione
vzlist -a
[[email protected] cache]# vzlist -a
CTID NPROC STATUS IP_ADDR HOSTNAME
101 14 running 192.168.0.2001 test.temporini.net
[[email protected] cache]#
Per vedere le risorse allocate ad una VM
vzctl exec 101 cat /proc/user_beancounters
3. Modifiche on-the-fly alle risorse della macchina virtuale
Una delle comodità di questo sistema è il fatto di poter apportare delle modifiche hardware alle macchine virtuali senza bisogno di doverle spegnere o riavviare. Con il seguente comando
cid=101
vzctl set ${cid} --vmguarpages 256M --save
vzctl set ${cid} --oomguarpages 256M --save
vzctl set ${cid} --privvmpages 256M:348M --save
modifichiamo al volo la ram assegnata ad una macchina virtuale, assegnando 256MB di ram dedicati e 348MB a burts in caso di necessità nei momenti di massimo carico
Con quest’altro comando invece
cid=101
vzctl set ${cid} --diskspace 3G:4G --save
modifichiamo lo spazio assegnato ad una VM 3GB di disco statici e $G temporanei in caso di necessità
Con il parametro –save alla fine del comando la modifica viene fatta in realtime sulla macchina virtuale e viene scritta nel file di configurazione della VM, in modo da tenerlo memorizzato al prossimo riavvio.