Incus booste ma productivité pour le développement de rôles Ansible
Depuis longtemps, je développe des rôles
Ansible
en utilisant le couple
Molecule/Vagrant
pour créer des environnements de test reproductibles. Cependant, on ne peut que
constater que la version 3.0 de Vagrant n’est plus une priorité pour
HashiCorp. En plus de cela, les dernières versions commencent à poser des
problèmes, notamment avec le plugin libvirt, qui est essentiel pour ceux
qui, comme moi, travaillent régulièrement avec QEMU/KVM.
J’ai également tenté d’utiliser Proxmox pour créer ces ressources
temporaires, malheureusement, l’expérience a été tout aussi décevante. Les
performances n’étaient pas à la hauteur, et j’ai souvent rencontré des problèmes
de gestion des VMs et des conteneurs.
Ces soucis, couplés à la lenteur au démarrage des machines virtuelles, m’ont
poussé à chercher des alternatives plus efficaces. C’est ainsi que j’ai
découvert Incus, qui annonce
offrir une solution beaucoup plus rapide et légère pour déployer des ressources.
Après quelques tests, je pense que le passage à Incus va complètement décupler
ma production, en réduisant considérablement les temps de démarrage et de
configuration de mes environnements de développement.
Voyons comment mettre en œuvre Incus dans mon cas d’usage.
C’est quoi Incus ?
Incus est une plateforme de gestion de conteneurs et de machines
virtuelles, offrant une expérience utilisateur similaire à celle du cloud
public. Contrairement aux machines virtuelles traditionnelles, Incus
permet d’utiliser des conteneurs système, qui sont beaucoup plus légers,
rapides à démarrer, et efficaces en ressources. Il supporte une grande variété
de distributions Linux, ce qui en fait une solution idéale pour des
environnements de test reproductibles.
Installation d’Incus et Configuration
Pour installer Incus sur une distribution Linux, utilisez le gestionnaire de
paquets adapté à votre système :
Debian/Ubuntu :
Arch Linux :
Fedora :
Une fois l’installation terminée, vous devez ajouter l’utilisateur courant aux
groupes nécessaires pour gérer Incus sans utiliser sudo :
Initialisez Incus avec une configuration de base :
Les commandes essentielles d’Incus
Incus mets à disposition un certain nombre d’images pour les conteneurs et VMs.
Pour lister toutes ces images, tapez la commande suivante :
Pour lancer un conteneur basé sur l’image Ubuntu 22.04 :
Pour lancer une VM avec Ubuntu 22.04 :
Pour lister les instances :
Pour lancer ou arrêtez des conteneurs :
Pour supprimer des conteneurs :
Pour lancer un conteneur avec des limites de ressources :
On peut exécuter des commandes dans une ressource :
En vérifiant, le contenu de l’image ubuntu, j’ai pu me rendre compte que les
services systemd fonctionnaient. Par contre OpenSSH n’est pas installé. Pour
Ansible, il faut donc créer une image personnalisée.
Lancer un conteneur avec Incus :
Configuration de l’image : Connectez-vous au conteneur et installez les
paquets nécessaires :
Vérifions que l’on peut se connecter à l’instance :
Vérifiez aussi que vous pouvez utiliser sudo sans mot de passe avec sudo -i par exemple. Quittez le conteneur en tapant [CTRL] + [D]
Commencez par initialiser une collection et un rôle avec ansible-galaxy :
Ajoutez une tache dans le fichier tasks/main.yml :
Pour créer le scenario, tapez les commandes suivantes :
Editez le fichier molecule/default/molecule.yml :
Modifiez le fichier create.yml pour créer et gérer des conteneurs avec
Incus :
Créons ensuite le fichier incus-create.yml :
On peut vérifier que molecule peut créer l’image :
Vérifions que l’instance est bien créée :
L’instance s’appelle sshd-test. Un petit test on lance le role :
On vérifie que la commande molecule login fonctionne :
Tout fonctionne. Reste à créer le code pour détruire l’instance.
Modifions le fichier destroy.yml :
Et le fichier incus-destroy.yml :
On lance la destruction de l’instance :
On vérifie que l’instance est bien détruite :
Tout est ok.
Plus loin
Cette solution, basée sur Incus, s’est révélée extrêmement efficace et bien
plus rapide que l’utilisation de Vagrant ou Docker. Grâce à Incus,
nous bénéficions d’une mise en place simple et fluide de conteneurs, évitant
les lourdeurs des machines virtuelles tout en supportant pleinement les services
comme systemd, ce qui peut être problématique avec Docker. De plus, le
démarrage des conteneurs est beaucoup plus rapide, rendant les tests de rôles
Ansible bien plus efficients
Bien que tout fonctionne, il reste plusieurs améliorations possibles. Par
exemple, il serait pertinent d’automatiser complètement la création d’images
compatibles Ansible pour éviter des configurations manuelles répétitives. De
plus, je n’ai pas vérifié la gestion de plusieurs instances simultanément.
L’intégration de l’API Incus au lieu des commandes shell serait également
une bonne chose pour rendre le processus idempotent.