gblend-1
Accueil du site > Docs > Système > OpenVZ

OpenVZ

Publié le vendredi 26 décembre 2008, mis a jour le dimanche 28 décembre 2008, par Stephane Malinet

OpenVZ est une solution de virtualisation basée sur un patch du noyau.


Introduction

OpenVZ permet de faire tourner jusqu’à 100 machines virtuelles par machine physique.

Là où les autres solutions de virtualisation affichent une perte de performance d’environ 15 à 20% pour les machines virtuelles, OpenVZ n’en compte que 3 à 5%.

Un des inconvénients majeur par rapport à certains de ses concurrents, est, vu que la solution est basée sur une modification du système d’exploitation, de ne pouvoir faire tourner qu’un linux dans un linux et pas un windows dans un linux...

En revanche, elle permet la migration des machines virtuelles (appelées VE, Virtual Entity, ou CT, container) à chaud ou à froid d’un noeud physique (appelé HN, Hardware Node) à l’autre.

Installation du Hardware Node

openvz-sources

Après avoir testé les versions stables sur des architectures x86 et x86_64 du noyau openvz-sources, il s’est avéré qu’avec gcc-4.1.2 seule la version openvz-sources-2.6.24.006.5 fonctionne correctement.

Attention : Inutile d’éssayer avec >=gcc-4.2.

Commençons donc par démasquer ce paquet :


echo "sys-kernel/openvz-sources ~x86" >> /etc/portage/package.keywords
echo "sys-kernel/openvz-sources" >> /etc/portage/package.unmask

Ensuite installez-le :


emerge -av openvz-sources

vzctl

vzctl est l’utilitaire qui vous permet d’administrer les CTs.

Si vous utilisez >=baselayout-2 installez la version la plus récente de la l’arbre de portage :


echo "sys-cluster/vzctl ~x86" >> /etc/portage/package.keywords
echo "sys-cluster/vzctl" >> /etc/portage/package.unmask

emerge -av vzctl

Nous verrons par la suite sa configuration.

Configuration du Hardware Node

Le noyau

Une fois le paquet openvz-sources installé, passez à sa configuration


cd /usr/src/linux
make menuconfig

-*- Enable the block layer  --->
 IO Schedulers  --->
   <*> CFQ I/O scheduler
          Default I/O scheduler (CFQ)  --->
OpenVZ  --->
  [*] Virtual Environment support
 <M>   VE calls interface
 -M- VE network device
 -M- Virtual ethernet device
 -M- VE device
 [*] VE netfiltering
 <M> VE watchdog module
 <M> Checkpointing & restoring Virtual Environments
File systems  --->
 [*] Quota support
 [*]   Report quota messages through netlink interface
 <M>   Quota format v2 support
 <M> VPS filesystem
 <M> Virtuozzo Disk Quota support
 [ ]   Unloadable Virtuozzo Disk Quota module
 [*]   Per-user and per-group quota in Virtuozzo quota partitions

Compilez et installez votre noyau après l’avoir configuré pour votre matériel et rebootez.

vzctl

Donc vzctl est l’utilitaire qui permet l’administration des CTs : création, démarrage, arrêt, configuration et la migration.

Modifiez la ligne suivante dans le fichier /etc/vz/vz.conf :


DEF_OSTEMPLATE="gentoo"

Et lancez le service vz afin qu’il charge les modules nécéssaires au fonctionement d’openvz :


/etc/init.d/vz start
rc-update add vz default

Vérifiez la liste des modules :


lsmod

Module                  Size  Used by
vznetdev               16548  2
vzrst                 139792  0
vzcpt                 111904  0
tun                    12416  2 vzrst,vzcpt
vzmon                  32392  4 vznetdev,vzrst,vzcpt
simfs                   5068  1
vzdquota               38168  1 [permanent]
vzdev                   3204  3 vznetdev,vzmon,vzdquota

A ce niveau, notre Hardware Node est pret à recevoir ses premiers Container (CT).

Création d’un template Gentoo

Vous pouvez bien évidemment utiliser un template préparé OpenVZ que vous pourrez trouver sur www.funtoo.org mais il manquera dans tous ces derniers quelques paquets par exemple pour la configuration du réseau.

Nous allons donc voire comment préparer un template gentoo.

Télécharger un stage3 correspondant à votre architecture :


cd /vz/template/cache
wget http://www.funtoo.org/linux/pentium4/funtoo-pentium4-2008.12.19/stage3-pentium4-2008.12.19.tar.bz2

