09/03/2010

OpenVZ : virtualisation légère, performante et amusante

OpenVZ est un système de virtualisation particulier. Il permet de faire tourner de multiples machines virtuelles partageant un seul kernel patché spécialement pour l’occasion. Cette techniques est donc limités à des machines (hôte ou invité) tournant sous linux. En contrepartie les performances sont particulièrement élevés. Il est également très aisé de modifier les particularités physiques des machines virtuelles sans les redémarrer. Cette technique est souvent employée chez les hébergeurs pour les offres « VPS ».

En pratique, c’est utile à des fins de sécurité. On essaie de mettre un seul serveur par VPS (serveur web sur un VPS, MySQL sur un autre, mail encore sur un autre …). Si l’un des serveurs possède une faille de sécurité, les autres serveurs ne pourront alors pas être impactés. Il y a également la facilité à backuper une machine virtuelle et donc au besoin de la dupliquer ou la déplacer. Cependant, on ne peut pas faire de migration à chaud comme certains de ses concurrents.

La création d’une machine ne prend guère plus d’une minute sur une machine correcte, ce qui permet de s’en servir comme d’un moyen de tester des logiciels sans encombrer votre distro. Qui plus est, le lancement d’une machine est quasi instantané, ce qui peut parfois sauver des manchots…

Installation de la bête

Le kernel

Cette partie dépend pas mal de la distro. J’aborderai ici la méthode pour Gentoo, à vous de l’adapter à votre distro.

On commence par installer les source du kernel patché qu’il faudra compiler :

USE="symlink" emerge -av openvz-sources

Il faut ensuite adapter la config du kernel :
Rendez-vous dans ///usr/src/linux//

Ensuite, lancez:

make menuconfig

Vérifiez que tout en haut il s’affiche bien le nom du kernel openvz : .config – Linux Kernel v2.6.27-openvz-briullov.1-r2 Configuration

Dans OpenVZ cochez tout (personnellement je préfère mettre en module le plus possible car je ne l’utilise pas tout le temps).
Puis allez dans Filesystems là vous aurez VPS Filesystems et Virtuozzo Disk Quota support, à ajouter également.

Maintenant enregistrez la config puis compilez votre tout nouveau kernel patché avant de faire une pause IRC :

make
make modules
make modules install

Mettez votre kernel au chaud et préparez le reboot :

cp /usr/src/linux/arch/x86/boot/bzImage /boot/kernel_vz

Ajoutez ces lignes en adaptant à votre cas dans /boot/grub/menu.lst :

title=Gentoo OpenVZ
root (hd0,0)
kernel /boot/kernel_vz root=/dev/sde1

Si vous avez suivit ces instructions sans virer ce qu’il y avait avant, vous ne devriez pas foirer votre machine : l’ancien kernel est toujours présent et le grub possède juste des lignes en plus. Donc maintenant faut tester avec un reboot en choisissant la nouvelle entrée du grub.

Si vous parvenez à reboot alors vous venez de faire le plus dur !
Un petit uname -r peut confirmer que vous tournez sur le noyau modifié.
Passons dès maintenant à la suite.

Les outils

OpenVZ se pilote avec la commande vzctl donc installons la :

emerge -av vzctl

Maintenant vous avez le kernel, les outils, il ne manque plus que les templates qui sont en faites les distros que vous pourrez monter en quelques secondes.
Vous pouvez les créer vous même mais généralement vous trouverez chaussure à votre pied sur le site officiel qui propose déjà une petite collection de templates pré-créés.

http://download.openvz.org/template/precreated/

Vous devrez les télécharger dans le dossier /vz/template/cache.

Prise en main du monstre

Ça y est : c’est tout bien installé et ça ne demande plus qu’à tourner.

/etc/init.d/vz start

Le script de démarrage fonctionne à merveille puisqu’il charge bien les modules (et les décharge en cas d’arrêt).
Pour faire en sorte de le lancer au démarrage de la machine :

rc-update add vz default

Création d’une machine

OpenVZ a pour objectif de faire tourner de nombreuses machines virtuelles simultanément. Elles sont numérotées (en commençant à 101). Ce numéro se nomme CTID. Imaginons que vous ayez un template debian-5.0-x86:

vzctl create $CTID$ --ostemplate debian-5.0-x86

Pendant quelques secondes ça mouline et vous pond une ptite Lenny des familles.

Configurons la pour qu’elle puisse rejoindre notre réseau :

vzctl set $CTID$ --hostname lennounette --ipadd a.b.c.d --nameserver a.b.c.d --diskspace 2G:3G --cpulimit 25 --save

Là je lui attribut un petit nom, une IP, un DNS, un quota de disque dur ainsi qu’un quota d’utilisation du processeur.

Bon c’est bien joli mais maintenant faut la faire tourner histoire de voir ce qu’on peut en tirer :

vzctl start $CTID$

Et bha voilà elle est là … « Up & Running ».

Entrer et interagir avec une machine

Pour aller utiliser une machine rien de plus simple :

