Aller au contenu
English
English
Virtualisation high

Formation KVM/libvirt : 20 leçons, projet final et IaC

24 min de lecture

Logo KVM

KVM (Kernel-based Virtual Machine) est l'hyperviseur de référence sous Linux. Intégré au noyau depuis 2007, il transforme n'importe quel serveur Linux en plateforme de virtualisation performante. Cette formation vous accompagne de la compréhension des concepts jusqu'à l'automatisation avec Terraform.

Contrairement à une documentation classique, cette formation suit une progression pédagogique : chaque module s'appuie sur les précédents, avec des prérequis explicites, des commandes testées et un quiz qui ferme chaque leçon.

Avant de vous lancer, ce tableau résume qui devrait suivre cette formation et dans quel cadre technique. Regardez surtout la ligne Version : les exemples sont testés sur libvirt 10.x tel que livré par Ubuntu 24.04, et fonctionnent sur les versions plus récentes. Si votre distribution en fournit une plus ancienne, la plupart des commandes restent valables, mais certaines options récentes de virsh peuvent manquer.

PublicAdministrateurs Linux, DevOps, SRE, développeurs
PrérequisBases Linux, terminal, notions réseau
Durée totale~14 heures (20 leçons, 4 modules)
Versionlibvirt 9.x+ (dernière 12.x ; exemples testés sur 10.x, Ubuntu 24.04)
ApprocheThéorie, pratique en ligne de commande, quiz par leçon, dépannage

À la fin de cette formation, vous serez capable de :

  • Comprendre l'architecture KVM/QEMU/libvirt et leur interaction
  • Installer KVM proprement sur Ubuntu, Debian, Rocky ou Fedora
  • Créer des VMs avec virsh, virt-install et virt-manager
  • Configurer le réseau (NAT par défaut, bridge pour accès externe)
  • Gérer le stockage (pools, volumes, formats QCOW2)
  • Automatiser l'initialisation avec Cloud-Init
  • Protéger vos VMs (snapshots vs backups, comprendre la différence)
  • Sauvegarder une machine allumée avec virsh backup-begin, puis la restaurer
  • Régler les performances : mode CPU, cache disque, IOThreads
  • Vérifier ce que le confinement libvirt bloque vraiment, et ce qu'il observe
  • Migrer une VM à chaud, et comprendre pourquoi le défaut l'en empêche
  • Administrer à distance via SSH ou TCP
  • Déployer en Infrastructure as Code avec Terraform
ÉlémentDétail
Prérequis matérielCPU avec virtualisation (Intel VT-x / AMD-V activé dans le BIOS)
Prérequis logicielUbuntu 24.04, Debian 12+ ou Rocky 9+ (bare-metal ou nested virt)
Prérequis connaissancesTerminal Linux de base, notions réseau (IP, DHCP, DNS)
PédagogieCommandes testées avec sorties réelles + validations
ValidationUn quiz de 6 questions par leçon, plus un examen final de 30 questions
Durée totale~14 heures, de 14 à 60 minutes par leçon

Cette formation a été testée sur plusieurs configurations. Voici nos recommandations :

Configuration recommandée pour des performances optimales :

ComposantMinimumRecommandé
CPU4 cœurs avec VT-x/AMD-V8+ cœurs
RAM8 Go16-32 Go
Stockage100 Go HDD256 Go SSD NVMe
OSUbuntu 24.04 / Debian 12 / Rocky 9Ubuntu 24.04 Server

Avantage : Performances natives, pas de limite de virtualisation.

Démonstration rapide : votre première VM en 5 commandes

Section intitulée « Démonstration rapide : votre première VM en 5 commandes »

Voici ce que vous saurez faire après les leçons Installation et Créer une VM :

Fenêtre de terminal
# 1. Vérifier que KVM est fonctionnel
$ virsh -c qemu:///system version
Using library: libvirt 10.0.0
Running hypervisor: QEMU 8.2.2
# 2. Lister les réseaux disponibles
$ virsh net-list
Name State Autostart Persistent
--------------------------------------------
default active yes yes
# 3. Créer une VM Ubuntu avec virt-install
$ virt-install --name test-vm --memory 2048 --vcpus 2 \
--disk size=20 --cdrom ubuntu-24.04-live-server.iso \
--network network=default --graphics vnc
Starting install...
# 4. Vérifier que la VM tourne
$ virsh list
Id Name State
-------------------------
1 test-vm running
# 5. Obtenir l'IP de la VM
$ virsh domifaddr test-vm
Name MAC address Protocol Address
-------------------------------------------------------
vnet0 52:54:00:ab:cd:ef ipv4 192.168.122.45/24

