Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Ansible
  3. Tester Ansible avec Podman
Extrait - Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
Extraits du livre
Ansible Gérez la configuration de vos serveurs et le déploiement de vos applications (3e édition)
2 avis
Revenir à la page d'achat du livre

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 :...