Post

Installer KVM (qemu libvirt) sur un serveur

Installer KVM (qemu libvirt) sur un serveur

Avec KVM, vous pouvez facilement configurer un environnement de virtualisation sur une machine Linux et héberger une large gamme de systèmes d’exploitation invités, notamment Linux, Windows, BSD, Mac OS et bien d’autres.

Qemu KVM

KVM sur serveur

  • Un serveur de type Debian avec un pont (bridge) installé
  • Serveur avec prise en charge virtualisation matérielle

Installation KVM sur serveur debian

debian-cloud

Pour installer KVM et tous les autres composants requis afin de configurer un environnement de virtualisation KVM sur votre serveur

1
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst

Ici,

  • qemu-kvm - Métapaquet QEMU pour le support KVM (c’est-à-dire virtualisation complète QEMU sur matériel x86),
  • libvirt-daemon-system - Fichiers de configuration du démon Libvirt,
  • libvirt-clients - des programmes pour la bibliothèque libvirt,
  • bridge-utils - des utilitaires de configuration du pont Ethernet Linux,
  • virtinst - des programmes pour créer et cloner des machines virtuelles.

Une fois KVM installé, démarrez le service libvirtd (si non démarré) :

1
2
sudo systemctl enable libvirtd
sudo systemctl start libvirtd

Vérifiez l’état du libvirtd service avec la commande :

1
systemctl status libvirtd

Sortie :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/lib/systemd/system/libvirtd.service; enabled; preset: enabled)
     Active: active (running) since Sat 2023-12-16 13:35:21 CET; 8s ago
TriggeredBy: ● libvirtd.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 103946 (libvirtd)
      Tasks: 19 (limit: 32768)
     Memory: 15.4M
        CPU: 239ms
     CGroup: /system.slice/libvirtd.service
             └─103946 /usr/sbin/libvirtd --timeout 120

le service libvertd est activé et démarré !

Ajoutez maintenant votre utilisateur actuel aux groupes kvm et libvirt afin qu’il puisse créer et gérer des VM à l’aide de virsh utilitaire de ligne de commande ou Virt-manager interface graphique.

1
2
sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER

Vous pouvez également utiliser les commandes suivantes pour ajouter l’utilisateur actuel aux groupes kvm et libvirt.

1
2
sudo usermod -a -G kvm $(whoami)
sudo usermod -a -G libvirt $(whoami)

Pont réseau (bridge)

Un réseau ponté partage la véritable interface réseau de l’ordinateur hôte avec d’autres machines virtuelles pour se connecter au réseau extérieur. Par conséquent, chaque VM peut se lier directement à n’importe quelle adresse IPv4 ou IPv6 disponible, tout comme un ordinateur physique.

Nous allons faire en sorte que toutes les machines virtuelles utilisent la même série d’adresses IP que celle utilisée par le système hôte.

Le pont installé par défaut sur le serveur

1
sudo brctl show br0
1
2
bridge name	bridge id		STP enabled	interfaces
br0		8000.002324c90686	no		eno1

Ajouter un réseau de pont à KVM

Configurer KVM pour utiliser ce pont, créez un fichier XML appelé host-bridge.xml :

1
nano host-bridge.xml

Ajoutez les lignes suivantes :

1
2
3
4
5
<network>
  <name>host-bridge</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

Exécutez les commandes suivantes en mode utilisateur pour démarrer le pont nouvellement créé et en faire le pont par défaut pour les VM :

1
2
3
virsh net-define host-bridge.xml      # Réseau host-bridge défini depuis host-bridge.xml
virsh net-start host-bridge           # Réseau host-bridge démarré
virsh net-autostart host-bridge       # Réseau host-bridge marqué en démarrage automatique

Vérification réseau

Pour vérifier si le pont hôte KVM est actif et démarré

1
virsh net-list --all

Sortie

1
2
3
 Nom           État    Démarrage automatique   Persistent
-----------------------------------------------------------
 host-bridge   actif   Oui                     Oui

À ce stade, on dispose d’une installation KVM fonctionnelle sur le serveur avec un réseau de pont KVM configuré.

Création machines virtuelles KVM avec la commande virsh

Nous pouvons utiliser l’utilitaire de ligne de commande virsh pour créer et gérer des machines virtuelles. La commande virsh est utilisée pour créer, lister, mettre en pause, redémarrer, arrêter et supprimer des machines virtuelles à partir de la ligne de commande.

