KVM
| 🏠 Accueil | 📚 Index | 🐧 Linux | 🌐 Réseau | 🔒 Cybersécurité | 🖥️ Virtualisation | ✅ Checklists d'intervention | 📚 Tutoriels | 🤝 Services |
|---|
🧭 Présentation de KVM
KVM (Kernel-based Virtual Machine) est une technologie de virtualisation intégrée au noyau Linux. Elle permet d'exécuter plusieurs machines virtuelles sur un même serveur physique.
Associé à QEMU et libvirt, KVM permet de créer, démarrer, arrêter et administrer des machines virtuelles Linux ou Windows.
KVM utilise les fonctions de virtualisation matérielle du processeur, généralement Intel VT-x ou AMD-V.
La virtualisation matérielle permet une exécution efficace des machines virtuelles.
KVM s'appuie sur le noyau Linux et son infrastructure de virtualisation.
Libvirt fournit une interface d'administration en ligne de commande ou graphique.
🧩 Les composants de la virtualisation KVM
Composant du noyau Linux qui permet la virtualisation matérielle des processeurs.
Fournit notamment les périphériques virtuels et l'exécution des machines virtuelles.
Permet de gérer les machines virtuelles, les réseaux et les stockages via des outils comme `virsh`.
Interface graphique permettant de créer et d'administrer des machines virtuelles.
Architecture simplifiée
Serveur physique
|
+-- Linux : système hôte
|
+-- KVM : virtualisation matérielle
|
+-- QEMU : exécution des VM
|
+-- libvirt : administration
|
+-- VM 1 : Ubuntu Server
+-- VM 2 : Windows Server
+-- VM 3 : Debian
🖥️ Prérequis matériels
Avant d'installer KVM, vérifie les points suivants :
- Un processeur Intel ou AMD compatible avec la virtualisation matérielle.
- La virtualisation activée dans le BIOS ou l'UEFI.
- Une distribution Linux compatible, par exemple Ubuntu Server ou Debian.
- Une quantité de mémoire RAM suffisante pour le système hôte et les machines virtuelles.
- Un espace disque adapté aux systèmes invités et à leurs données.
Vérifier le processeur
Installer l'outil de vérification :
sudo apt update sudo apt install cpu-checker -y
Tester la prise en charge de KVM :
kvm-ok
Le résultat attendu indique que l'accélération KVM peut être utilisée.
Autre méthode de vérification :
grep -Eoc '(vmx|svm)' /proc/cpuinfo
- `vmx` correspond à la virtualisation Intel.
- `svm` correspond à la virtualisation AMD.
Un résultat supérieur à zéro indique que les indicateurs de virtualisation sont visibles dans le système. Si le résultat est nul, vérifie la compatibilité du processeur et les paramètres du BIOS/UEFI. Dans une machine virtuelle elle-même, la virtualisation imbriquée doit éventuellement être activée par l'hyperviseur parent.
🐧 Installation sur Ubuntu et Debian
Les commandes ci-dessous sont destinées à un hôte Linux utilisant les paquets de sa distribution.
1. Mettre le système à jour
sudo apt update sudo apt upgrade -y
2. Installer KVM et les outils associés
sudo apt install qemu-kvm libvirt-daemon-system \ libvirt-clients virtinst bridge-utils cpu-checker -y
Ce groupe de paquets fournit les composants de virtualisation, les outils libvirt et les utilitaires utiles à la création des machines virtuelles.
Sur une installation récente, la prise en charge du réseau virtuel et les outils nécessaires peuvent différer légèrement selon la version de Debian ou Ubuntu.
3. Activer et vérifier libvirt
sudo systemctl enable --now libvirtd sudo systemctl status libvirtd
Sur les systèmes utilisant une architecture modulaire récente de libvirt, certains services peuvent être organisés différemment. Si `libvirtd` n'existe pas, vérifie les services installés avec :
systemctl list-unit-files '*libvirt*'
4. Vérifier la connexion à l'hyperviseur
sudo virsh -c qemu:///system list --all
Si la commande affiche une liste de machines virtuelles, même vide, la connexion à libvirt fonctionne.
5. Ajouter son compte aux groupes utiles
Pour administrer les machines virtuelles sans utiliser systématiquement `sudo`, certains systèmes permettent d'ajouter le compte aux groupes `libvirt` et `kvm` :
sudo usermod -aG libvirt,kvm "$USER"
Cette configuration dépend de la distribution et de ses règles d'accès. Déconnecte-toi puis reconnecte-toi pour renouveler les groupes de la session.
Attention : l'accès au groupe `libvirt` peut donner des privilèges importants sur l'hôte. N'accorde cet accès qu'à des utilisateurs de confiance.
🧰 Administration avec virsh
`virsh` est l'outil en ligne de commande de libvirt. Il permet de gérer les machines virtuelles depuis un terminal.
Lister les machines virtuelles
Afficher les machines en cours d'exécution :
sudo virsh list
Afficher toutes les machines, y compris celles qui sont arrêtées :
sudo virsh list --all
Démarrer une machine virtuelle
sudo virsh start nom_vm
Arrêter une machine proprement
sudo virsh shutdown nom_vm
Forcer l'arrêt d'une machine
sudo virsh destroy nom_vm
Attention : `destroy` coupe immédiatement la machine virtuelle, comme une coupure d'alimentation. Utilise cette commande uniquement si l'arrêt normal ne fonctionne pas ou si la situation le justifie.
Redémarrer une machine
sudo virsh reboot nom_vm
Supprimer une définition de machine virtuelle
sudo virsh undefine nom_vm
Cette commande retire la définition de la VM de libvirt. Elle ne supprime pas nécessairement son disque virtuel. Vérifie les options et les volumes avant toute suppression de données.
Afficher les informations d'une VM
sudo virsh dominfo nom_vm
Consulter la console texte
sudo virsh console nom_vm
La console ne fonctionne que si la machine invitée et son système sont configurés pour fournir une console série. Pour quitter une console série virsh, utilise généralement `Ctrl+]`.
💿 Créer une machine virtuelle
Une machine virtuelle nécessite généralement :
- Une image ISO du système d'exploitation.
- Un disque virtuel.
- De la mémoire RAM.
- Des processeurs virtuels.
- Une configuration réseau.
- Un nom de machine.
1. Créer un répertoire de stockage ISO
sudo mkdir -p /var/lib/libvirt/boot
Place ensuite l'image ISO dans ce répertoire, par exemple une image Ubuntu Server ou Debian, en utilisant une source officielle.
Exemple de fichier :
/var/lib/libvirt/boot/ubuntu-server.iso
Le fichier doit réellement exister et être lisible par le processus de virtualisation.
2. Créer une VM avec virt-install
Exemple pour installer Ubuntu Server :
sudo virt-install \ --name ubuntu-test \ --memory 4096 \ --vcpus 2 \ --disk size=30,bus=virtio \ --cdrom /var/lib/libvirt/boot/ubuntu-server.iso \ --os-variant ubuntu24.04 \ --network network=default,model=virtio \ --graphics spice
À adapter avant utilisation :
- `ubuntu-test` : nom de la machine virtuelle.
- `--memory 4096` : 4 Go de RAM.
- `--vcpus 2` : deux processeurs virtuels.
- `--disk size=30` : disque virtuel de 30 Go, généralement créé dans le stockage par défaut de libvirt.
- `--cdrom` : chemin de l'image ISO.
- `--os-variant` : identifiant de la variante du système invité, à adapter à la version et aux valeurs disponibles sur l'hôte.
- `--network network=default` : réseau virtuel libvirt par défaut.
- `--graphics spice` : affichage graphique si les composants nécessaires sont installés.
Cette commande lance l'assistant d'installation de l'OS invité dans une fenêtre graphique si l'environnement de l'hôte ou l'outil utilisé le permet. Sur un serveur sans interface graphique, prévois une console adaptée ou une installation automatisée.
3. Vérifier les variantes de systèmes disponibles
osinfo-query os
Si cette commande n'est pas disponible, vérifie si le paquet `osinfo-db-tools` est installé. Les identifiants reconnus dépendent de la base de données `osinfo` présente sur l'hôte.
🌐 Réseau des machines virtuelles
Libvirt propose notamment un réseau virtuel avec NAT, souvent nommé `default`.
Vérifier le réseau par défaut
sudo virsh net-list --all
Démarrer le réseau par défaut
sudo virsh net-start default
Activer son démarrage automatique
sudo virsh net-autostart default
Si le réseau `default` n'existe pas, ces commandes ne pourront pas le démarrer. Vérifie la configuration réseau de libvirt avant d'essayer de le recréer.
NAT ou bridge ?
Le réseau virtuel permet généralement aux VM d'accéder au réseau extérieur via l'hôte.
Avantages :
- Configuration simple.
- Adapté aux tests.
- Les VM ne sont pas directement exposées sur le réseau local.
Un pont réseau relie les VM au réseau physique.
Avantages :
- Les VM peuvent recevoir une adresse IP du réseau local.
- Utile pour des serveurs accessibles depuis d'autres équipements.
La configuration doit être adaptée à l'interface réseau et à l'environnement de l'hôte.
Important : la mise en place d'un bridge sur un serveur distant peut couper la connexion réseau si elle est mal configurée. Prépare une procédure de retour arrière et conserve un accès console si possible.
💽 Stockage des machines virtuelles
Les disques des VM sont généralement stockés sous forme de fichiers ou de volumes gérés par libvirt.
Afficher les pools de stockage
sudo virsh pool-list --all
Afficher les volumes disponibles
sudo virsh vol-list default
Le nom du pool doit correspondre à un pool existant.
Formats courants
QCOW2
Format qui prend en charge notamment l'allocation dynamique et les snapshots selon la configuration.
RAW
Format simple, souvent intéressant pour les performances, mais qui peut occuper l'espace prévu selon la manière dont il est créé.
Pour visualiser les informations d'un disque QCOW2 :
qemu-img info /chemin/vers/disque.qcow2
Précaution : ne modifie pas directement un disque virtuel utilisé par une VM en cours d'exécution. Pour les opérations de stockage, arrête proprement la VM ou utilise les outils adaptés au scénario.
🛡️ Sécurité et bonnes pratiques
🔐 Protéger l'hôte
- Installer les mises à jour de sécurité.
- Limiter les comptes autorisés à administrer KVM.
- Sécuriser SSH et les accès physiques.
💾 Sauvegarder
- Sauvegarder les données des VM.
- Prévoir une copie externe.
- Tester les restaurations.
📊 Surveiller
- Contrôler la RAM et le stockage.
- Vérifier l'état des VM.
- Surveiller les journaux et le réseau.
Contrôler les ressources
free -h df -h top
Consulter les journaux de libvirt
sudo journalctl -u libvirtd -n 50 --no-pager
Sur les systèmes utilisant des services libvirt modulaires, examine également les journaux des services concernés.
Sauvegarder une VM
Une sauvegarde cohérente peut nécessiter de prendre en compte plusieurs éléments :
- Le disque virtuel.
- La définition de la machine virtuelle.
- Les éventuels volumes et disques supplémentaires.
- Les données et applications présentes dans le système invité.
- L'état des applications au moment de la sauvegarde.
Une simple copie d'un disque utilisé en écriture peut ne pas fournir une sauvegarde cohérente. Utilise une procédure adaptée à l'état de la VM et aux outils de sauvegarde retenus.
🔧 Dépannage
❌ KVM non disponible
kvm-ok ls -l /dev/kvm
Vérifie la virtualisation dans le BIOS/UEFI, les modules du noyau et les éventuelles restrictions d'un hyperviseur parent.
🔒 Permission refusée
id groups
Vérifie les permissions et les groupes nécessaires, puis reconnecte-toi si les groupes viennent d'être modifiés.
🌐 Pas de réseau dans la VM
sudo virsh net-list --all ip addr
Vérifie l'état du réseau virtuel, la configuration de la VM et les paramètres réseau de son système invité.
💽 Disque ou espace insuffisant
df -h sudo virsh pool-list --all
Vérifie l'espace libre de l'hôte et le pool de stockage utilisé par la machine virtuelle.
🏠 KVM dans un homelab
KVM permet de regrouper plusieurs services sur un même serveur physique, tout en séparant les systèmes invités.
Exemple d'architecture :
Serveur physique Ubuntu
|
+-- KVM / QEMU / libvirt
|
+-- VM 1 : serveur web
| +-- Apache
| +-- [[MariaDB]]
|
+-- VM 2 : services réseau
|
+-- VM 3 : environnement de test
+-- Debian ou Ubuntu
Cette organisation peut être adaptée pour héberger des services de test, des serveurs web, des environnements de formation ou des applications auto-hébergées.
KVM est un hyperviseur intégré à Linux ; il ne faut pas le confondre avec une solution de gestion de parc ou une plateforme complète de gestion de datacenter.
📋 Checklist d'installation
- [ ] Vérifier que le processeur prend en charge la virtualisation.
- [ ] Activer Intel VT-x ou AMD-V dans le BIOS/UEFI.
- [ ] Installer KVM, QEMU et libvirt.
- [ ] Vérifier l'état des services.
- [ ] Tester l'accès avec `virsh`.
- [ ] Vérifier le réseau virtuel.
- [ ] Prévoir le stockage des disques virtuels.
- [ ] Créer une première VM de test.
- [ ] Mettre en place une stratégie de sauvegarde.
- [ ] Sécuriser les comptes et les accès d'administration.