vzctl enter $CTID$

Sachez également que les templates pré-créés sur le site officiel possèdent toute un serveur SSH qui tourne afin de vous faciliter la tâche.

Il est possible d’exécuter des commandes dans une machine sans y rentrer :

vzctl exec $CTID$ rm -rf /

Configurer un peu plus la bestiole

Il est possible de modifier la machine invitée pendant qu’elle tourne afin de lui ajouter de la ram, augmenter son quota d’espace disque ou bien restreindre son utilisation max de cpu. Pour cela vous devrez faire appel encore une fois à vzctl.

Modifier le bridage CPU

Il est donc possible de brider le pourcentage de processeur qu’une machine virtuelle peut utiliser afin d’éviter qu’une machine se goinfre et lèse le reste. Pour cela :

vzctl set $CTID$ --cpulimit 10 --save

En sachant que chaque processeur représente 100%, si vous possédez une machine quadcore, vous pouvez jouer de 0 à 400%.
Vous constaterez que la modification est prise en compte immédiatement.

Modifier le quota de disque dur

Attribuons plus d’espace à une machine :

vzctl set $CTID$ --disklimit 10G:12G --save

Modifier la quantité de RAM

C’est la commande la plus complexe :

vzctl set $CTID$ --vmguarpages $((512 * 512)) --save
vzctl set $CTID$ --privvmpages $((512 * 1024)) --save

Là on passe à 512 Mo de ram avec possibilité de monter en pic à 1024.

vzctl set $CTID$ --vmguarpages $((256 * 256)) --save
vzctl set $CTID$ --privvmpages $((256 * 512)) --save

Là on passe à 256 avec possibilité de monter en pic à 512.
Vous voyez le principe …

Les paramètres réseaux

vctl --set $CTID$ --ipadd a.b.c.d --hostname monhost --nameserver b.c.d.e --searchdomain mon_domaine --mac 00:11:22:33:44:55 --save

Le nom des paramètres est assez explicite.

Créer ou modifier le mot de passe d’un utilisateur

Il est possible de modifier le mot de passe d’un utilisateur (pratique en cas de boulette pour rester propre). Si l’utilisateur n’existe pas, il sera créé dans la foulée.

vzctl set $CTID$ --userpasswd login:motdepasse

Tout le reste

man vzctl

Lancer une machine au boot

Il faut avoir lancé OpenVZ au boot. Il faut ensuite :

vzctl set $CTID$ --onboot yes --save

Configurer un peu tout

Il est possible et plus pratique de modifier la configuration directement dans le fichier de conf de la machine dans le fichier /etc/vz/conf/$CTID$.conf

Manipulons le bouzin

Voici à peu près tout ce que l’on peut faire.

  • Créer une machine avec create
  • Démarrer une machine avec start
  • Stopper une machine avec stop
  • Rentrer dans une machine avec enter
  • Supprimmer une machine avec destroy

Pour plus de commandes :

man vzctl

Oui mais après ?

Ça y est vous savez créer vos machines en moins de trois minutes et gérer leur ressources comme un héros des temps modernes. Mais que faire de ce petit monde ?
Comme expliqué plus haut la virtualisation à pour but de fiabiliser une infrastructure. On peut déplacer une machine virtuelle l’une machine physique à une autre, on isole les différents serveurs publiques afin de limiter l’impact des failles de sécurité …
Il vous faut donc expérimenter ces différentes tâches afin de pouvoir parer l’imprévu. Replancher la gestion de son petit script iptables pour adapter son réseau à ce nouveau fonctionnement.
Le chemin est tout tracé…

  1. 09/03/2010 à 16:32 | #1

    Pour faire des backups et des restaurations aisées, il y’a vzdump qui fonctionne très bien et qui est rempli de pleins de surprises: http://wiki.openvz.org/Backup_of_a_running_container_with_vzdump

  2. 09/03/2010 à 16:38 | #2

    De même pour avoir une petite collection de template déjà prettes : http://wiki.openvz.org/Download/template/precreated

  3. 09/03/2010 à 18:46 | #3

    Les migrations à chaud :
    http://wiki.openvz.org/Checkpointing_and_live_migration

    (freeze de qq secondes, et ça repart comme si de rien n’était)

  4. 09/03/2010 à 21:30 | #4

    Vzdump fait tous cela… c’est un script …

  5. 10/03/2010 à 10:09 | #5

    Avec vserver, avec mes scripts home_made, je migre un vserver avec environ 10 secondes de coupures.

  6. JägerJunde
    13/03/2010 à 16:53 | #6

    10 secondes… c’est encore assez énorme, je trouve.

  7. 10/04/2010 à 16:10 | #7

    10 secondes ça peut passer pour un lag :)
    Mais un gros :p

  8. 19/01/2012 à 19:07 | #8

    vzctl exec $CTID$ rm -rf /

    Bouh le méchant lol ;)

    Thks pour ce petit article qui permet de se faire une idée en qq secondes.

  1. 18/03/2010 à 18:46 | #1