podman_systemd
Ansible Podman_systemd
Описание
Настройка единиц Podman Systemd для системных и безпривилегированных пользователей.
Установка
Требуются следующие роли. Если я добавлю их как зависимости, они выполнятся и вызовут сбой.
- linuxhq.sysctl
- notmycloud.yaml2ini
- notmycloud.systemd_unit
ВАЖНО: Требуется установка пакета toml
для Python. Установите с помощью pip.
Использование
Предоставьте следующие переменные для корректной работы этой роли.
PODMAN_SYSTEMD_INSTALL_COCKPIT
установит Cockpit с поддержкой Podman.
PODMAN_SYSTEMD_ALLOW_LOWEST_PORT
укажет на самый низкий порт, к которому может привязываться непривилегированный пользователь. Существует мнение, что низкие порты 1024 и ниже являются "защищенными" и должны быть ограничены для доверенных пользователей. Если это сервер с несколькими арендаторами, рекомендуется пропустить эту переменную. Однако, если вы полностью управляете этим сервером и настраиваете пользователей по сервисам, эта опция может избавить вас от некоторых проблем. По моему мнению, это можно установить на 0 для сервера без нескольких арендаторов.
PODMAN_SYSTEMD_ALLOW_PING
позволит непривилегированным пользователям отправлять пинг.
PODMAN_SYSTEMD_DEPLOY
содержит основную конфигурацию Podman. Создайте ключ для каждого пользователя, для которого будет настроена единица Systemd.
PODMAN_SYSTEMD_DEPLOY:
root:
и т.д...
user1:
и т.д...
user2:
и т.д...
Конфигурация пользователя
Root будет настроен в стандартной директории /etc/systemd/system
, в то время как пользователи будут настроены в директории ~/.config/system/user
. В этом примере мы настроим для непривилегированного пользователя.
debug_log: bool # установите в true, чтобы включить ведение журналов задач и отладки
PODMAN_SYSTEMD_DEPLOY:
myuser:
config:
storage:
storage:
driver: "overlay"
# пары ключ:значение, которые будут записаны в формате INI для storage.conf. Это будет помещено в соответствующую директорию для пользователя или, если пользователь root, в директорию конфигурации /etc.
# Пары ключ:значение должны следовать формату, как указано в роли notmycloud.yaml2ini.
containers:
engine:
network_cmd_options:
- "allow_host_loopback=true"
- "enable_ipv6=true"
env:
- "TMPDIR=$HOME/.cache/tmp/"
# пары ключ:значение, которые будут записаны в формате TOML для containers.conf. Это будет помещено в соответствующую директорию для пользователя или, если пользователь root, в директорию конфигурации /etc.
registries:
unqualified-search-registries:
- "docker.io"
# - "quay.io"
# - "registry.access.redhat.com"
registry:
# - prefix: "docker.io"
# location: "127.0.0.1:5000"
# insecure: true
# В ноябре 2020 года Docker ограничил загрузку изображений. Чтобы избежать этих ограничений при тестировании, всегда используйте зеркало google для квалифицированных и неквалифицированных изображений `docker.io`.
# См. https://cloud.google.com/container-registry/docs/pulling-cached-images
registry.mirror:
- location: "https://mirror.gcr.io"
# пары ключ:значение, которые будут записаны в формате TOML для registries.conf. Это будет помещено в соответствующую директорию для пользователя или, если пользователь root, в директорию конфигурации /etc.
login: # См. документацию модуля containers.podman.podman_login
- registry: registry.mydomain.com
username: registryuser
password: super$3(r37Password
systemd:
enable_socket: # По умолчанию False, включает сокет Podman API для пользователя или, если под root, по всей системе.
containers:
CONTAINERNAME: # Замените это на желаемое название контейнера, это также будет использоваться для файла единицы Systemd.
podman_options:
image:
network: # Сетевая строка, по умолчанию slirp4netns:allow_host_loopback=true,enable_ipv6=true
replace: # bool
restart: # "always"|"no"|"on-failure"|"unless-stopped" по умолчанию no
remove: # По умолчанию yes
stop_timeout: # По умолчанию 60 секунд
log_driver: # По умолчанию Passthrough, чтобы вы могли просматривать свои журналы в Journal
healthcheck:
cmd:
interval:
retries:
delay:
timeout:
environment: # Массив пар ключ-значение
key: "value"
ports: # 0.0.0.0:hostport:containerport
volumes:
- host:
container:
options:
type: # file/directory
labels: # Массив пар ключ-значение
key: "value"
other_options: # Строка или массив других опций, передаваемых в podman run
service_options: # См. переменную notmycloud.systemd_unit с глубиной, равной UNIT_NAME
pods:
PODNAME: # Замените это на желаемое имя пода, это также будет использовано для префикса связанных контейнеров.
pod_service_options: # См. переменную notmycloud.systemd_unit с глубиной, равной UNIT_NAME
CONTAINERNAME:
# Следуйте синтаксису выше PODMAN_SYSTEMD_DEPLOY.USERNAME.systemd.containers.CONTAINERNAME
Примечания
Сокет Podman
Сокет root будет включен по адресу: /run/podman/podman.sock
Сокет без привилегий будет включен по адресу: /run/user/$UID/podman/podman.sock
Директория конфигурации контейнера
Рекомендую использовать %E/%N/
в качестве корня конфигурации.
Это будет хранить конфигурацию либо в ~/.config/{service_name}/
, либо в /etc/{service_name}/
.
Для контейнеров, которым нужны несколько конфигурационных директорий, я буду использовать %E/%N/config1/
, %E/%N/config2/
и т.д.
Рекомендуемые другие опции
--init
Запустите инициализацию внутри контейнера, которая перенаправляет сигналы и собирает процессы. Подробнее см. containers/podman#1670--cap-drop=all
Удалить все возможности, вам, вероятно, потребуется добавить возможности, чтобы ваш контейнер работал правильно.--security-opt=no-new-privileges
Отключить возможность процессов контейнера получать дополнительные привилегии. Подробнее см. документация.--userns=keep-id
Соответствующий пользователь контейнера будет сопоставлен с идентификатором пользователя хоста.
Поддержка
Для получения поддержки, пожалуйста, создайте проблему и предоставьте следующие данные:
- Пример задачи/плейбука для воспроизведения вашей проблемы
- Полученный файл, который был создан.
ansible-galaxy install notmycloud/ansible-podman_systemd