Virtualisation avec KVM
VMware est un système de virtualisation éprouvé qui répond aux attentes des professionnels de l'informatique, et plus spécifiquement de l'hébergement, et un autre acteur incontournable est Xen bien qu'il soit assez contraignant (kernels Xenifiés, etc.) et que son avenir soit un peu incertain (depuis son rachat par Citrix).
Bon nombre de technologies alternatives existent (Hyper-V, OpenVZ, etc.) bien que se plaçant à des niveaux différents (virtualisation, para-virtualisation, simple système de conteneurs, etc.) ; on trouve notamment KVM, en vogue dans le monde Linux, et dont l'intérêt majeur est d'être pleinement intégré aux OS récents. C'est sur ce dernier que s'appuie Redhat Deltacloud.
KVM (pour "Kernel Based Virtual Machine") est initialement un dérivé de Qemu (le bien connu système d'émulation) apportant des fonctionnalités de virtualisation ; le monde Open Source connait de nombreux forks mais aussi des regroupements, et ces fonctionnalités ont été intégrées aux sources de Qemu, ce qui simplifiera les évolutions.
Pour les habitués de VMware ou de Xen, notons au passage que KVM n'est pas un hyperviseur ; il s'agit d'une suite d'outils permettant de créer et d'administrer des machines virtuelles sans lien les unes avec les autres, si ce n'est qu'elles fonctionnement au sein de systèmes partagés comme le scheduler du noyau ; pour un fonctionnement avec hyperviseur, on peut utiliser des systèmes comme l'API libvirt.
Voici quelques informations minimales au sujet de cette solution.
KVM dispose d'une ensemble de services réseau intégrés au mode utilisateur (comme un serveur DHCP), notons que :
- le réseau par défaut est 10.0.2.0/8 ;
- la passerelle est en 10.0.2.2 ;
- le serveur de noms est en 10.0.2.3 ;
- le serveur SMB est en 10.0.2.4 ;
- les machines virtuelles sont adressés à partir de 10.0.2.15.
Notons également que plusieurs outils d'administration existent (voir la liste complète), qu'il est possible de travailler avec le switch virtuel vde dont les fonctionnalités sont pleinement supportées, et que LVM peut représenter un bon complément dans certains cas.
Enfin, notons que la version intégrée à Debian Lenny peut poser quelques problèmes (par exemple, l'installation d'une vm s'arrêtait pour ma part à la dernière étape, soit à l'exécution de grub-install) et il est préférable de passer aux packages de Squeeze (le package "qemu-kvm" remplace par la même occasion "kvm").
Passons à l'installation (réalisée pour l'occasion sur une Dedibox).
- Connexion au serveur en SSH (X forwarding + compression), en vérifiant au préalable que votre USER ait des privilèges suffisants au niveau de sudo) :
$ ssh -XC USER@VOTRE_SERVEUR
- Ajout dans /etc/apt/sources.list de :
# squeeze
deb http://ftp.fr.debian.org/debian/ squeeze main contrib non-free
deb-src http://ftp.fr.debian.org/debian/ squeeze main contrib non-free# squeeze security
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb-src http://security.debian.org/ squeeze/updates main contrib non-free
- Dans /etc/apt/preferences :
Package: qemu-kvm
Pin: release a=testing
Pin-Priority: 999Package: *
Pin: release a=stable
Pin-Priority: 500Package: *
Pin: release a=lenny-backports
Pin-Priority: 400Package: *
Pin: release a=testing
Pin-Priority: 200
- Puis :
# aptitude install bridge-utils qemu-kvm
- Vérification de la présence des modules :
$ lsmod|grep kvm
kvm_intel 37600 0
kvm 213196 1 kvm_intel
- Téléchargement d'un media d'installation de Debian Lenny 64 :
$ mkdir installs && cd installs
$ wget http://cdimage.debian.org/debian-cd/5.0.5/amd64/iso-cd/debian-505-amd64-netinst.iso
- Création d'un disque virtuel de 30Go, au format qcow2 :
$ sudo kvm-img create -f qcow2 /home/vms/srv01-vm01.qcow 30G
- Le format qcow2 est nécessaire aux fonctionnalités de type snapshot. Si vous ne choisissez pas le format qcow2, le disque virtuel sera créé au format raw. Pour convertir un tel disque ou un disque au format qcow au format qcow2, vous pouvez utiliser la commande (comptez 15 minutes pour un disque de 30 Go) :
$ qemu-img info /home/vms/srv01-vm01.qcow
image: /home/vms/srv01-vm01.qcow
file format: qcow
virtual size: 30G (32212254720 bytes)
disk size: 2.0G
cluster_size: 4096
$ kvm-img convert -O qcow2 /home/vms/srv01-vm01.qcow /home/vms/srv01-vm01.qcow2
- Lancement de l'installation :
$ sudo kvm -no-kvm -k fr -hda /home/vms/srv01-vm01.qcow2 -cdrom ~/installs/debian-504-amd64-netinst.iso -boot d
- Lancement de la vm (avec 1 vcpu, 128 Mo de RAM, un serveur VNC activé, et le service SSH accessible sur le port 23 via l'adresse IP du serveur) :
$ sudo kvm -no-kvm -k fr -hda /home/vms/srv01-vm01.qcow2 -redir tcp:23::22 -daemonize -vnc localhost:0
- Lancement de la vm, cette fois-ci avec 2 vcpus et 256Mo de RAM :
$ sudo kvm -no-kvm -k fr -hda /home/vms/srv01-vm01.qcow2 -redir tcp:23::22 -daemonize -vnc localhost:0 -smp 2 -m 256
- Après avoir installé un client VNC sur votre poste de travail (par exemple via le package xtightvncviewer sous Ubuntu), vous pouvez vous connectez à la vm :
$ vncviewer -via VOTRE_SERVEUR localhost:0
- Il est alors possible de switcher avec control+alt+1/2/3 entre la console de la vm, le moniteur Qemu, et le port série de la vm.
- Démarrage auto dans /etc/rc.local :
+ /usr/bin/kvm -no-kvm -k fr -hda /home/vms/srv01-vm01.qcow2 -redir tcp:23::22 -daemonize -vnc localhost:0
+
exit 0
- Pour créer un snapshot dans le moniteur Qemu, vous pouvez exécuter :
(qemu) savevm snap1
- Pour visionner vos snapshots :
(qemu) info snapshots
- Pour le restaurer en temps réel, depuis le moniteur Qemu :
(qemu) loadvm snap1
- Si votre vm n'est pas up et ne démarre plus, vous pouvez également le restaurer en ligne de commande :
$ sudo kvm -no-kvm -k fr -hda /home/vms/srv01-vm01.qcow2 -redir tcp:23::22 -daemonize -vnc localhost:0 -loadvm snap1