Cette séquence fonctionne sur toute installation libvirt correctement configurée. Les leçons du module 1 et du module 3 expliquent chaque étape en détail, y compris les messages d'erreur que vous verrez quand l'une d'elles échoue.

La formation se lit dans l'ordre, et elle est découpée en quatre modules pour que vous situiez votre progression et repériez où reprendre. Les deux premiers posent les bases et n'exigent aucun prérequis KVM ; la difficulté monte au module 3, où l'on manipule de vraies machines, et culmine au module 4 avec la migration et l'automatisation. Repérez la colonne Public : elle indique le niveau attendu pour aborder chaque module sereinement.

ModuleTitreLeçonsDuréePublic
1Comprendre KVM et installer l'hyperviseur21 h 15Débutant
2Préparer l'hôte : réseau et stockage52 h 18Débutant à intermédiaire
3Créer des VM et les exploiter au quotidien85 h 30Intermédiaire
4Automatiser avec Terraform et dépanner43 h 05Intermédiaire à avancé

Module 1 · Comprendre et installer

Le modèle mental, puis les paquets

Comment KVM, QEMU et libvirt collaborent, puis une installation propre sur Debian, Ubuntu ou RHEL, permissions comprises.

Commencer par les concepts →

Module 2 · Réseau et stockage

Ce que vos machines pourront joindre

Le choix entre NAT et bridge, trois recettes réseau courtes, puis les pools et les volumes.

Réseau NAT vs Bridge →

Module 3 · Créer et exploiter

Le cœur du parcours, huit leçons

Création, cloud-init, virsh, agent invité, performances, confinement, snapshots et sauvegarde à chaud, accès distant.

Créer une VM →

Module 4 · Automatiser et dépanner

Déplacer, décrire en code, diagnostiquer

Migration à chaud, passthrough PCI, provider Terraform libvirt et arbre de décision réseau.

Migration live →

Les durées ci-dessous viennent du parcours lui-même, pas d'une estimation : elles totalisent 12 h 08 d'enseignement, auxquelles s'ajoutent la présentation et l'examen final. Chaque module se referme sur les pièges qu'il désamorce, parce que c'est souvent eux que l'on vient chercher.

Module 1, comprendre KVM et installer l'hyperviseur

Section intitulée « Module 1, comprendre KVM et installer l'hyperviseur »

1 h 15, deux leçons. Ce module existe parce que la moitié des difficultés rencontrées ensuite viennent d'un modèle mental faux. Savoir qui fait quoi entre le module noyau, le processus QEMU et le démon libvirt rend lisibles toutes les commandes du reste du parcours.

LeçonDuréeCe que vous en retirez
Concepts fondamentaux25 minLa relation KVM, QEMU et libvirt, et pourquoi aucun des trois ne remplace les deux autres
Installation50 minLes paquets réels sur Debian/Ubuntu et sur RHEL/Rocky, le service, les permissions de groupe et polkit

Les pièges de ce module : croire qu'« installer KVM » se limite à charger un module du noyau ; taper qemu-kvm sur Debian ou Ubuntu, où ce n'est pas un paquet mais un nom virtuel ; se croire dans le groupe libvirt alors que la session n'a pas été rouverte ; chercher une panne logicielle quand c'est la virtualisation qui est désactivée dans le firmware.

2 h 18, cinq leçons. C'est le module qui décide de ce que vos machines pourront joindre, et celui où se concentrent les pannes. Les trois recettes sont des pas-à-pas courts, chacun répondant à une demande précise plutôt qu'à un tour d'horizon.

LeçonDuréeCe que vous en retirez
Réseau NAT vs Bridge50 minLe tableau de décision entre les deux modes, et l'IPv6 qui ne vient pas tout seul
Port forwarding NAT16 minExposer un service d'une VM en NAT, DNAT et FORWARD compris
Bridge ifupdown18 minMonter un bridge sur une machine sans NetworkManager
Réseau libvirt custom14 minUn réseau NAT sur mesure, isolé ou routé, avec sa plage DHCP
Stockage pools et volumes40 minLes pools, les volumes, et le choix entre QCOW2 et raw

Les pièges de ce module : une VM injoignable depuis le LAN parce que le NAT ne route pas vers elle ; une interface physique non libérée avant la création du bridge ; une règle DNAT posée sans le FORWARD qui va avec, qui produit un blocage silencieux et non un refus ; un pool inactif après redémarrage ; la taille annoncée à la création d'un volume, qui est une capacité maximale et non une réservation.

Module 3, créer des VM et les exploiter au quotidien

Section intitulée « Module 3, créer des VM et les exploiter au quotidien »

5 h 30, huit leçons. Le cœur du parcours. On y passe de la machine créée à la main à la machine provisionnée, interrogeable, réglée, confinée et sauvegardée. C'est aussi le module le plus long : prévoyez de le lire en plusieurs fois.

