linux-system-roles.podman
podman
Эта роль управляет конфигурацией podman, контейнерами и системными службами systemd, которые запускают контейнеры podman.
Требования
Роль требует podman версии 4.2 или более поздней. Роль требует podman версии 4.4 или более поздней для поддержки quadlet и секретов. Роль требует podman версии 4.5 или более поздней для поддержки проверки состояния (поддерживается только при использовании типов контейнеров quadlet).
Требования к коллекциям
Роль требует следующие коллекции:
containers.podmanfedora.linux_system_roles
Используйте это для установки коллекций:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Пользователи, группы, subuid, subgid
Пользователи и группы, указанные в podman_run_as_user, podman_run_as_group, и указанные в спецификации kube как run_as_user и run_as_group, имеют следующие ограничения:
- Они должны уже существовать в системе — роль не создаст пользователей или группы, роль завершит работу с ошибкой, если указан несуществующий пользователь или группа.
- Они должны уже существовать в
/etc/subuidи/etc/subgid, или иначе предоставляться вашей системой управления идентификацией — роль завершит работу с ошибкой, если указанный пользователь не присутствует в/etc/subuid, или если указанная группа отсутствует в/etc/subgid. Роль используетgetsubids, чтобы проверить пользователя и группу, если это возможно, или проверяет файлы напрямую, еслиgetsubidsнедоступен.
Переменные роли
podman_kube_specs
Это список. Каждый элемент списка — это словарь, описывающий podman pod и соответствующий системный юнит для управления. Формат словаря в основном похож на podman_play модуль, за исключением следующего:
state— по умолчаниюcreated. Это принимает 3 значения:started— Создайте поды и системные службы и запустите их.created— Создайте поды и системные службы, но не запускайте их.absent— Удалите поды и системные службы.
run_as_user— Используйте это, чтобы указать пользователя для каждого пода. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_user. В противном случае будет использоватьсяroot. ПРИМЕЧАНИЕ: Пользователь должен уже существовать — роль не создаст его. Пользователь должен присутствовать в/etc/subuid.run_as_group— Используйте это, чтобы указать группу для каждого пода. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_group. В противном случае будет использоватьсяroot. ПРИМЕЧАНИЕ: Группа должна уже существовать — роль не создаст ее. Группа должна быть в/etc/subgid.systemd_unit_scope— Область, которую следует использовать для системного юнита. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_systemd_unit_scope. В противном случае область будетsystemдля контейнеров root иuserдля пользовательских контейнеров.activate_systemd_unit— Необходимо ли активировать системный юнит, когда он создан. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_activate_systemd_unit, которое по умолчанию равноtrue.pull_image— Убедитесь, что образ загружен перед использованием. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_pull_image, которое по умолчанию равноtrue.continue_if_pull_fails— Если загрузка изображения не удалась, не считайте это фатальной ошибкой и продолжайте выполнение роли. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_continue_if_pull_fails, которое по умолчанию равноfalse.kube_file_src— Это имя файла на контроллере, который будет скопирован вkube_fileна управляемом узле. Это файл в формате YAML Kubernetes. Не указывайте это, если указываетеkube_file_content.kube_file_contentимеет приоритет надkube_file_src.kube_file_content— Это либо строка в формате YAML Kubernetes, либословарьв формате YAML Kubernetes. Он будет использоваться как содержимоеkube_fileна управляемом узле. Не указывайте это, если указываетеkube_file_src.kube_file_contentимеет приоритет надkube_file_src.kube_file— Это имя файла на управляемом узле, который содержит спецификацию Kubernetes контейнера/pod. Обычно вам не нужно указывать это, если вам не нужно каким-либо образом копировать этот файл на управляемый узел вне роли. Если вы указываетеkube_file_srcилиkube_file_content, указывать это не нужно. Рекомендуется опуститьkube_fileи вместо этого указать либоkube_file_src, либоkube_file_contentи позволить роли управлять путем и именем файла.- Проверка базового имени файла будет равняться значению
metadata.nameиз K8s yaml, к которому будет добавлен суффикс.yml. - Директория будет
/etc/containers/ansible-kubernetes.dдля системных служб. - Директория будет
$HOME/.config/containers/ansible-kubernetes.dдля пользовательских служб.
Например, если у вас есть
podman_kube_specs:
- state: started
kube_file_content:
apiVersion: v1
kind: Pod
metadata:
name: myappname
Это будет скопировано в файл /etc/containers/ansible-kubernetes.d/myappname.yml на управляемом узле.
podman_quadlet_specs
Список [спецификаций Quadlet] (https://docs.podman.io/en/latest/markdown/podman-systemd.unit.5.html) Спецификация quadlet уникально определяется именем и типом, где тип — это один из типов юнитов, таких как контейнер, kube, сеть, том и т.д. Вы можете либо передать name и type явно, либо name и type будут производиться из имени файла, данного в file, file_src или template_src.
По умолчанию файлы будут скопированы в или созданы в /etc/containers/systemd/$name.$type для корневых контейнеров и $HOME/.config/containers/systemd/$name.$type для контейнеров без корня на управляемом узле. Вы можете предоставить другое расположение, используя file, но тогда вам, вероятно, придется изменить конфигурацию systemd, чтобы найти файл, что не поддерживается этой ролью.
Когда спецификация quadlet зависит от какого-либо другого файла, например, quadlet.kube, который зависит от файла Yaml или ConfigMap, тогда этот файл должен быть указан в списке podman_quadlet_specs до файла, который его использует. Например, если у вас есть файл my-app.kube:
[Kube]
ConfigMap=my-app-config.yml
Yaml=my-app.yml
...
То вы должны сначала указать my-app-config.yml и my-app.yml перед my-app.kube:
podman_quadlet_specs:
- file_src: my-app-config.yml
- file_src: my-app.yml
- file_src: my-app.kube
Большинство параметров для каждой спецификации quadlet аналогичны параметрам podman_kube_spec выше, за исключением того, что параметры *kube* не поддерживаются, и следующие поддерживаются:
name— Имя единицы. Если не указано, оно будет производиться изfile,file_srcилиtemplate_src. Например, если вы укажетеfile_src: /path/to/my-container.container, тоnameбудетmy-container.type— Тип единицы (контейнер, kube, том и т.д.). Если не указано, оно будет производиться изfile,file_srcилиtemplate_src. Например, если вы укажетеfile_src: /path/to/my-container.container, тоtypeбудетcontainer. Если производимый тип не распознается как допустимый тип quadlet, например, если вы укажетеfile_src: my-kube.yml, то он просто будет скопирован и не обработан как спецификация quadlet.file_src— Имя файла на узле управления, который будет скопирован на управляемый узел для использования в качестве источника юнита quadlet. Если этот файл находится в формате юнита quadlet и имеет допустимый суффикс юнита quadlet, он будет использоваться как юнит quadlet, в противном случае он просто будет скопирован.file— Имя файла на управляемом узле, который будет использоваться в качестве источника юнита quadlet. Если этот файл находится в формате юнита quadlet и имеет допустимый суффикс юнита quadlet, он будет использоваться как юнит quadlet, в противном случае он будет трактоваться как обычный файл.file_content— Содержимое файла, который будет скопирован на управляемый узел в строковом формате. Это полезно для передачи коротких файлов, которые можно легко указать в строковом формате. Вы также должны указатьnameиtype.template_src— Имя файла на узле управления, который будет обработан какшаблонJinja, а затем скопирован на управляемый узел для использования в качестве источника юнита quadlet. Если этот файл находится в формате юнита quadlet и имеет допустимый суффикс юнита quadlet, он будет использоваться как юнит quadlet, в противном случае он просто будет скопирован. Если файл имеет суффикс.j2, этот суффикс будет удален для определения типа файла quadlet.
Например, если вы укажете:
podman_quadlet_specs:
- template_src: my-app.container.j2
Тогда локальный файл templates/my-app.container.j2 будет обработан как файл шаблона Jinja, затем скопирован в /etc/containers/systemd/my-app.container как спецификация юнита контейнера quadlet на управляемом узле.
ПРИМЕЧАНИЕ: При удалении quadlet необходимо удалять сети последними. Вы не можете удалить сеть, которая используется контейнером.
podman_secrets
Это список спецификаций секретов в почти том же формате, который используется в podman_secret. Есть дополнительное поле:
run_as_user— Используйте это, чтобы указать секрет для определенного пользователя. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_user. В противном случае будет использоватьсяroot. ПРИМЕЧАНИЕ: Пользователь должен уже существовать — роль не создаст его.
Рекомендуется использовать Ansible Vault для шифрования значения поля data.
podman_create_host_directories
Это логическое значение, значение по умолчанию — false. Если true, роль обеспечит создание директорий хоста, указанных в монтировании хоста в спецификациях volumes.hostPath в YAML Kubernetes, и из конфигурации тома в спецификации контейнера quadlet, где указан путь хоста. ПРИМЕЧАНИЕ: Директории должны указываться как абсолютные пути (для корневых контейнеров) или пути относительно домашней директории (для контейнеров без корня), чтобы роль могла ими управлять. Все остальное будет считаться каким-либо другим типом тома и будет проигнорировано. Роль применит свои значения по умолчанию для прав собственности/доступа к директориям. Если вам нужно установить права собственности/доступ, смотрите podman_host_directories.
podman_host_directories
Это словарь. При использовании podman_create_host_directories это указывает роли, какие права доступа/собственность применить к автоматически созданным директориям хоста. Каждый ключ — это абсолютный путь директории хоста для управления. Значение находится в формате параметров для file модуля. Если вы не укажете значение, роль будет использовать свои встроенные значения по умолчанию. Если вы хотите указать значение, которое будет использоваться для всех директорий хоста, используйте специальный ключ DEFAULT.
podman_host_directories:
"/var/lib/data":
owner: dbuser
group: dbgroup
mode: "0600"
DEFAULT:
owner: root
group: root
mode: "0644"
Роль будет использовать dbuser:dbgroup 0600 для /var/lib/data, и root:root 0644 для всех других директорий хоста, созданных ролью.
podman_firewall
Это список словарей в том же формате, что используется ролью fedora.linux_system_roles.firewall. Используйте это, чтобы указать порты, которые вы хотите, чтобы роль управляла в брандмауэре.
podman_firewall:
- port: 8080/tcp
podman_selinux_ports
Это список словарей в том же формате, что используется ролью fedora.linux_system_roles.selinux. Используйте это, если вы хотите, чтобы роль управляла политикой SELinux для портов, используемых этой ролью.
podman_selinux_ports:
- ports: 8080
protocol: tcp
setype: http_port_t
podman_run_as_user
Это имя пользователя, которое будет использоваться для всех контейнеров без корня. Вы также можете указать имя пользователя для каждого контейнера с помощью run_as_user в podman_kube_specs. ПРИМЕЧАНИЕ: Пользователь должен уже существовать — роль не создаст его. Пользователь должен быть в /etc/subuid.
podman_run_as_group
Это имя группы, которое будет использоваться для всех контейнеров без корня. Вы также можете указать имя группы для каждого контейнера с помощью run_as_group в podman_kube_specs. ПРИМЕЧАНИЕ: Группа должна уже существовать — роль не создаст ее. Группа должна быть в /etc/subgid.
podman_systemd_unit_scope
Это область systemd, которая используется по умолчанию для всех системных юнитов. Вы также можете указать область для каждого контейнера с помощью systemd_unit_scope в podman_kube_specs. По умолчанию контейнеры без корня будут использовать user, а корневые контейнеры будут использовать system.
podman_activate_systemd_units
Активирует каждый системный юнит сразу после его создания. Значение по умолчанию — true. Вы также можете сделать это для каждого юнита, используя activate_systemd_units в спецификации для каждого юнита. Например, если вы развертываете несколько спецификаций и хотите, чтобы только последняя в списке активировалась, что приведет к активации других за счет зависимостей, тогда установите activate_systemd_unit: false для каждой, кроме последней, которая использует activate_systemd_unit: true. ПРИМЕЧАНИЕ: юниты quadlet по умолчанию активируются при создании — вы не можете в настоящее время использовать activate_systemd_unit, чтобы отключить эти юниты — вы можете использовать activate_systemd_unit, чтобы создать юниты остановленными или запущенными.
podman_pull_image
Убедитесь, что каждый образ, упомянутый в спецификации kube или quadlet, присутствует, загружая образ перед его использованием. Значение по умолчанию — true. Используйте false, если управляемый узел уже имеет правильную версию или не может загрузить изображения. Вы также можете указать это для каждого юнита с помощью pull_image.
podman_continue_if_pull_fails
Если попытка загрузки изображения завершается неудачей, не считайте это фатальной ошибкой и продолжайте выполнение роли. Значение по умолчанию — false — неудача попытки загрузки является фатальной ошибкой. Вы можете установить это для каждого юнита с помощью continue_if_pull_fails.
podman_containers_conf
Это настройки containers.conf(5), предоставленные в словаре. Эти настройки будут предоставлены в файле drop-in в директории containers.conf.d. Если запускается от имени root (см. podman_run_as_user), будут управляться системные настройки, в противном случае будут управляться пользовательские настройки. Смотрите man-страницу для местоположений директории.
podman_containers_conf:
containers:
default_sysctls:
- net.ipv4.ping_group_range=0 1000
- user.max_ipc_namespaces=125052
podman_registries_conf
Это настройки containers-registries.conf(5), предоставленные в словаре. Эти настройки будут предоставлены в файле drop-in в директории registries.conf.d. Если запускается от имени root (см. podman_run_as_user), будут управляться системные настройки, в противном случае будут управляться пользовательские настройки. Смотрите man-страницу для местоположений файлов.
podman_registries_conf:
aliases:
myregistry: registry.example.com
podman_storage_conf
Это настройки containers-storage.conf(5), предоставленные в словаре. Если запускается от имени root (см. podman_run_as_user), будут управляться системные настройки, в противном случае будут управляться пользовательские настройки. Смотрите man-страницу для местоположений файлов.
podman_storage_conf:
storage:
runroot: /var/big/partition/container/storage
podman_policy_json
Это настройки containers-policy.json(5), предоставленные в словаре. Если запускается от имени root (см. podman_run_as_user), будут управляться системные настройки, в противном случае будут управляться пользовательские настройки. Смотрите man-страницу для местоположений файлов.
podman_policy_json:
default:
type: insecureAcceptAnything
podman_use_copr (ЭКСПЕРИМЕНТАЛЬНО)
Логическое значение - по умолчанию не установлено - если вы хотите включить репозиторий copr для использования последней версии разработки podman, используйте podman_use_copr: true.
podman_fail_if_too_old (ЭКСПЕРИМЕНТАЛЬНО)
Логическое значение - по умолчанию не установлено - по умолчанию роль завершит работу с ошибкой, если вы используете более старую версию podman и пытаетесь использовать функцию, поддерживаемую только более новой версией. Например, если вы попытаетесь управлять quadlet или секретами с podman 4.3 или более ранней версии, роль завершится с ошибкой. Если вы хотите, чтобы роль была пропущена вместо этого, используйте podman_fail_if_too_old: false.
podman_registry_username
Строка - по умолчанию не установлена - имя пользователя, которое будет использоваться для аутентификации в реестре. Вам также нужно установить podman_registry_password. Вы можете переопределить это для каждого спецификации с помощью registry_username. Использование container_image_user было неподдерживаемым и устарело.
podman_registry_password
Строка - по умолчанию не установлена - пароль, который будет использоваться для аутентификации в реестре. Вам также нужно установить podman_registry_username. Вы можете переопределить это для каждого спецификации с помощью registry_password. Использование container_image_password было неподдерживаемым и устарело.
podman_credential_files
Это список. Каждый элемент списка — это словарь, описывающий файл учетных данных podman, используемый для аутентификации в реестрах. См. man containers-auth.json и man containers-registries.conf: credential-helpers для получения дополнительной информации о формате этих файлов и пути поиска по умолчанию.
ПРИМЕЧАНИЕ: Эти файлы содержат учетные данные аутентификации. Пожалуйста, будьте осторожны с ними. Рекомендуется использовать Ansible Vault для их шифрования.
Ключи каждого словаря следующие:
state— по умолчаниюpresent. Используйтеabsent, чтобы удалить файлы.file_src— Это имя файла на узле управления, который будет скопирован вfileна управляемом узле. Не указывайте это, если указываетеfile_contentилиtemplate_src, которые имеют приоритет надfile_src.template_src— Это имя файла на узле управления, который будет отформатирован с помощью модуляшаблони скопирован вfileна управляемом узле. Не указывайте это, если указываетеfile_contentилиfile_src.file_content— Это строка в форматеcontainers-auth.json. Она будет использована как содержимоеfileна управляемом узле. Не указывайте это, если указываетеfile_srcилиtemplate_src.file— Это имя файла на управляемом узле, который будет содержать данныеauth.json. Значение по умолчанию будет$HOME/.config/containers/auth.json. Если вы укажете относительный путь, он будет относиться к$HOME/.config/containers. Если вы укажете что-то другое, кроме значений по умолчанию, упомянутых вman containers-auth.json, вам также нужно будет настроитьcredential-helpersвcontainers-registries.conf, используяpodman_registries_conf. Все недостающие родительские директории будут созданы.run_as_user— Используйте это, чтобы указать владельца файла для конкретного файла учетных данных. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_user. В противном случае будет использоватьсяroot. ПРИМЕЧАНИЕ: Пользователь должен уже существовать — роль не создаст его. Пользователь должен быть в/etc/subuid. ПРИМЕЧАНИЕ: Это используется как пользователь для директории$HOME, еслиfileне указано, и как владелец файла. Если вы хотите, чтобы владелец файла отличался от пользователя для$HOME, укажитеfileкак абсолютный путь.run_as_group— Используйте это, чтобы указать группу владельца файла для конкретного файла учетных данных. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_group. В противном случае будет использоватьсяroot. ПРИМЕЧАНИЕ: Группа должна уже существовать — роль не создаст ее. Группа должна быть в/etc/subgid.mode— Режим файла — значение по умолчанию"0600".
Например, если у вас есть
podman_credential_files:
- file_src: auth.json
run_as_user: my_user
Локальный файл auth.json будет найден в обычных путях поиска файлов Ansible и будет скопирован в файл /home/my_user/.config/containers/auth.json на управляемом узле. Владелец файла будет my_user, а режим будет "0600". Директории /home/my_user/.config и /home/my_user/.config/containers будут созданы, если они не существуют.
podman_registry_certificates
Эта переменная является списком словарей, который позволяет управлять TLS сертификатами и ключами, используемыми для подключения к реестрам. Директории, форматы и файлы описаны в man containers-certs.d. Имена ключей, используемых для TLS сертификатов и ключей, следуют конвенциям именования TLS системных ролей. ПРИМЕЧАНИЕ: префикс client_ был убран здесь для cert и private_key, потому что в этом контексте только клиенты.
ПРИМЕЧАНИЕ: Настоятельно рекомендуется использовать Ansible Vault для шифрования частных ключей и любых других конфиденциальных значений.
Ключи каждого словаря следующие:
state— по умолчаниюpresent. Используйтеabsent, чтобы удалить файлы.run_as_user— Это пользователь, который будет владельцем файлов и используется для поиска директории$HOMEдля файлов. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_user. В противном случае будет использоватьсяroot.run_as_group— Это группа, которая будет владельцем файлов. Если вы не укажете это, будет использовано глобальное значение по умолчаниюpodman_run_as_group. В противном случае будет использоватьсяroot.registry_host— Обязательное поле — имя хоста илиhostname:portреестра. Это будет использоваться как имя директории в$HOME/.config/containers/certs.d(для контейнеров без корня) или/etc/containers/certs.d(для системных контейнеров), где будут храниться сертификаты и ключи. Если использоватьstate: absentи все файлы будут удалены, директория будет удалена.cert— имя файла в директорииcerts.d, содержащего TLS клиентский сертификат. Если не указано, используется базовое имяcert_src. Если это не указано, используетсяclient.cert.private_key— имя файла в директорииcerts.d, содержащего частный TLS ключ клиента. Если не указано, используется базовое имяprivate_key_src. Если это не указано, используетсяclient.key.ca_cert— имя файла в директорииcerts.d, содержащего CA сертификат TLS. Если не указано, используется базовое имяca_cert_src. Если это не указано, используетсяca.crt.cert_src— имя файла на узле управления, который будет скопирован вcert.private_key_src— имя файла на узле управления, который будет скопирован вprivate_key.ca_cert_src— имя файла на узле управления, который будет скопирован вca_cert.cert_content— содержимое сертификата, которое будет скопировано вcert.private_key_content— содержимое частного ключа, которое будет скопировано вprivate_key.
podman_run_as_user: root
podman_registry_certificates:
- registry_host: quay.io:5000
cert_src: client.cert
private_key_content: !vault |
$ANSIBLE_VAULT.....
ca_cert_src: ca.crt
Это создаст директорию /etc/containers/certs.d/quay.io:5000/, скопирует локальный файл client.cert, найденный по обычным путям поиска файлов Ansible, в /etc/containers/certs.d/quay.io:5000/client.cert, скопирует содержимое зашифрованного Ansible Vault private_key_content в /etc/containers/certs.d/quay.io:5000/client.key, и скопирует локальный файл ca.crt, найденный по обычным путям поиска файлов Ansible, в /etc/containers/certs.d/quay.io:5000/ca.crt.
podman_validate_certs
Логическое значение — по умолчанию null — используйте это, чтобы контролировать, будет ли проверка TLS сертификатов при загрузке изображений из реестров. Значение по умолчанию null означает использование того, что является стандартным для модуля containers.podman.podman_image. Вы можете переопределить это для каждой спецификации, используя validate_certs.
podman_prune_images
Логическое значение - по умолчанию false - по умолчанию роль не будет очищать неиспользуемые образы при удалении quadlet и других ресурсов. Установите это значение в true, чтобы сказать роли удалить неиспользуемые образы при очистке.
podman_transactional_update_reboot_ok
Эта переменная применима только для систем обновлений с транзакционной обработкой. Если транзакционное обновление требует перезагрузки, роль продолжит выполнение перезагрузки, если podman_transactional_update_reboot_ok установлено на true. Если установлено на false, роль уведомит пользователя о том, что требуется перезагрузка, что позволяет выполнить индивидуальную обработку требования о перезагрузке. Если эта переменная не установлена, роль завершится с ошибкой, чтобы гарантировать, что требование о перезагрузке не будет упущено. Для систем обновлений без транзакционной обработки эта переменная игнорируется.
Переменные, экспортированные ролью
podman_version
Это строка версии используемой версии podman. Вы можете использовать это в своих шаблонах. Например, если вы хотите указать template_src quadlet для контейнера и использовать проверки состояния и секреты, если используется podman 4.5 или более поздней версии:
podman_quadlet_specs:
- template_src: my-app.container.j2
podman_secrets:
- name: my-app-pwd
data: .....
my-app.container.j2:
[Container]
{% if podman_version is version("4.5", ">=") %}
Secret=my-app-pwd,type=env,target=MYAPP_PASSWORD
HealthCmd=/usr/bin/test -f /path/to/my-app.file
HealthOnFailure=kill
{% else %}
PodmanArgs=--secret=my-app-pwd,type=env,target=MYAPP_PASSWORD
{% endif %}
podman_subuid_info, podman_subgid_info
Роль должна обеспечить наличие любых пользователей и групп в информации subuid и subgid. После извлечения этих данных они будут доступны в podman_subuid_info и podman_subgid_info. Это словари. Ключ — это имя пользователя или группы, а значение — это словарь с двумя полями:
start— начало диапазона идентификаторов для этого пользователя или группы, какintrange— диапазон идентификаторов для этого пользователя или группы, какint
podman_host_directories:
"/var/lib/db":
mode: "0777"
owner: "{{ 1001 + podman_subuid_info['dbuser']['start'] - 1 }}"
group: "{{ 1001 + podman_subgid_info['dbgroup']['start'] - 1 }}"
Где 1001 — это uid для пользователя dbuser, а 1001 — это gid для группы dbgroup.
ПРИМЕЧАНИЕ: в зависимости от пространства имен, используемого вашими контейнерами, вы можете не иметь возможности использовать информацию subuid и subgid, которая извлекается с помощью getsubids, если это возможно, или напрямую из файлов /etc/subuid и /etc/subgid на хосте. Смотрите режимы пространств имен пользователя podman для получения дополнительной информации.
Примеры плейбуков
Создание контейнера без корня с монтированием тома:
- name: Управление контейнерами podman и службами
hosts: все
vars:
podman_create_host_directories: true
podman_firewall:
- port: 8080-8081/tcp
state: enabled
- port: 12340/tcp
state: enabled
podman_selinux_ports:
- ports: 8080-8081
setype: http_port_t
podman_kube_specs:
- state: started
run_as_user: dbuser
run_as_group: dbgroup
kube_file_content:
apiVersion: v1
kind: Pod
metadata:
name: db
spec:
containers:
- name: db
image: quay.io/db/db:stable
ports:
- containerPort: 1234
hostPort: 12340
volumeMounts:
- mountPath: /var/lib/db:Z
name: db
volumes:
- name: db
hostPath:
path: /var/lib/db
- state: started
run_as_user: webapp
run_as_group: webapp
kube_file_src: /path/to/webapp.yml
roles:
- linux-system-roles.podman
Создание контейнера, работающего от имени root, с томом Podman:
- name: Управление корневыми контейнерами podman и службами
hosts: все
vars:
podman_firewall:
- port: 8080/tcp
state: enabled
podman_kube_specs:
- state: started
kube_file_content:
apiVersion: v1
kind: Pod
metadata:
name: ubi8-httpd
spec:
containers:
- name: ubi8-httpd
image: registry.access.redhat.com/ubi8/httpd-24
ports:
- containerPort: 8080
hostPort: 8080
volumeMounts:
- mountPath: /var/www/html:Z
name: ubi8-html
volumes:
- name: ubi8-html
persistentVolumeClaim:
claimName: ubi8-html-volume
roles:
- linux-system-roles.podman
Создание приложения quadlet с секретами. Ожидайте начала приложения до тех пор, пока все юниты не будут созданы. Обратите внимание, что порядок файлов в podman_quadlet_specs соответствует порядку зависимостей. Использование podman_create_host_directories: true создаст любые директории хоста, смонтированные в спецификации контейнера, указанные в директиве Volume=.
podman_create_host_directories: true
podman_activate_systemd_unit: false
podman_quadlet_specs:
- name: quadlet-demo
type: network
file_content: |
[Network]
Subnet=192.168.30.0/24
Gateway=192.168.30.1
Label=app=wordpress
- file_src: quadlet-demo-mysql.volume
- template_src: quadlet-demo-mysql.container.j2
- file_src: envoy-proxy-configmap.yml
- file_src: quadlet-demo.yml
- file_src: quadlet-demo.kube
activate_systemd_unit: true
podman_firewall:
- port: 8000/tcp
state: enabled
- port: 9000/tcp
state: enabled
podman_secrets:
- name: mysql-root-password-container
state: present
skip_existing: true
data: "{{ root_password_from_vault }}"
- name: mysql-root-password-kube
state: present
skip_existing: true
data: |
apiVersion: v1
data:
password: "{{ root_password_from_vault | b64encode }}"
kind: Secret
metadata:
name: mysql-root-password-kube
- name: envoy-certificates
state: present
skip_existing: true
data: |
apiVersion: v1
data:
certificate.key: {{ key_from_vault | b64encode }}
certificate.pem: {{ cert_from_vault | b64encode }}
kind: Secret
metadata:
name: envoy-certificates
Лицензия
MIT.
Информация об авторе
На основе podman-container-systemd Илькки Тенгвалла ilkka.tengvall@iki.fi.
Авторы: Том Карлин, Рич Меггинсон, Адам Миллер, Валентин Ротберг
ansible-galaxy install linux-system-roles.podman