Machines KVM pour Vagrant sur Archlinux

Machines KVM pour Vagrant sur Archlinux

Vous appréciez notre travail......nous recrutons !

Ne ratez pas nos articles sur l'open source, le big data et les systèmes distribués, fréquence faible d’un email tous les deux mois.

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 :

ProviderVirtualBoxQEMU/KVM
vagrant up time3 min42 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.

sudo pacman -S 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

sudo systemctl start libvirtd
sudo systemctl enable libvirtd

Installation des plugins Vagrant

vagrant plugin install vagrant-mutate
vagrant plugin install vagrant-libvirt

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 :

vagrant box add centos/7 --provider libvirt

Lancement de la VM de test

Copiez le Vagrantfile de test et lancez la VM :

git clone https://gist.github.com/9d2e81703701b8d2dbb3d8647d6b73e8.git libvirt-test
cd libvirt-test
vagrant up

Essayez de vous connecter en SSH sur la VM avec :

vagrant ssh test_machine

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 :

Call to virDomainCreateWithFlags failed: internal error: Failed to load module '/usr/lib/libvirt/storage-file/libvirt_storage_file_gluster.so': libgfapi.so.0: Ne peut ouvrir le fichier d'objet partagé: Aucun fichier ou dossier de ce type

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

yaourt -S qemu-block-gluster

Erreur :

A l’installation du plugin vagrant-libvirt :

Bundler, the underlying system Vagrant uses to install plugins,
reported an error. The error is shown below. These errors are usually
caused by misconfigured plugin installations or transient network
issues. The error from Bundler is:

ERROR: Failed to build gem native extension.

current directory: ~/.vagrant.d/gems/2.5.1/gems/nokogiri-1.8.3/ext/nokogiri
/usr/bin/ruby -r ./siteconf20180702-5091-8tys0j.rb extconf.rb
checking if the C compiler accepts ... yes
Building nokogiri using system libraries.
pkg-config could not be used to find libxml-2.0
Please install either pkg-config or the pkg-config gem per

gem install pkg-config -v "~> 1.1"

pkg-config could not be used to find libxslt
Please install either pkg-config or the pkg-config gem per

gem install pkg-config -v "~> 1.1"

pkg-config could not be used to find libexslt
Please install either pkg-config or the pkg-config gem per

gem install pkg-config -v "~> 1.1"

ERROR: cannot discover where libxml2 is located on your system. please make sure pkg-config is installed.
* extconf.rb failed *
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.

Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/usr/bin/$(RUBY_BASE_NAME)
--help
--clean
--use-system-libraries=true
--with-zlib-dir
--without-zlib-dir
--with-zlib-include
--without-zlib-include=${zlib-dir}/include
--with-zlib-lib
--without-zlib-lib=${zlib-dir}/lib
--with-xml2-dir
--without-xml2-dir
--with-xml2-include
--without-xml2-include=${xml2-dir}/include
--with-xml2-lib
--without-xml2-lib=${xml2-dir}/lib
--with-libxml-2.0-config
--without-libxml-2.0-config
--with-pkg-config
--without-pkg-config
--with-xslt-dir
--without-xslt-dir
--with-xslt-include
--without-xslt-include=${xslt-dir}/include
--with-xslt-lib
--without-xslt-lib=${xslt-dir}/lib
--with-libxslt-config
--without-libxslt-config
--with-exslt-dir
--without-exslt-dir
--with-exslt-include
--without-exslt-include=${exslt-dir}/include
--with-exslt-lib
--without-exslt-lib=${exslt-dir}/lib
--with-libexslt-config
--without-libexslt-config

To see why this extension failed to compile, please check the mkmf.log which can be found here:

~/.vagrant.d/gems/2.5.1/extensions/x86_64-linux/2.5.0/nokogiri-1.8.3/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in ~/.vagrant.d/gems/2.5.1/gems/nokogiri-1.8.3 for inspection.
Results logged to ~/.vagrant.d/gems/2.5.1/extensions/x86_64-linux/2.5.0/nokogiri-1.8.3/gem_make.out

Solution : Installer le plugin pkg-config :

vagrant plugin install pkg-config
Partagez cet article

Canada - Maroc - France

Nous sommes une équipe passionnée par l'Open Source, le Big Data et les technologies associées telles que le Cloud, le Data Engineering, la Data Science le DevOps…

Nous fournissons à nos clients un savoir faire reconnu sur la manière d'utiliser les technologies pour convertir leurs cas d'usage en projets exploités en production, sur la façon de réduire les coûts et d'accélérer les livraisons de nouvelles fonctionnalités.

Si vous appréciez la qualité de nos publications, nous vous invitons à nous contacter en vue de coopérer ensemble.

Support Ukrain