LeçonDuréeCe que vous en retirez
Créer une VM50 minvirt-install et virt-manager, et les options qui comptent vraiment
Cloud-init50 minUne VM utilisable dès le premier boot, clés SSH et paquets compris
Commandes virsh50 minLe cycle de vie complet d'un domaine, et la différence entre destroy et undefine
QEMU Guest Agent30 minCe que l'hôte sait d'une VM avec l'agent et sans lui, mesuré des deux côtés
Performances35 minLes modes CPU, les six modes de cache, l'attribut io et les IOThreads
Sécurité35 minLes couches de confinement réellement actives, Secure Boot, vTPM et nwfilter
Snapshots, clones et sauvegardes45 minLes trois techniques distinguées, et la sauvegarde à chaud par virsh backup-begin
Accès distant35 minqemu+ssh, l'activation par socket et le rôle de virtproxyd

Les pièges de ce module : un cloud-init qui ne rejoue pas parce qu'il retrouve le même instance-id ; un undefine qui laisse les disques sur l'hôte ; une console VNC sans mot de passe, d'où l'importance de listen=127.0.0.1 ; un profil AppArmor chargé mais en mode complain, donc qui n'interdit rien ; io='native' que QEMU refuse sans cache.direct=on ; et le plus coûteux de tous, confondre un snapshot avec une sauvegarde.

3 h 05, quatre leçons. Les sujets que l'on aborde une fois que les machines tournent : les déplacer, leur donner du matériel réel, les décrire en code, et savoir quoi regarder quand le réseau tombe.

LeçonDuréeCe que vous en retirez
Migration live35 minVérifier la compatibilité processeur avant de tenter, et traiter une migration qui ne converge pas
Passthrough PCI30 minSavoir si votre machine en est capable, lire les groupes IOMMU, déclarer le périphérique
KVM et Terraform60 minLe provider libvirt, les templates cloud-init et le déploiement de plusieurs machines
Dépannage réseau60 minL'arbre de décision, le test en escalier, et le conflit avec Docker

Les pièges de ce module : virt-install qui pose host-passthrough par défaut, ce qui rend vos machines non migrables sans que personne l'ait décidé ; un groupe IOMMU qui se donne entier et emporte le contrôleur USB avec la carte graphique ; une IP vide dans les sorties Terraform faute d'agent invité ; et le mythe selon lequel Docker désactiverait ip_forward, que le guide démonte mesure à l'appui.

1 h 10, deux leçons. La validation se fait dans cet ordre, et l'ordre compte : on prouve d'abord, on mesure ensuite.

Le projet final enchaîne toute la formation sur deux hôtes : une machine naît par cloud-init, sert une application, se fait sauvegarder à chaud, perd son disque, revient de sa sauvegarde, puis se déplace sans être arrêtée. Chaque étape rend un chiffre, et le vôtre se compare au nôtre.

L'examen final tire ensuite 30 questions dans les 19 leçons de cours, à proportion de ce que chaque module pèse dans une exploitation réelle. Chaque question renvoie vers la section précise du guide qui traite le point : un score devient ainsi une liste de choses à relire.

  • Installation : Ubuntu, Debian, Rocky, Fedora
  • Réseau : NAT (default), bridge, réseaux isolés, routés, IPv6
  • Stockage : Pools dir/LVM, volumes QCOW2/raw
  • Création VMs : virt-install, virt-manager, Cloud-Init
  • Opérations : virsh, QEMU Guest Agent, snapshots, clones
  • Sauvegarde : à chaud avec virsh backup-begin, complète et incrémentale
  • Performances : modes CPU, six modes de cache disque, io, IOThreads
  • Sécurité : sVirt, AppArmor et SELinux, seccomp, Secure Boot, vTPM, nwfilter
  • Migration : à chaud entre hôtes, compatibilité processeur, convergence
  • Passthrough PCI : diagnostic IOMMU, groupes, vfio-pci
  • Accès distant : SSH, activation par socket, virtproxyd, TCP en héritage
  • IaC : Terraform/OpenTofu avec provider libvirt 0.9.x
  • Troubleshooting : 10 erreurs fréquentes documentées

Tout au long de la formation, vous apprendrez à diagnostiquer et résoudre les problèmes courants :