Par défaut, les fichiers de la machine virtuelle et autres fichiers associés sont stockés sous /var/lib/libvirt/
Le chemin par défaut pour stocker les images ISO est /var/lib/libvirt/boot/
Nous pouvons bien sûr modifier ces emplacements lors de l’installation d’une nouvelle VM.

Lister toutes les machines virtuelles

Tout d’abord, vérifions s’il existe des machines virtuelles.
Pour afficher la liste de toutes les machines virtuelles disponibles

1
sudo virsh liste --all

Sortie

1
2
 ID   Nom   État
------------------

Comme vous pouvez le constater, il n’existe aucune machine virtuelle existante.

Télécharger des images ISO

Avant de créer notre première VM, nous devons télécharger l’image ISO dans le répertoire /var/lib/libvirt/boot/

1
2
3
4
5
6
sudo -s
cd /var/lib/libvirt/boot/
wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.0-x86_64.iso
wget https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.0-x86_64.iso.sha256
# Vérifier
sha256sum alpine-standard-3.19.0-x86_64.iso < alpine-standard-3.19.0-x86_64.iso.sha256 

Créer des machines virtuelles KVM

Utilisez la commande virt-install --osinfo list pour obtenir la liste des variantes de systèmes d’exploitation acceptées. Voir osinfo-query os pour plus de résultats.

1
sudo virt-install --osinfo list |more

Créons une machine virtuelle Alpine avec 2 Go de RAM, 1 cœur de processeur et 8 Go de disque dur.

1
sudo virt-install --os-variant="alpinelinux3.17" --name alpinesrv --ram=2048 --vcpus=1 --cpu host --hvm --disk path=/var/lib/libvirt/images/alpine-vm,size=8 --cdrom /var/lib/libvirt/boot/alpine-standard-3.19.0-x86_64.iso --network bridge=br0 --graphics vnc

Décomposons la commande ci-dessus et voyons ce que fait chaque option.

  • --os-variant="alpinelinux3.17" : Obligatoire , liste disponible virt-install --osinfo list
  • --name alpinesrv : Le nom de la machine virtuelle
  • --ram=2048 : alloue 2 Go de RAM à la VM.
  • --vcpus=1 : indique le nombre de cœurs de processeur dans la VM.
  • --cpu host : optimise les propriétés du processeur de la machine virtuelle en exposant la configuration du processeur de l’hôte à l’invité.
  • --hvm : Demandez la virtualisation matérielle complète.
  • --disk path=/var/lib/libvirt/images/alpine-vm,size=8 : L’emplacement où enregistrer le disque dur de la VM et sa taille. Dans ce cas, j’ai alloué une taille de disque dur de 8 Go.
  • --cdrom /var/lib/libvirt/boot/alpine-standard-3.19.0-x86_64.iso : L’emplacement où vous avez l’image ISO réelle du programme d’installation d’Alpine.
  • --network bridge=br0 : demandez à la VM d’utiliser le réseau de pont. Si vous n’avez pas configuré le réseau de pont, ignorez ce paramètre.
  • --graphics vnc : autorise l’accès VNC à la VM à partir d’un client distant.

Exemple de sortie :

1
2
3
4
5
6
7
8
9
WARNING  Graphismes demandés mais DISPLAY n’est pas défini. Pas de lancement de virt-viewer.
WARNING  Aucune console à lancer pour l’invité, valeur par défaut : --wait -1

Début d’installation…
Allocating 'alpine-vm'                                                           |    0 B  00:00:00 ... 
Création du domaine…                                                             |    0 B  00:00:00     

Domain is still running. Installation may be in progress.
En attente de la fin de l’installation.

Créer une machine virtuelle KVM à partir de la ligne de commande T

Ce message continuera à s’afficher jusqu’à ce que vous vous connectiez à la VM à partir d’un système distant via n’importe quelle application VNC et que vous complétiez l’installation du système d’exploitation.

Étant donné que notre système hôte KVM (serveur ) ne dispose pas d’interface graphique, nous ne pouvons pas poursuivre l’installation du système d’exploitation invité à partir du système hôte lui-même. Je vais donc utiliser une machine de rechange dotée d’une interface graphique pour terminer l’installation du système d’exploitation invité à l’aide d’un client VNC.

Nous en avons terminé avec le serveur ici. Les étapes suivantes doivent être effectuées sur un système client disposant d'une interface graphique.

Accés aux machines virtuelles KVM distantes via le client VNC

Sur un autre système linux doté d’un environnement de bureau graphique avec le client de bureau à distance TigerVNC installé.

