Vagrant supporte différents providers pour gérer la virtualisation. Dans un environnement Linux, il est possible d’améliorer considérablement les performances des VMs en utilisant le provider libvirt et l’hyperviseur KVM.

Ce tutoriel permet de configurer un environnement Archlinux pour pouvoir utiliser libvirt comme provider Vagrant et de tester le succès de l’installation à l’aide d’un Vagrantfile basique. Si vous utilisez une autre distribution Linux que Archlinux, vous pouvez probablement suivre la même procédure.

libvirt est la bibliothèque utilisée pour gérer les machines virtuelles. Elle peut fonctionner avec de nombreux hyperviseurs, dont VirtualBox, VMWare Workstation, QEMU… Elle fait le lien entre le noyau, responsable de l’allocation des ressources (CPU, RAM, réseau…), et l’hyperviseur de la machine virtuelle. Elle fournit également l’API pour contrôler les états des machines virtuelles (démarrage, arrêt…). L’une des forces de Vagrant lors de l’utilisation de libvirt est qu’il démarre les machines en parallèle, accélérant ainsi le processus de démarrage.

QEMU est un outil d’émulation et de virtualisation. Il peut fonctionner seul ou utiliser l’optimisation avancée apportée par KVM. KVM (Kernel-based Virtual Machine) est un module du kernel Linux qui exploite la virtualisation matérielle, c’est-à-dire les fonctions spéciales du processeur conçues spécifiquement pour la virtualisation (par exemple Intel VT).

KVM vs Virtualbox

Pour avoir une idée des performances de Vagrant avec libvirt et KVM, comparons les avec VirtualBox au moment du démarrage. Nous avons créé un cluster de 5 machines virtuelles en utilisant à la fois QEMU/KVM et VirtualBox (lien vers le fichier Vagrantfile), voici les résultats:

Provider VirtualBox QEMU/KVM
vagrant up time 3 min 42 sec

Les machines virtuelles sont également plus rapides lors de l’exécution grâce à KVM.

Prérequis

Vagrant doit être installé et fonctionnel sur votre environnement. Le guide d’installation est disponible dans la documentation officielle. Il est conseillé de ne pas utiliser de gestionnaire de paquets pour installer Vagrant (le paquet n’est pas à jour).

Installation des paquets nécessaires

libvirt a besoin de plusieurs paquets pour fonctionner avec Vagrant. Utilisez votre gestionnaire de paquet (ex: pacman) pour installer les paquets suivants : qemu, ebtables, dnsmasq, bridge-utils, virt-manager, libvirt.

ebtables est utilisé pour configurer les règles de pare-feu pour les trames Ethernet. dnsmasq est un serveur DNS et DHCP requis par Vagrant lors de l’utilisation de libvirt. bridge-utils est utilisé pour créer et gérer des connexions bridged (les briges permettent de relier plusieurs machines dans un même réseau global). Enfin, virt-manager nous permettra de gérer les machines virtuelles via une interface graphique.

Démarrage du service libvirt

Installation des plugins Vagrant

vagagrant-mute permet à Vagrant de convertir les boxes d’un hyperviseur à un autre (par exemple, d’une box Virtualbox à une box QEMU).
vagrant-libvirt permet à Vagrant d’utiliser la bibliothèque libvirt.

Création d’un pool de disque pour la VM de test

Un pool de stockage est une quantité de stockage qui sera utilisée pour le volume des VMs. libvirt prend en charge plusieurs types de pool de stockage (pool de répertoires, pool de systèmes de fichiers, pool NFS, etc.). Vous pouvez voir plus de détails sur le site web de libvirt. La création de pools de stockage personnalisés pour vos machines virtuelles vous permet d’isoler les machines virtuelles et d’utiliser différents types de stockage.

Pour tester l’installation, nous allons créer un pool de répertoires (il utilise un répertoire de votre système de fichiers) pour héberger une VM de test. Vous pouvez suivre la même procédure pour créer d’autres pools de stockage.

Lancez virt-manager et effectuez les actions suivantes :

  1. Ajouter la connexion QEMU/KVM :
    1. “Fichier”
    2. “Ajouter une connexion” :
      1. Hyperviseur : “QEMU/KVM”
      2. “Connexion automatique” activée
      3. “Connecter”
  2. Créer le pool de disque :
    1. Double-cliquez sur “QEMU/KVM”
    2. Onglet “Stockage”
      1. “+ (Ajouter un pool)” en bas à gauche
        • Étape 1 :
          • Nom: “test-libvirt”
          • Type: “dir: Répertoire des fichiers système”
        • Étape 2 : par défaut
        • “Terminer”

Installation de la Vagrant box libvirt

La VM de test utilise l’OS CentOS 7. Il faut d’abord créer la Vagrant box centos/7 :

Lancement de la VM de test

Copiez le Vagrantfile de test et lancez la VM :

Essayez de vous connecter en SSH sur la VM avec :

Si vous n’y arrivez pas c’est que l’installation a échoué… Si cela arrive n’hésitez pas à commenter ce poste en décrivant votre problème !

Conclusion

Nous avons configuré une alternative à la solution Virtualbox souvent utilisée. Comme vous pouvez le voir, c’est un peu complexe, avec plusieurs composants devant fonctionner correctement (QEMU, KVM, libvirt, plugins vagrant …). Cependant, l’utilisation de KVM via QEMU devrait vraiment améliorer les performances de vos machines virtuelles. Nous avons également un temps de démarrage plus rapide grâce au plugin libvirt qui effectue des lancements parallèles. Sur ce, bonne virtualisation !


Erreurs connues

Erreur:

Solution: Pour régler le problème, installez qemu-block-gluster et redémarrez votre ordinateur :

Erreur:

A l’installation du plugin vagrant-libvirt :

Solution: Installer le plugin pkg-config: