KVM

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Hyperviseur de type 1 (bare-metal)
Base Module noyau Linux + QEMU
Composants clés /dev/kvm, QEMU, libvirt, virt-manager, virt-install
Prérequis CPU Extensions de virtualisation matérielle (Intel VT-x / AMD-V)
CLI de gestion Virsh
Voir aussi Virsh · Proxmox · OVM · Xen

KVM (Kernel-based Virtual Machine) est un module du noyau Linux qui transforme le noyau en hyperviseur bare-metal. Il est associé à QEMU pour l'émulation matérielle complète (disque, réseau, carte graphique...) et à libvirt (piloté via Virsh ou virt-manager) pour la gestion du cycle de vie des machines virtuelles. Contrairement à une idée reçue, KVM n'est pas propre à RHEL/CentOS : il est disponible en natif sur la plupart des distributions Linux modernes (Debian, Ubuntu, Fedora...), même s'il est effectivement très présent dans l'écosystème Red Hat (RHEV, oVirt).

Installation

Sur une distribution de type Debian/Ubuntu :

sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
sudo virsh net-start default
sudo virsh net-autostart default

Créer une VM avec virt-install

Installation réseau (kickstart)

virt-install -n vm-test.exemple.org -r 768 \
  --disk path=/var/lib/libvirt/images/vm-test.exemple.org.img \
  -l ftp://192.168.122.1/pub/inst \
  -x "ks=ftp://192.168.122.1/pub/ks1.cfg"

(la source utilisait des guillemets typographiques « intelligents » autour de ks=..., ce qui casse la commande en shell — corrigé ici en guillemets droits.)

Import d'un disque existant (conversion depuis une OVA)

  • Extraire le fichier vmdk de l'OVA :
tar xf appliance.ova
  • Convertir le vmdk en qcow2 :
sudo qemu-img convert -O qcow2 disque.vmdk /var/lib/libvirt/images/myvm.qcow2
  • Créer la VM à partir du disque importé :
sudo virt-install \
  --name myvm \
  --memory 4096 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/myvm.qcow2,format=qcow2 \
  --os-variant debian12 \
  --network bridge=virbr0 \
  --graphics vnc,listen=0.0.0.0 \
  --import \
  --noautoconsole

Installation depuis un ISO

sudo wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.9.0-amd64-netinst.iso \
  -P /var/lib/libvirt/images/
sudo virt-install \
  --name myvm \
  --memory 4096 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/myvm.qcow2,size=20 \
  --os-variant debian12 \
  --network bridge=virbr0 \
  --graphics vnc,listen=0.0.0.0 \
  --cdrom /var/lib/libvirt/images/debian-12.9.0-amd64-netinst.iso

(la source indiquait --os-variant debian11 pour une installation Debian 12 — incohérence corrigée ici ; adapter à la version réellement installée, la liste des variantes disponibles s'obtient avec osinfo-query os.)

Cycle de vie de la VM

Voir Virsh pour la référence complète des commandes. Rappel des plus courantes :

sudo virsh list --all
sudo virsh start myvm
sudo virsh autostart myvm
sudo virsh autostart --disable myvm
sudo virsh dominfo myvm
sudo virsh shutdown myvm
sudo virsh destroy myvm
sudo virsh console myvm

Réseau

  • Voir l'état des réseaux virtuels et des interfaces d'une VM :
sudo virsh net-list --all
sudo virsh domiflist myvm
sudo virsh net-dhcp-leases default
  • Redémarrer le réseau virtuel par défaut :
sudo virsh net-destroy default
sudo virsh net-start default
  • Pour un accès SSH via un bridge physique, autoriser le forwarding IP :
sudo vi /etc/sysctl.conf
# net.ipv4.ip_forward=1
sudo sysctl -p
sudo iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

Accès console via VNC

Par défaut, --graphics vnc,listen=0.0.0.0 ouvre la console VNC sur toutes les interfaces sans authentification : à réserver à un réseau de confiance, ou à tunneliser en SSH.

  • Vérifier la configuration VNC actuelle et le port alloué :
sudo virsh dumpxml myvm | grep -i vnc
sudo virsh vncdisplay myvm
  • Modifier la configuration graphique (port fixe, écoute sur une IP donnée) :
sudo virsh edit myvm

(remplacer 203.0.113.10 par l'IP réelle de l'hôte ; éviter d'exposer VNC directement sur une IP publique sans restriction de pare-feu — préférer un tunnel SSH.)

  • Ouvrir le port côté pare-feu si nécessaire :
sudo iptables -A INPUT -p tcp --dport 5900 -j ACCEPT
sudo ufw allow 5900/tcp
  • Se connecter en tunnel SSH puis avec un client VNC (ex. TigerVNC) :
ssh -L 5900:localhost:5900 utilisateur@adresse_ip_serveur
sudo apt install tigervnc-viewer
vncviewer localhost:5900

Maintenance courante (MCO)

  • Agrandir le disque virtuel :
sudo qemu-img resize /var/lib/libvirt/images/myvm.qcow2 20G

(redimensionner ensuite le système de fichiers/la partition depuis l'intérieur de la VM.)

  • Supprimer une VM :
sudo virsh destroy myvm
sudo virsh undefine myvm
sudo rm /var/lib/libvirt/images/myvm.qcow2

Voir aussi

  • Virsh — référence complète des commandes de gestion
  • Proxmox — solution de virtualisation KVM packagée avec interface web
  • Xen — hyperviseur concurrent
  • OVM — hyperviseur Oracle basé sur Xen