Décompressez votre archive :


mkdir gentoo
cd gentoo
tar xvjpf stage3-pentium4-2008.12.19.tar.bz2

Copiez votre fichier /etc/make.conf


cp /etc/make.conf /vz/template/cache/gentoo/etc/make.conf

ou éditez le fichier /vz/template/cache/gentoo/etc/make.conf.

Copiez votre fichier /etc/resolv.conf afin d’avoir la résolution DNS pour la préparation de notre template :


cp /etc/resolv.conf /vz/template/cache/gentoo/etc

Copiez l’arbre portage afin d’installer et de mettre à jour le template suivant les USE activés :


cp -a /usr/portage /vz/template/cache/gentoo/usr

Vous pouvez aussi le faire avec un point de montage :


mount -o bind /usr/portage /vz/template/cache/gentoo/usr/portage

Chrootez :


mount -t proc none /vz/template/cache/gentoo/proc
mount -o bind /dev /vz/template/cache/gentoo/dev
chroot /vz/template/cache/gentoo /bin/bash
env-update && source /etc/profile

Mettez à jour le système :


emerge -avuDN world

Installez iproute2 pour le réseau :


emerge -av iproute2

Créez l’interface qui servira aux futurs CTs :


cd /etc/init.d/
ln -s net.lo net.venet0

Les CTs n’ont besoin que de proc :


echo "proc /proc proc defaults 0 0" > /etc/fstab

Editez le fichier /etc/inittab et commentez les lignes suivantes :


# TERMINALS
#c1:12345:respawn:/sbin/agetty 38400 tty1 linux
#c2:2345:respawn:/sbin/agetty 38400 tty2 linux
#c3:2345:respawn:/sbin/agetty 38400 tty3 linux
#c4:2345:respawn:/sbin/agetty 38400 tty4 linux
#c5:2345:respawn:/sbin/agetty 38400 tty5 linux
#c6:2345:respawn:/sbin/agetty 38400 tty6 linux

Editez le fichier /etc/shadow :


root:!:10071:0:::::

Cela désactive le login root ce qui permettra sa ré activation, selon vos besoins, avec la commande suivante :


vzctl set CTID --userpasswd root:password

Supprimer les services inutiles :


rc-update del checkroot boot
rc-update del consolefont boot

Modifiez udev :

=baselayout-1.* :


vi /etc/conf.d/rc

RC_DEVICE_TARBALL="no"

=baselayout-2.* :


vi /etc/conf.d/udev

rc_device_tarball="NO"

Créez les devices qui seront nécéssaires à entrer dans un CT :


cd /lib
mknod udev/devices/ttyp0 c 3 0
mknod udev/devices/ptyp0 c 2 0
mknod udev/devices/ptmx c 5 2

A ce niveau le template est pret.


exit
umount /vz/template/cache/gentoo/proc /vz/template/cache/gentoo/dev /vz/template/cache/gentoo/usr/portage

Créons l’archive de notre template :

Attention : OpenVZ ne supporte pas le format bzip2 !


tar cvzpf ../gentoo.tar.gz .
cd ..
rm -rf gentoo stage3-pentium4-2008.12.19.tar.bz2

Création d’un CT

Pour créer un CT maintenant que notre template est pret cela est simple :


vzctl create 777 --ostemplate gentoo

Lancez le CT :


vzctl start 777

Et appréciez :


vzlist

     CTID      NPROC STATUS  IP_ADDR         HOSTNAME                        
      777         22 running 192.168.0.2     ct777

vzctl enter 777

Adminitration d’un CT

Pour les valeurs des ressources système des CT :


