KVM
| 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