Virtualisation avec KVM
VMware et Xen sont deux systèmes de virtualisation très répendus. En terme d'inconvénients, on peut citer le fait que :
- VMware soit propriétaire ;
- Xen ait un avenir incertain depuis son rachat par Citrix ; ce dernier peut également s'avérer contraignant (kernels xenifiés, etc.)
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.) ; KVM est actuellement en vogue dans le monde Linux et son principal intérêt est d'être pleinement intégré aux OS récents. C'est d'ailleurs 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) ; cependant, le monde Open Source connait de nombreux forks mais aussi des regroupements, et ses fonctionnalités ont été intégrées aux sources de Qemu ce qui simplifie les évolutions futures.
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 indépendantes.Pour un fonctionnement de type "hyperviseur", vous pouvez 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) ;
- Il est possible de travailler avec le switch virtuel vde dont les fonctionnalités sont pleinement supportées ;
- 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 peut planter lors du grub-install) et il est préférable de passer aux packages de Squeeze (le package "qemu-kvm" remplace "kvm").
Passons à l'installation sur une Dedibox :
- Connexion au serveur en SSH (X forwarding, compression, et l'utilisateur doit avoir des privilèges suffisants dans 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 :
$ sudo 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 service VNC activé, et le service SSH accessible sur le port 23/tcp 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 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
- Vous pouvez ensuite vous y connecter :
$ 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.
- Ligne de démarrage à ajouter 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
- 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 ne boot plus, vous pouvez également le restaurer depuis la 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
