podman

Podman

состояние пайплайна

Установите и настройте Podman в безрутовом режиме.

Проект на GitLab: yoanncolin/ansible/roles/podman

Требования

Система Linux должна быть настроена с:

  • SSH
  • Python (для Ansible)
  • Sudo
  • Доступным менеджером пакетов

Роль gwerlas.system может помочь вам:

ansible-galaxy install gwerlas.system
- name: Мой плейбук
  hosts: all
  roles:
    - role: gwerlas.system
    - role: gwerlas.podman

Факты

Определенные факты этой роли:

  • podman_version
  • podman_packages

Вы можете получить только факты, не внося изменений на ваших узлах:

- name: Мой плейбук
  hosts: all
  tasks:
    - name: Получить факты
      ansible.builtin.import_role:
        name: gwerlas.podman
        tasks_from: facts

    - name: Отобразить
      ansible.builtin.debug:
        var: podman_packages

Теги

Вы можете фильтровать по определённым задачам, используя эти теги:

  • provision: только предоставление ресурсов

Переменные роли

Доступные переменные перечислены ниже с их значениями по умолчанию (см. 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 без рута

Чтобы разрешить некоторым пользователям использовать Podman в безрутовом режиме, podman_users должен быть списком объектов, сформированных следующим образом:

podman_users:
  - name: jdoe            # Имя пользователя Unix (обязательно)
    home: /home/jdoe      # Получается из записей пользователей, если отсутствует
    uid: 1000             # Используется только для пользователей, которых еще не создали в системе
    subuid_starts: 100000 # Генерируется из идентификатора пользователя по умолчанию
    subuid_length: 50000  # 65536 по умолчанию
    subgid_starts: 100000 # То же, что и subuid_starts по умолчанию
    subgid_length: 50000  # То же, что и subuid_length по умолчанию

Поскольку Podman хранит свои данные в домашнем каталоге пользователя, мы будем создавать его, если он отсутствует.

Вы можете быстро добавить пользователей, вызвав только задачу rootless:

---
- name: Добавить пользователя для использования Podman без рута
  hosts: all
  vars:
    podman_users:
      - name: jdoe
        uid: 300
  tasks:
    - name: Добавить Джона Доу
      ansible.builtin.import_role:
        name: gwerlas.podman
        tasks_from: rootless

Не существующие пользователи

Для пользователей, которые еще не существуют, мы создадим их для вас с помощью роли gwerlas.system.

Чтобы отключить создание отсутствующих пользователей, установите podman_create_missing_users в false. В этом случае вам нужно будет установить свойство uid для каждого отсутствующего пользователя.

Конфигурация Podman

По умолчанию мы оставляем конфигурационные файлы дистрибутива без изменений.

Исключение составляют настройки контейнеров Debian 11, которые не работают «из коробки».

Для использования настраиваемой конфигурации используйте параметры podman_*_config.

Контейнеры

Используйте словарь podman_containers_config, чтобы заполнить файл /etc/containers/containers.conf с той же структурой, что и toml, описанная в мануале containers.conf.

Например:

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

Это сгенерирует файл /etc/containers/containers.conf ниже:

[containers]
log_drivers = "journald"

[engine]
cgroup_manager = "cgroupfs"

Только для Debian 11 мы перезаписываем настройки по умолчанию дистрибуции конфигурацией выше.

Реестры

ПРИМЕЧАНИЕ Мы не поддерживаем устаревший формат версии 1.

Используйте словарь podman_registries_config, чтобы заполнить файл /etc/containers/registries.conf с той же структурой, что и toml, описанная в мануале registries.conf.

Например:

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

Это сгенерирует файл /etc/containers/registries.conf ниже:

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

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

Хранение

Используйте словарь podman_storage_config, чтобы заполнить файл /etc/containers/storage.conf с той же структурой, что и toml, описанная в мануале storage.conf.

Например:

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

Это сгенерирует файл /etc/containers/storage.conf ниже:

[storage]
driver = "zfs"

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

Libpod

Используйте словарь podman_libpod_config, чтобы заполнить файл /etc/containers/libpod.conf с той же структурой, что и toml, описанная в мануале libpod.conf.

Например:

podman_libpod_config:
  cgroup_manager: cgroupfs

Это сгенерирует файл /etc/containers/libpod.conf ниже:

cgroup_manager = "cgroupfs"

Только для Debian 11 мы перезаписываем настройки по умолчанию дистрибуции конфигурацией выше.

Podman compose

Установка podman_compose_install в true установит podman-compose, если он доступен для дистрибутива целевой машины.

Поддержка Podman toolbox

Установка podman_toolbox_install в true установит podman-toolbox, если он доступен для дистрибутива целевой машины.

Подражание Docker

Docker в $PATH

Вы можете подражать Docker, установив параметр podman_mimic_docker в true. Если пакет podman-docker доступен для целевой Linux-дистрибуции, он будет установлен, в противном случае будет создан символическая ссылка.

Таким образом, скрипты, вызывающие docker, будут прозрачно использовать podman вместо этого, или почти.

Действующий сокет

Если установленная версия Podman 3.0 или выше, сервис будет активирован для каждого podman_users, а переменные окружения DOCKER_BUILDKIT и DOCKER_HOST будут соответственно установлены в 0 и $XDG_RUNTIME_DIR/podman/podman.sock.

Таким образом, вы сможете запускать Docker в Podman.

Обертки

Вы можете добавить обертки для прозрачно вызова некоторых команд:

Например, запускайте molecule, не устанавливая его (и его зависимости) на вашу систему:

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

Большинство аргументов совпадают с параметрами podman run, мы поддерживаем почти все аргументы [модуля ansible podman_container][] как есть (за исключением алиасов и функций, ориентированных на службы).

Вы можете добавить (или удалить) список поддерживаемых параметров, отредактировав переменную podman_wrappers_autofill. Вы также можете редактировать значения по умолчанию, редактируя переменную podman_wrappers_values.

Зависимости

Роль gwerlas.system для управления пользователями.

Убедитесь, что containers.podman установлен на вашей системе или присутствует в вашем requirements.yml.

Пример плейбука

Пример того, как быть максимально совместимым с Docker:

---
- name: Совместимые с Docker
  hosts: all
  roles:
    - name: gwerlas.system
    - name: gwerlas.podman
      vars:
        podman_mimic_docker: true

Лицензия

Лицензия BSD 3-Clause.

О проекте

Install and configure podman

Установить
ansible-galaxy install Gwerlas/podman
Лицензия
bsd-3-clause
Загрузки
5396
Владелец
DevOps Engineer