Déploiement, configuration et automatisation des machines virtuelles KVM sous Linux

Introduction à l'hyperviseur KVM

KVM (Kernel-based Virtual Machine) est un module de virtualisation intégré directement au noyau Linux, permettant de transformer le système hôte en hyperviseur de type 1. Cette technologie permet à une machine physique (ou virtuelle, dans le cadre de la virtualisation imbriquée limitée à deux niveaux) d'exécuter plusieurs machines virtuelles isolées. Pour fonctionner, KVM exige que le processeur de l'hôte supporte les extensions de virtualisation matérielle (Intel VT-x ou AMD-V).

Préparation de l'environnement hôte

Vérification de la compatibilité matérielle

Avant toute installation, il est impératif de confirmer que le CPU prend en charge la virtualisation. La commande suivante doit retourner des résultats contenant vmx (Intel) ou svm (AMD) :

grep -E '(vmx|svm)' /proc/cpuinfo

Si aucun résultat n'est affiché, il faut activer la virtualisation dans le BIOS/UEFI de la machine.

Désactivation des mécanismes de sécurité

Pour éviter les conflits de réseau et de permissions lors de la création des machines virtuelles, il est courant de désactiver le pare-feu et SELinux dans les environnements de test :

sudo systemctl stop firewalld
sudo systemctl disable firewalld

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Installation des composants de virtualisation

L'installation de l'environnement de virtualisation complet inclut KVM, QEMU, libvirt et les outils de gestion :

sudo dnf groupinstall -y "Virtualization Host"
sudo dnf install -y virt-manager libvirt-client

sudo systemctl enable --now libvirtd

Une fois le service libvirtd démarré, une interface réseau virtuelle nommée virbr0 est automatiquement créée pour gérer le NAT des machines virtuelles :

ip addr show virbr0

Gestion du stockage et création de disques virtuels

Par défaut, libvirt stocke les images de disques virtuels dans /var/lib/libvirt/images, ce qui peut rapidement saturer la partition racine. Il est recommandé de définir un emplacement personnalisé :

sudo mkdir -p /data/vms_storage
sudo qemu-img create -f qcow2 /data/vms_storage/web-server-01.qcow2 25G

Déploiement de machines virtuelles en ligne de commande

L'outil virt-install permet de provisionner des machines virtuelles sans interface graphique. Voici un exemple de création utilisant le disque personnalisé :

sudo virt-install \
  --name web-server-01 \
  --memory 2048 \
  --vcpus 2 \
  --disk path=/data/vms_storage/web-server-01.qcow2,format=qcow2 \
  --cdrom /var/iso/rocky-linux-8.iso \
  --network network=default \
  --graphics vnc,listen=0.0.0.0 \
  --noautoconsole

Automatisation du déploeiment avec Kickstart

Pour déployer des machines virtuelles à grande échelle sans intervention manuelle, l'utilisation d'un fichier de réponse Kickstart est indispensable.

1. Préparation du fichier Kickstart

Le fichier de configuration (ex: ks.cfg) peut être généré via l'utilitaire system-config-kickstart ou adapté manuellement à partir du fichier /root/anaconda-ks.cfg créé lors de l'installation de l'hôte. Pour garantir un accès via console série (essentiel pour les environnements sans interface graphique), ajoutez la directive suivante dans le fichier Kickstart :

bootloader --append="net.ifnames=0 biosdevname=0 console=ttyS0" --location=mbr

2. Distribution du fichier via HTTP

Le fichier Kickstart doit être accessible par la machine virtuelle pendant son installation. Un serveur web léger comme Apache suffit :

sudo dnf install -y httpd
sudo cp /root/ks.cfg /var/www/html/ks.cfg
sudo systemctl enable --now httpd

# Vérification de l'accessibilité
curl -I http://10.0.20.50/ks.cfg

3. Lancement de l'installation automatisée

Le déploiement s'effectue en passant l'URL du fichier Kickstart via les arguments supplémentaires du noyau :

sudo qemu-img create -f qcow2 /data/vms_storage/db-server-01.qcow2 40G

sudo virt-install \
  --name db-server-01 \
  --memory 4096 \
  --vcpus 4 \
  --disk path=/data/vms_storage/db-server-01.qcow2 \
  --location /var/iso/rocky-linux-8.iso \
  --network network=default \
  --extra-args="ks=http://10.0.20.50/ks.cfg console=ttyS0" \
  --noautoconsole

4. Accès et configuration de la console série

Grâce au paramètre console=ttyS0, il est possible d'interagir avec la machine virtuelle directement depuis l'hôte via virsh, sans connaître son adresse IP :

sudo virsh console db-server-01

Si la console série n'a pas été configurée lors de l'installation initiale, elle peut être activée a posteriori en modifiant le chargeur de démarrage de la machine virtuelle :

# Connexion à la VM et modification de GRUB
sudo vi /etc/default/grub
# Ajouter 'console=ttyS0' à la variable GRUB_CMDLINE_LINUX

# Régénération de la configuration et redémarrage
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

Étiquettes: kvm libvirt QEMU virt-install kickstart

Publié le 24 juin à 18h59