cat /proc/user_beancounters
Version: 2.5
      uid  resource           held    maxheld    barrier      limit    failcnt
     777:  kmemsize        1314354    2467837   11055923   11377049          0
           lockedpages           0          0        256        256          0
           privvmpages       58603      85448     131072     139264         36
           shmpages              1          2      21504      21504          0
           dummy                 0          0          0          0          0
           numproc              21         44        240        240          0
           physpages         29534      54552          0 2147483647          0
           vmguarpages           0          0      33792 2147483647          0
           oomguarpages      29534      54552      26112 2147483647          0
           numtcpsock            3          5        360        360          0
           numflock             35         50        188        206          0
           numpty                1          2         16         16          0
           numsiginfo            0          5        256        256          0
           tcpsndbuf         26784     180792    1720320    2703360          0
           tcprcvbuf         49152     805544    1720320    2703360          0
           othersockbuf     118296     253072    1126080    2097152          0
           dgramrcvbuf           0       8376     262144     262144          0
           numothersock         81         87        360        360          0
           dcachesize       181116     223704    3409920    3624960          0
           numfile             680       1086       9312       9312          0
           dummy                 0          0          0          0          0
           dummy                 0          0          0          0          0
           dummy                 0          0          0          0          0
           numiptent            10         10        128        128          0
       0:  kmemsize        3675498    4827817 2147483647 2147483647          0
           lockedpages           0          0 2147483647 2147483647          0
           privvmpages       11010      38156 2147483647 2147483647          0
           shmpages           2594       3602 2147483647 2147483647          0
           dummy                 0          0 2147483647 2147483647          0
           numproc              70         93 2147483647 2147483647          0
           physpages          5464      15614 2147483647 2147483647          0
           vmguarpages           0          0 2147483647 2147483647          0
           oomguarpages       5482      15647 2147483647 2147483647          0
           numtcpsock           18         22 2147483647 2147483647          0
           numflock              3          6 2147483647 2147483647          0
           numpty                5          6 2147483647 2147483647          0
           numsiginfo            0          5 2147483647 2147483647          0
           tcpsndbuf        212040     249984 2147483647 2147483647          0
           tcprcvbuf        388888     644952 2147483647 2147483647          0
           othersockbuf     138384     206184 2147483647 2147483647          0
           dgramrcvbuf           0       8376 2147483647 2147483647          0
           numothersock        110        126 2147483647 2147483647          0
           dcachesize       788352     829068 2147483647 2147483647          0
           numfile            1657       2240 2147483647 2147483647          0
           dummy                 0          0 2147483647 2147483647          0
           dummy                 0          0 2147483647 2147483647          0
           dummy                 0          0 2147483647 2147483647          0
           numiptent            24         24 2147483647 2147483647          0

La colonne failcnt permet de voir quelle valeur a été trop restrictive pour le bon fonctionement de votre CT.

Le hostname


vzctl set 777 --hostname ct777 --save

Le réseau


vzctl set 777 --ipadd 192.168.0.2 --nameserver 192.168.0.253 --searchdomain gentoofr.org --save

le CPU

La mesure est 100% par CPU, donc si vous avez deux CPU, vous avez 200%...

Limiter le CT à 15% maxi de l’utilisation du HN :


vzctl set 777 --cpulimit 15 --save

La mémoire

Modifier la mémoire allouée à un CT :


vzctl set 777 --privvmpages $((65536*2)):$((69632*2)) --save

AccessTime

Ne pas mettre à jour la date du dernier accés à l’inode (limite les I/O) :


vzctl set 777 --noatime yes --save

IO Priority

Changer les priorités des entrées/sorties :


vzctl set 777 --ioprio [0-7](default 4) --save

Le quota disque


vzquota stat 777

  resource          usage       softlimit      hardlimit    grace
 1k-blocks         931791         1048576        1153434  
    inodes         170026          200000         220000

le multiplier par deux :


vzctl set 777 --diskspace $((1048576*2)):$((1153434*2)) --save

Checkpointing

Le checkpointing est une extension d’OpenVZ permettant de sauver la totalité de l’état d’un CT en fonctionement afin de le restaurer sur le même ou un autre HN de manière transparante pour les applications et les connexions réseau.

Pendant la Migration le CT freeze le temps de synchroniser ses fichiers avec le nouvel HN, lorsque cela est terminé tout reprend normalement :


vzmigrate --online 192.168.0.6 777

Faire le checkpoint manuel :


vzctl chkpnt 777

Les processus courants du CT sont freezés et sauvegardés comme fichier /vz/dump/Dump.777

Si vous obtenez ce genre de méssage :


vzctl chkpnt 777
Setting up checkpoint...
       suspend...
       dump...
Can not dump container: Invalid argument
Error: iptables-save exited with 255
Checkpointing failed

1. Vous utilisez iptables dans votre CT mais vzctl cherche les binaires iptables-save et iptables-restore dans /sbin ou dans /usr/sbin : vérifiez leur présence ou créez les liens nécéssaires.

2. Si vous n’utilisez pas iptables dans dans le CT, créez les liens iptables-save et iptables-restore renvoyant un code de sortie 0 :


vzctl enter 777
ln -sf /bin/true /sbin/iptables-save
ln -sf /bin/true /sbin/iptables-restore

Pour le restaurer :


vzctl restore 777

Liens


Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | SPIP | squelette