Tester Ansible avec Podman
Objectifs du chapitre et prérequis
1. Contexte et prérequis
Ansible est un outil qui a pour vocation l’administration de machines classiques (virtuelles ou physiques). Le problème est qu’il peut être compliqué de disposer de machines virtuelles pour réaliser vos tests. Ce prérequis peut également être compliqué à remplir pour des personnes qui n’auraient qu’une connaissance superficielle des problématiques système.
Un produit comme Docker répond à ce besoin de simplification. Vous pouvez disposer très rapidement de conteneurs basés sur n’importe quel OS du marché.
Attention, un conteneur n’est en aucun cas l’équivalent d’une machine classique. Ce chapitre est là pour vous présenter une technique qui vous permettra de simuler des infrastructures classiques. Elle ne constitue aucunement une pratique à suivre pour de la production.
Enfin, un exemple sera également abordé afin de voir comment Ansible peut prendre en charge le cycle de vie des images et conteneurs.
Pour la suite, le moteur de conteneurs Podman sera utilisé. À noter qu’il est également possible de faire appel au moteur Docker en alternative. Toutefois, ce dernier est moins adapté à nos besoins : le lancement d’un démon Systemd dans Docker réclame plus d’adaptations. Podman quant à lui supporte cette opération de façon transparente.
2. Fichiers téléchargeables
Vous pouvez récupérer les exemples des répertoires inventaires et variables sur le repository GitHub suivant :...
Installation de Podman
Podman est disponible sous forme de paquets système pré-configurés.
Ci-dessous un exemple d’installation dans le cas d’une distribution Debian ou Ubuntu :
$ sudo apt install podman
N’hésitez pas à consulter l’adresse https://podman.io/getting-started/installation afin de disposer d’instructions spécifiques aux différents systèmes d’exploitation (Red Hat, Fedora, macOS, Windows, etc.).
Ansible, Podman et Systemd
Dans une distribution Linux, la gestion du démarrage est confiée à un programme un peu particulier : init. Depuis maintenant quelques années, les distributions font appel à un nouveau mécanisme de démarrage : Systemd.
Ce nouveau programme apporte de nombreux changements et s’appuie notamment sur des fonctions propres au kernel Linux pour fonctionner. Vous pouvez ainsi profiter de nouvelles fonctions, comme par exemple :
-
l’allocation fine des ressources ;
-
une surveillance améliorée ;
-
la simplification de la création de services système.
Lorsque vous voulez lancer un service, Ansible va donc s’appuyer sur Systemd pour réaliser ces opérations.
1. Comment faire cohabiter les conteneurs et Systemd ?
En revanche, par défaut Systemd ne fonctionne pas très bien à l’intérieur d’un conteneur. En effet, ce dernier doit avoir accès à certaines ressources du kernel Linux (cgroups) et, par conséquent, tourner avec des privilèges élevés. Or, pour des raisons de sécurité, Docker ou Podman réduisent les droits des programmes qui tournent dans un conteneur à l’aide de mécanismes basés sur l’utilisation de cgroups.
Dans le cas d’un moteur Docker, afin de réussir à lancer Systemd dans un conteneur, il faut donc réaliser certaines opérations :
-
Création de point de montage de type tmpfs pour /tmp et /run.
-
Lancement du process init de System D (/sbin/init).
-
Activation du mode privileged (en fonction du type de machine).
-
Montage du répertoire...
Les images de conteneurs
1. Présence de l’interpréteur Python
Relancez la création de vos conteneurs avec la commande suivante :
$ ansible-playbook -i containers.yml create-container.yml
Vos conteneurs sont maintenant prêts à l’emploi. Le test de la communication se fera avec la commande suivante :
$ ansible -i docker.yml -m ping all
Comme tous les containers contiennent un interpréteur Python, la communication devrait bien se passer y compris pour le container Ubuntu qui contient un interpréteur Python 3 :
mysql1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
...
haproxy1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false,
"ping": "pong"
2. Installation et connexion à Mediawiki
a. Prérequis pour l’installation de Mediawiki
La procédure d’installation de Mediawiki n’est pas différente de celle décrite durant le chapitre Introduction à la notion de rôle. Il est toutefois nécessaire d’installer quelques prérequis pour mieux simuler un système Linux :...