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