gwerlas.podman

Podman

Statut du pipeline

Installer et configurer Podman en mode sans root.

Projet GitLab : yoanncolin/ansible/roles/podman

Exigences

Un système Linux de base configuré avec :

  • SSH
  • Python (pour Ansible)
  • Sudo
  • Gestionnaire de paquets prêt à l'emploi

Le rôle gwerlas.system peut vous aider :

ansible-galaxy install gwerlas.system
- name: Mon playbook
  hosts: all
  roles:
    - role: gwerlas.system
    - role: gwerlas.podman

Faits

Faits définis par ce rôle :

  • podman_version
  • podman_packages

Vous pouvez obtenir les faits uniquement, sans apporter de modifications à vos nœuds :

- name: Mon playbook
  hosts: all
  tasks:
    - name: Obtenir des faits
      ansible.builtin.import_role:
        name: gwerlas.podman
        tasks_from: facts

    - name: Afficher
      ansible.builtin.debug:
        var: podman_packages

Tags

Vous pouvez filtrer certaines tâches spécifiques en utilisant ces tags :

  • provision : Provisionner uniquement des ressources

Variables de rôle

Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir defaults/main.yml) :

podman_compose_install: false
podman_toolbox_install: false

podman_mimic_docker: false

podman_create_missing_users: true
podman_users:
  - name: "{{ ansible_user_id }}"

podman_wrappers: []
podman_wrappers_path: /usr/local/bin

Podman sans root

Pour permettre à certains utilisateurs d'utiliser Podman en mode sans root, podman_users doit être une liste d'objets formée comme suit :

podman_users:
  - name: jdoe            # Nom de connexion Unix (requis)
    home: /home/jdoe      # Obtenu des entrées utilisateur si manquant
    uid: 1000             # Utilisé uniquement pour les utilisateurs non encore créés au niveau du système
    subuid_starts: 100000 # Généré à partir de l'identifiant utilisateur par défaut
    subuid_length: 50000  # 65536 par défaut
    subgid_starts: 100000 # Même que subuid_starts par défaut
    subgid_length: 50000  # Même que subuid_length par défaut

Étant donné que Podman stocke ses données dans le répertoire personnel de l'utilisateur, nous allons le créer si c'est manquant.

Vous pouvez ajouter des utilisateurs rapidement en appelant la tâche rootless seule :

---
- name: Ajouter un utilisateur pour l'utilisation de Podman sans root
  hosts: all
  vars:
    podman_users:
      - name: jdoe
        uid: 300
  tasks:
    - name: Ajouter John Doe
      ansible.builtin.import_role:
        name: gwerlas.podman
        tasks_from: rootless

Utilisateurs inexistants

Pour les utilisateurs qui n'existent pas encore, nous allons les créer pour vous grâce au rôle gwerlas.system.

Pour désactiver la création d'utilisateurs manquants, mettez podman_create_missing_users à false. Dans ce cas, vous devez définir la propriété uid pour chaque utilisateur manquant.

Configuration de Podman

Par défaut, nous laissons les fichiers de configuration de la distribution inchangés.

Sauf pour les paramètres des conteneurs Debian 11 qui ne fonctionnent pas par défaut.

Pour utiliser une configuration personnalisée, utilisez les paramètres podman_*_config.

Conteneurs

Utilisez le dictionnaire podman_containers_config pour remplir le fichier /etc/containers/containers.conf en suivant la même structure que celle décrite dans la page de manuel containers.conf.

Par exemple :

podman_containers_config:
  containers:
    log_driver: journald
  engine:
    cgroup_manager: cgroupfs

Cela générera le fichier /etc/containers/containers.conf ci-dessous :

[containers]
log_drivers = "journald"

[engine]
cgroup_manager = "cgroupfs"

Pour Debian 11 uniquement, nous remplaçons les paramètres par défaut de la distribution par la configuration ci-dessus.

Enregistrements

REMARQUE Nous ne prenons pas en charge le format version 1 obsolète.

Utilisez le dictionnaire podman_registries_config pour remplir le fichier /etc/containers/registries.conf en suivant la même structure que celle décrite dans la page de manuel registries.conf.

Par exemple :

podman_registries_config:
  unqualified-search-registries:
    - docker.io
  registry:
    - location: my-insecure-registry:5000
      insecure: true

