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
Лицензия
ansible-galaxy install Gwerlas/podman