Virtualiser avec KVM

KVM (Kernel-based Virtual Machine) apporte de meilleurs performances que Virtualbox du fait qu'il intervient un plus bas niveau.

Installation

 apt-get install qemu-kvm bridge-utils virt-manager libvirt-daemon-system

On autorise le droit d'utiliser KVM :

usermod -aG libvirt mon-utilisateur

Puis gérer les machines depuis l'interface graphique :

virt-manage &

Commandes disponible

Configuration matériel

  • Démarrer une VM avec une image qcow2 et 256Mo de RAM :
qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -boot d -m 256
  • Démarrer une VMs avec une ISO, 256M de RAMo et 2Go d'espace disque :
qemu-img create debian.img 2G
qemu -hda debian.img -cdrom debian-testing-amd64-netinst.iso -boot d -m 256

Convertion d'image

  • De qcow2 à raw :
qemu-img convert disk0.qcow2 -O raw disk0.raw
  • De raw à qcow2 :
qemu-img convert disk0.raw -O qcow2 disk.qcow2

Configuration réseau

  • Effectuer un prt fowarding sur le port 22 :
qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -boot d -m 256 -redir tcp:2222::22
  • Liéer une carte réseau d'une VMs(eth0) sur la machine hôte(tap0) :

Sur l'hôte :

sudo qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -boot d -m 256 -net nic -net tap,ifname=tap0
ip addr add 10.0.0.1/24 dev tap0
ifup tap0

Sur la VM :

ip addr add 10.0.0.2/24 dev eth0
ifup eth0

Manager KVM avec Virsh

Cet utilitaire permet de manager les machines virtuelles sur la machine en local et à distance. En oûtre, il remplace le logiciel virt-manager.

Pour s'y connecter à distance :

VIRSH_DEFAULT_CONNECT_URI=qemu+ssh://user@kvm-dev/system virsh

Ou pour exécuter des commandes à distances :

VIRSH_DEFAULT_CONNECT_URI=qemu+ssh://user@kvm-dev/system virsh <commandes>

Voici la liste d'exemple de commandes :

  • En ce qui concerne la machine en elle même :
virsh list --all
virsh start <vm>
virsh shutdown <vm>
virsh destroy <vm>
virsh edit <vm>
  • Modifier les caractéristique de la VM :
virsh edit <vm>
  • Supprimer une VM :
virsh --connect qemu+ssh://btatu@kvm-dev/system undefine --domain vm-a-clone
  • Cloner une machine :
virt-clone --connect qemu+ssh://user@kvm-dev/system -o vm1 -n vm-a-clone -f /home/user/clone.qcow2
  • Migrer une machine :
virsh --connect qemu+ssh://user@kvm-dev/system migrate --live vm-a-clone qemu+ssh://user@bruno-tatu.com/system
  • Pour le stockage :
virsh pool-list --all
virsh pool-list <pool>
  • Pour le réseau :
virsh iface-list -all
virsh net-list -all
virsh detail-interface

Astuces

La paravirtualisation

Pour améliorer les performances on peut utiliser des périférique virtuel basé sur virtio.

  • Déclarons une machine utilisant un disque et des cartes réseaux basé sur cette technique :
qemu-system-x86_64 -drive file=debian_squeeze_amd64_standard.qcow2,index=0,media=disk,if=virtio -boot d -m 256 -net tap -net nic,macaddr=00:16:35:AF:94:4B,model=virtio,name=ncard1