#SymptômeCause probableOù c'est traité
1failed to connect to the hypervisorlibvirtd arrêté, ou groupe libvirt pas encore actifInstallation
2VM sans accès réseau externeRéseau NAT par défaut, qui isoleRéseau NAT vs Bridge
3Disque plein après snapshotsChaîne QCOW2 non consolidéeSnapshots et sauvegardes
4Cloud-init ne s'exécute pasInstance-id identique au boot précédentCloud-init
5IP vide dans les sorties TerraformQEMU Guest Agent absent de l'invitéQEMU Guest Agent
6Permission denied sur le poolConfinement AppArmor ou SELinuxSécurité
7Sauvegarde inutilisableConfusion entre snapshot et sauvegardeSnapshots et sauvegardes
8VM lente sans que le CPU satureBus disque ou mode de cache inadaptéPerformances
9Connexion SSH impossibleClé non injectée par cloud-initCloud-init
10Bridge qui ne fonctionne pasInterface physique non libéréeBridge ifupdown
11Migration refusée par la destinationMode CPU host-passthrough posé par défautMigration live
12Aucun groupe IOMMU sur l'hôteVirtualisation d'E/S désactivée dans le firmwarePassthrough PCI

Suivez les leçons dans l'ordre, en commençant par les concepts. Prenez le temps de comprendre l'architecture avant d'installer : c'est ce qui rend lisibles les commandes qui suivent, et ce qui évite la confusion entre KVM, QEMU et libvirt.

Premier module : Concepts KVM/libvirt


Mon retour d'expérience, pour ceux qui veulent comprendre

Section intitulée « Mon retour d'expérience, pour ceux qui veulent comprendre »

Jusqu'ici cette page est restée factuelle. La suite est plus personnelle : pourquoi je continue de miser sur KVM plutôt que sur les solutions propriétaires, et les pièges que je vois revenir en production.

Je déploie des machines virtuelles sur KVM/libvirt depuis des années, du homelab jusqu'à des serveurs de production. Dès qu'il y a un Linux sous la main, c'est devenu mon réflexe par défaut.

Sans KVMAvec KVM
Licences VMware coûteuses, incertitude post-BroadcomGratuit, GPL, intégré au noyau
Dépendance à un éditeurStack 100% open source et standard
Outillage propriétairevirsh, Terraform, Ansible, API libvirt

Le rachat de VMware par Broadcom et l'envolée des licences ont accéléré une bascule que j'observe partout : les équipes cherchent une alternative libre et pérenne. KVM, intégré au noyau Linux depuis 2007 et moteur de Proxmox comme d'OpenStack, est la réponse la plus mûre.

Une formation technique n'est jamais neutre : elle fait des choix, et autant les assumer. Voici les cinq partis pris qui orientent chaque module, avec à chaque fois la raison concrète derrière la position.

  • L'IaC avant les clics : je pilote KVM en ligne de commande et en Terraform, pas seulement dans virt-manager. Une infra qui compte se script et se versionne.
  • Cloud-Init systématique : une VM se construit en quelques secondes, jamais à la main. Les VM montées au clic sont une dette.
  • Snapshot n'est pas backup : je martèle la distinction, parce que c'est l'erreur qui coûte le plus cher.
  • QCOW2 par défaut : thin provisioning et snapshots natifs, sauf besoin de performance brute (raw).
  • Le bridge quand il faut de la vraie connectivité : le NAT par défaut suffit pour tester, pas pour exposer un service.

À l'inverse, voici les erreurs que je vois revenir le plus souvent en production. Aucune n'est théorique : chacune a un coût réel, du disque qui explose à la sauvegarde qui n'en était pas une. Les connaître à l'avance vous évitera de les découvrir au pire moment.

  • Empiler les snapshots : j'ai vu des disques exploser et des VM ramper parce que personne ne consolidait la chaîne QCOW2. Un snapshot est temporaire, point.
  • Confondre snapshot et sauvegarde : le jour où le stockage lâche, les snapshots partent avec.
  • Tout faire dans virt-manager : ça ne se reproduit pas, ça ne se versionne pas, ça ne s'automatise pas.
  • Oublier le qemu-guest-agent : sans lui, pas d'IP propre, pas d'arrêt gracieux, et un output Terraform vide.
  • Négliger le BIOS/UEFI : la moitié des « KVM ne marche pas » sont une virtualisation désactivée dans le firmware.

Soyons clairs sur le positionnement. KVM/libvirt est la brique brute : maximale en contrôle et en scriptabilité, mais sans interface clé en main. Proxmox VE est KVM emballé dans une interface web et du clustering, parfait quand on veut une console sans tout scripter (voir la formation Proxmox). VMware reste puissant mais payant et incertain depuis Broadcom. VirtualBox est un outil de poste de travail, pas un hyperviseur de serveur.

Mon conseil : apprenez KVM/libvirt d'abord, c'est le socle qu'on retrouve sous Proxmox comme sous OpenStack, puis montez sur Proxmox si vous voulez l'interface.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens ce site gratuitement, sans publicité, sans profilage et sans compte à créer. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn