Aller au contenu

KVM

De Wiki Pat-Informatik
🏠 Accueil 📚 Index 🐧 Linux 🌐 Réseau 🔒 Cybersécurité 🖥️ Virtualisation ✅ Checklists d'intervention 📚 Tutoriels 🤝 Services
Wiki Pat-Informatik • Virtualisation

🖥️ KVM

Créer et administrer des machines virtuelles sous Linux grâce à KVM, QEMU et libvirt.
KVM
KVM

🧭 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.

⚡ Performances

La virtualisation matérielle permet une exécution efficace des machines virtuelles.

🐧 Intégration Linux

KVM s'appuie sur le noyau Linux et son infrastructure de virtualisation.

🧰 Administration

Libvirt fournit une interface d'administration en ligne de commande ou graphique.

🧩 Les composants de la virtualisation KVM

⚙️ KVM

Composant du noyau Linux qui permet la virtualisation matérielle des processeurs.

🖥️ QEMU

Fournit notamment les périphériques virtuels et l'exécution des machines virtuelles.

🔧 libvirt

Permet de gérer les machines virtuelles, les réseaux et les stockages via des outils comme `virsh`.

🪟 Virt-Manager

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 ?

🔀 NAT

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.
🌉 Bridge

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.

📚 Pages associées

🌐 Documentation officielle

Pat Informatik
KVM • Linux • QEMU • libvirt • Virtualisation • Homelab