← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 31 oct. 2023

Catégorie Cloud / DevOps

Vagrant : automatisation des machines virtuelles

Dans le monde du DevOps et des infrastructures IT, la notion de virtualisation système est omniprésente. C'est notamment ce procédé qui permet d'émuler plusieurs serveurs dans une seule et même machine hôte, par l'intermédiaire d'un hyperviseur. Les hyperviseurs les plus connus sont notamment VirtualBox, VMWare, Hyper-V ou encore Proxmox. En revanche, la création de machines virtuelles sur ces solutions est souvent manuelle : cette méthode ne permet pas d'automatiser la création ou la configuration de machines virtuelles, ce qui est évidemment un point bloquant dans un contexte DevOps.

La solution pour pouvoir automatiser la création de machines virtuelles, c'est d'utiliser des outils d'automatisation comme Vagrant, un outil open source créé par HashiCorp pour construire et exécuter des machines virtuelles, et ce quel que soit l'hyperviseur utilisé (VirtualBox, VMware, etc).

Dans cet article, nous allons détailler le concept de virtualisation, pour ensuite démontrer en quoi Vagrant se révèle un puissant allié dans ce contexte.

La virtualisation

Lorsque l'on parle de virtualisation, il s'agit souvent de virtualisation matérielle. C'est ce principe qui permet de démarrer et d'exécuter plusieurs systèmes d'exploitation invités sur un système hôte commun. Une machine virtuelle (ou VM pour virtual machine) est une émulation d'un système d'exploitation dans une machine hôte ou un serveur. Ainsi, grâce à la virtualisation, on peut exécuter plusieurs machines virtuelles au sein d'une seule et même machine hôte.

Le concept de machine virtuelle a été décisif dans la popularité du Cloud Computing. Les serveurs que l'on provisionne dans le Cloud sont justement des systèmes virtualisés, en colocation avec d'autres systèmes sur lesquels nous ne pouvons pas communiquer. Ainsi, en virtualisation matérielle, un hyperviseur gère les ressources allouées à chaque système virtuel.

Dans certains cas, il est possible de demander à ce qu'un serveur soit dédié, c'est-à-dire qu'il ne soit pas une machine virtuelle, mais cela coûte plus cher. Il y a plusieurs intérêts à utiliser des machines virtuelles.

  • La flexibilité, car nous pouvons redimensionner les ressources d'une machine virtuelle quand on le souhaite, ce qui est bien plus difficile avec un serveur physique.
  • La rapidité de lancement, car une machine virtuelle peut être provisionnée est exécutée en quelques dizaines de secondes.

Seulement, dans un contexte de microservices omniprésents dans le Cloud, les machines virtuelles ont présentés des limites.


À lire : découvrez notre formation DevOps Engineer


Tout d'abord, bien qu'elles soient rapides à lancer par rapport à un serveur physique, elles restent tout de même lentes à être provisionnées au regard des applications, qui elles doivent être capables de se lancer en seulement quelques secondes.

Ensuite, les machines virtuelles ne peuvent pas être traitées comme une ressource atomique (comme un fichier, un objet, une entité). En effet, il faut rattacher à une machine virtuelle un disque dur, un système d'exploitation, des informations réseaux, etc. Tout ceci rend la machine virtuelle lourde à manipuler de manière dynamique.

Pour terminer, les systèmes d'exploitation sur les machines virtuelles intègrent de nombreux composants et logiciels qui ne sont pas indispensables pour l'application que l'on souhaite exécuter.

Virtualisation automatisée avec Vagrant