Ouvrez une nouvelle fenêtre de terminal et connectez-vous en SSH au système hôte KVM :

1
ssh leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519

Ici,

  • leno est le nom de l’utilisateur dans l’hôte KVM (serveur debian)
  • 192.168.0.215 est l’adresse IP de l’hôte KVM.
  • -p pour un port différent de 22 et -i pour la clé

Recherchez le port VNC utilisé par la VM en cours d’exécution

1
sudo virsh dumpxml alpinesrv | grepvnc

Remplacez “alpinesrv” avec le nom de votre VM.

Sortie :

1
<graphics type='vnc' port='5900' autoport='yes' listen='127.0.0.1'>

Le numéro du port VNC est 5900.

Maintenant déconnectez-vous de la session SSH de l’hôte KVM et exécutez le port SSH suivant commande de transfert depuis le terminal de votre système local

1
ssh -L 5900:127.0.0.1:5900 leno@192.168.0.215 -p 55215 -i /home/yann/.ssh/lenovo-ed25519

Lancez l’application client TigerVNC , saisir “localhost:5900” dans la barre d’adresse et enfin appuyez sur Connexion

L’application TigerVNC montre la fenêtre du système d’exploitation virtuelle en cours sur le serveur debian

Accés aux machines virtuelles KVM distantes via virt-manager

Utiliser le gestionnaire de machines virtuelles VMM

Tester, ouvrir une fenêtre de commande (Alt F2) et saisir :

1
virt-manager -c 'qemu+ssh://leno@192.168.0.215:55215/system?keyfile=/home/yann/.ssh/lenovo-ed25519'

et cliquer sur lancer

Accès console des machines virtuelles KVM distantes via virt-viewer

Si l’on tente une ouverure de la console depuis virt-manager , on a l’erreur suivante

Il faut utiliser virt-viewer (à installer : yay -S virt-viewer)
Créer une configuration ssh client ~/.ssh/config pour accéder au serveur lenovo qui héberge KVM

1
2
3
4
5
Host lenovo
    Hostname 192.168.0.215
    User leno
    IdentityFile ~/.ssh/lenovo-ed25519
    port 55215

Ouvrir le viewer virt , Alt+F2

La console est lancée…

Gérer les machines virtuelles KVM à l’aide de la commande virsh

Voici quelques exemples de commandes virsh les plus couramment utilisées pour gérer les machines virtuelles KVM à partir de la ligne de commande à l’aide de la commande virsh.

Répertorier les VM en cours d’exécution

Exécutez la commande virsh list pour afficher la liste des VM en cours d’exécution :

1
sudo virsh list

Exemple de sortie :

1
2
3
 Id   Name           State
------------------------------
 2    Ubuntu-22.04   running

Comme vous pouvez le voir, la machine virtuelle Ubuntu 22.04 est actuellement en cours d’exécution et son ID est 2.

Pour afficher toutes les machines virtuelles (en cours d’exécution et arrêtées), utilisez l’indicateur –all.

1
sudo virsh list --all

Démarrer des VM

Pour démarrer une VM, la commande suivante peut être utilisée :

1
sudo virsh start VM_NAME

Exemple:

1
sudo virsh start Ubuntu-22.04

Vous pouvez également utiliser l’ID de la VM pour la démarrer :

1
sudo virsh start 2

Redémarrer les machines virtuelles

Pour redémarrer une VM en cours d’exécution, procédez :

1
sudo virsh reboot Ubuntu-22.04

Ou,

1
sudo reboot 2

Suspendre les VM

Pour suspendre une VM en cours d’exécution, procédez :

1
sudo suspend Ubuntu-22.04

Ou,

1
sudo suspend 2

Reprendre les VM

Pour reprendre une VM suspendue, procédez :

1
sudo virsh resume Ubuntu-22.04

Ou,

1
sudo resume 2

Arrêter les machines virtuelles

Pour mettre hors tension une VM en cours d’exécution, procédez :

1
sudo virsh shutdown Ubuntu-22.04

Ou,

1
sudo shutdown 2

Supprimer des machines virtuelles

Pour supprimer complètement une VM, procédez :

1
2
sudo virsh undefine Ubuntu-22.04
sudo virsh destroy Ubuntu-22.04

Virsh possède de nombreuses commandes et options. Pour les connaître tous, reportez-vous à la virsh section d’aide :

1
virsh --help

Liens

Cet article est sous licence CC BY 4.0 par l'auteur.