Cela générera le fichier /etc/containers/registries.conf ci-dessous :

unqualified-search-registries = ['docker.io']

[[registry]]
location = my-insecure-registry:5000
insecure = true

Stockage

Utilisez le dictionnaire podman_storage_config pour remplir le fichier /etc/containers/storage.conf en suivant la même structure que celle décrite dans la page de manuel storage.conf.

Par exemple :

podman_storage_config:
 storage:
   driver: zfs
   options:
     zfs:
       mountopt: "nodev"

Cela générera le fichier /etc/containers/storage.conf ci-dessous :

[storage]
driver = "zfs"

[storage.options.zfs]
mountopt = "nodev"

Libpod

Utilisez le dictionnaire podman_libpod_config pour remplir le fichier /etc/containers/libpod.conf en suivant la même structure que celle décrite dans la page de manuel libpod.conf.

Par exemple :

podman_libpod_config:
  cgroup_manager: cgroupfs

Cela générera le fichier /etc/containers/libpod.conf ci-dessous :

cgroup_manager = "cgroupfs"

Pour Debian 11 uniquement, nous remplaçons les paramètres par défaut de la distribution par la configuration ci-dessus.

Podman compose

Le paramètre podman_compose_install défini à true installera podman-compose s'il est disponible pour la distribution de l'hôte ciblé.

Podman toolbox

Le paramètre podman_toolbox_install défini à true installera podman-toolbox s'il est disponible pour la distribution de l'hôte ciblé.

Mimer Docker

Docker dans le $PATH

Vous pouvez mimer Docker grâce au paramètre podman_mimic_docker défini à true. Si le paquet podman-docker est disponible pour la distribution Linux cible, il sera installé, dans le cas contraire, un lien symbolique sera créé.

Ainsi, les scripts appelant docker utiliseront automatiquement podman.

Socket de démon

Si la version installée de Podman est 3.0 ou supérieure, le service sera activé pour chaque podman_users et les variables d'environnement DOCKER_BUILDKIT et DOCKER_HOST seront respectivement définies à 0 et $XDG_RUNTIME_DIR/podman/podman.sock.

Vous pourrez donc exécuter Docker dans Podman.

Wrappers

Vous pouvez ajouter des wrappers pour appeler certaines commandes de manière transparente :

Par exemple, exécutez molecule sans l'installer (ni ses dépendances) sur votre système :

podman_wrappers:
  - command: molecule
    image: gwerlas/molecule
    env:
      CONTAINER_CONNECTION: docker
      MOLECULE_CONTAINERS_BACKEND: podman
    interactive: true
    network: host
    security_opt: label=disable
    volume:
      - $HOME/.cache/molecule:/root/.cache/molecule
      - $HOME/.vagrant.d:/root/.vagrant.d
      - /run/libvirt:/run/libvirt
      - /var/lib/libvirt:/var/lib/libvirt
      - /var/tmp:/var/tmp
    wrapper_extras:
      env_patterns:
        - ANSIBLE_*
        - MOLECULE_*
      openstack_cli: true
      podman_socket: true
      same_pwd: true
      ssh_auth_sock: true

La plupart des arguments sont les mêmes que les paramètres de podman run, nous supportons presque tous les arguments du module ansible podman_container tel quel (sauf les alias et les fonctionnalités orientées services).

Vous pouvez ajouter (ou retirer) la liste de paramètres supportés en modifiant la variable podman_wrappers_autofill. Vous pouvez également modifier les valeurs par défaut en modifiant la variable podman_wrappers_values.

Dépendances

Le rôle gwerlas.system pour la gestion des utilisateurs.

Assurez-vous d'avoir containers.podman installé sur votre système, ou présent dans votre requirements.yml.

Exemple de playbook

Un exemple de la manière d'être le plus compatible avec Docker possible :

---
- name: Compatible Docker
  hosts: all
  roles:
    - name: gwerlas.system
    - name: gwerlas.podman
      vars:
        podman_mimic_docker: true

Licence

Licence BSD 3-Clause.

À propos du projet

Install and configure podman

Installer
ansible-galaxy install gwerlas.podman
Licence
bsd-3-clause
Téléchargements
5.4k
Propriétaire
DevOps Engineer