Créé par HashiCorp (également derrière l'outil Terraform) en 2010, Vagrant est un logiciel open-source qui permet de créer et de gérer des environnements de développement virtuels. Il est souvent utilisé par les développeurs et les équipes d'infrastructure pour automatiser la configuration et la gestion de machines virtuelles (VM) pour le développement de logiciels.

Vagrant dispose de trois points forts principaux, qui en font un outil de choix pour la création de machines virtuelles.

  • Provisionnement automatisé : Vagrant permet de définir la configuration d'une VM sous forme de code (Vagrantfile), ce qui facilite la création d'environnements de développement cohérents et reproductibles. Concrètement, cela nous permet de définir toutes les caractéristiques d'une VM sans devoir passer par l'interface de VirtualBox.
  • Multi-fournisseur : Vagrant prend en charge plusieurs fournisseurs de virtualisation, notamment VirtualBox, VMware, Hyper-V, Docker, et d'autres. Cela signifie que l'on peut utiliser la même configuration Vagrant pour différents types de machines virtuelles, ce qui rend alors son utilisation très pratique. En effet, nous n'avons pas besoin de réécrire des configurations différentes si l'on change de logiciel de virtualisation.
  • Gestion des dépendances : autre point pertinent, Vagrant peut gérer les dépendances d'un projet, comme les bibliothèques, les bases de données, et d'autres services tiers. Cela garantit que chaque membre de l'équipe dispose d'un environnement de développement identique.

Ainsi, avec Vagrant, plus besoin de passer par l'interface d'un hyperviseur pour créer des VM, ce qui facilite beaucoup le déploiement et l'automatisation de nos VMs.

Le Vagrantfile

Un fichier Vagrant (Vagrantfile) est un fichier de configuration utilisé pour définir et personnaliser les paramètres d'une VM créée et gérée avec Vagrant. Le Vagrantfile est écrit en Ruby et contient des instructions pour spécifier la configuration de la VM, les détails de la virtualisation, les ressources matérielles, les logiciels à installer, et d'autres paramètres.

Pour commencer et voir à quoi ressemble un fichier Vagrant, regardons le contenu suivant.

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"
  config.vm.network "private_network", type: "dhcp"
  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
    vb.cpus = 2
  end
end

Dans cet exemple, le Vagrantfile configure une VM Ubuntu 18.04 (box ubuntu/bionic64) avec les paramètres suivants.

  • Configuration de la box de base (une box est une image préconfigurée sous Vagrant).
  • Définition d'une interface réseau privée avec attribution automatique d'adresse IP (type dhcp).
  • Configuration de la virtualisation avec VirtualBox, en spécifiant 1024 Mo de mémoire et 2 CPU.

Regardons plus spécifiquement les différents paramètres.

  • Vagrant.configure("2") do |config| indique la version de configuration Vagrant à utiliser (dans cet exemple, la version 2). La configuration Vagrant 2 est la plus courante et recommandée.
  • config.vm.box spécifie la box de base à utiliser pour la VM. Une "box" est une image préconfigurée d'un système d'exploitation.
  • config.vm.network configure les interfaces réseau de la VM. Dans l'exemple, une interface réseau privée est définie avec attribution DHCP.
  • config.vm.provider permet de spécifier des paramètres spécifiques au fournisseur de virtualisation (par exemple, VirtualBox dans cet exemple). C'est notamment ici que l'on peut spécifier les ressources matérielles.

Une fois le fichier créé, nous pouvons lancer (ou plutôt provisionner dans le jargon) la VM avec la commande up.

vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'debian/bookworm64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'debian/bookworm64'
    default: URL: https://vagrantcloud.com/debian/bookworm64
==> default: Adding box 'debian/bookworm64' (v12.20231009.1) for provider: virtualbox
    default: Downloading: https://vagrantcloud.com/debian/boxes/bookworm64/versions/12.20231009.1/providers/virtualbox/unknown/vagrant.box
==> default: Successfully added box 'debian/bookworm64' (v12.20231009.1) for 'virtualbox'!
...
==> default: Machine 'default' has a post `vagrant up` message. This is a message
==> default: from the creator of the Vagrantfile, and not from Vagrant itself:
==> default: 
==> default: Vanilla Debian box. See https://app.vagrantup.com/debian for help and bug reports

En seulement une dizaine de secondes, la machine virtuelle est entièrement configurée et prête à l'emploi, ce qui apporte un gain de temps considérable.


Pour en savoir plus : notre formation DevOps Engineer


Quand utiliser Vagrant ?

Vagrant est le bienvenu lorsque l'on souhaite automatiser la création et l'exécution de machines virtuelles, que ce soit pour des raisons d'optimisation, de sécurité ou de gestion d'infrastructure. Il y a en particulier trois situations où l'utilisation de Vagrant se révèle particulièrement utile.

  • Développement de logiciels multiplateformes : Vagrant peut aider à créer des environnements de développement cohérents pour chaque plateforme si les applications doivent fonctionner sur plusieurs systèmes d'exploitation (comme Windows, Linux ou macOS), ce qui facilite les tests et le développement.
  • Collaboration en équipe : Vagrant permet à chaque membre de l'équipe de créer et de partager facilement des environnements de développement identiques sur un projet. Cela assure que tous les développeurs travaillent dans un environnement cohérent, ce qui réduit les erreurs de configuration.
  • Gestion des dépendances : il nous permet de définir les dépendances dans un fichier de configuration si le projet nécessite des versions particulières de logiciels ou de bibliothèques.
  • Isolation des environnements : Vagrant offre un niveau d'isolation entre les machines virtuelles, permettant d'exécuter différents environnements de développement sans craindre qu'ils n'interfèrent les uns avec les autres.

Avantages et inconvénients de Vagrant

Il y a de nombreux avantages à utiliser Vagrant plutôt que de créer des machines virtuelles manuellement. Tout d'abord, en utilisant des fichiers de configuration simples et reproductibles, il simplifie considérablement le processus de configuration et de provisionnement de machines virtuelles. Cela permet de créer et de partager facilement des environnements de développement cohérents avec les différentes équipes.

De plus, Vagrant est compatible avec plusieurs fournisseurs de virtualisation, tels que VirtualBox, VMware et bien d'autres, ce qui vous permet de choisir la solution qui répond le mieux à vos besoins. Grâce à ceci, nous disposons d'une grande flexibilité pour travailler avec une variété de machines virtuelles.

Autre point, en nous permettant de définir et de gérer les logiciels et les bibliothèques nécessaires aux applications dans un fichier de configuration, Vagrant facilite également la gestion des dépendances au sein d'un projet : on s'assure que toutes les machines virtuelles créées avec Vagrant sont correctement configurées et prêtes à être utilisées.

Enfin, la capacité à gérer plusieurs environnements de développement sur une seule machine hôte est un autre avantage important de Vagrant, ce qui est particulièrement utile lorsque l'on travaille sur plusieurs projets avec différentes configurations.


À découvrir : notre formation DevOps Engineer


Vagrant a de nombreux avantages, mais il a également quelques inconvénients : Vagrant exécute des machines virtuelles en arrière-plan, ce qui peut entraîner une surcharge de ressources système. Cela peut affecter les performances d'un système hôte, en particulier si plusieurs machines virtuelles sont opérationnelles simultanément. De manière générales, toutes les ressources d'un système hôte (disque, réseau, processeur, mémoire) sont utilisées par Vagrant pour l'exécution des machines virtuelles.

Également, Vagrant peut être moins adapté aux applications nécessitant des performances de virtualisation très élevées, ce qui est un autre inconvénient. Il peut être préférable d'utiliser d'autres solutions de virtualisation plus spécialisées pour des charges de travail intensives en termes de calcul, d'accès au matériel ou au réseau.

Enfin, pour les débutants, la configuration initiale de Vagrant peut être un peu difficile. La création de fichiers de configuration nécessite une compréhension des concepts de virtualisation et de système d'exploitation, ce qui peut être intimidant pour les personnes qui ne sont pas familières avec ces concepts.

Conclusion

Pour résumer, Vagrant s'est avéré être un outil vital pour les développeurs et les équipes de développement dans un contexte DevOps. Un atout important dans le domaine du développement logiciel est sa capacité à faciliter la collaboration, à garantir la cohérence des configurations et à simplifier la gestion des environnements de développement.

Pour en savoir plus sur Vagrant et les outils liés au DevOps, n'hésitez pas à visiter la page de notre formation DevOps Engineer qui permet de maîtriser l'ensemble des connaissances et compétences pour appliquer l'approche DevOps en entreprise.

Articles similaires

Blog

28 févr. 2024

Cloud / DevOps

Pour de nombreuses entreprises, innover chaque jour en proposant des applications à ses utilisateurs est un sujet primordial. Pour autant, cette course au déploiement continu de nouvelles applications nécessite des compétences bien particulières sur les architectures Cloud, l'automatisation de projets et la supervision. C'est à partir de ce moment qu'intervient le rôle de l'ingénieur DevOps dans les entreprises.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

23 févr. 2024

Cloud / DevOps

Dans le monde du DevOps, les conteneurs sont rapidement devenus des incontournables, aussi important que les machines virtuelles. Des plateformes de conteneurisation comme Docker ont permis de simplifier et d'accélérer la création d'image et l'exécution de conteneurs sur différents systèmes, à portée de tous.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

16 févr. 2024

Cloud / DevOps

Dans l'approche GitOps, il existe de nombreux outils permettant d'exécuter des pipelines CI/CD : certains se concentrent uniquement sur la partie intégration continue, d'autres avec le déploiement en plus. S'il y en a un qui est considéré comme l'un des plus matures et des plus robustes, c'est bien GitLab.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article