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 Соответствующий пользователь контейнера будет сопоставлен с идентификатором пользователя хоста.

Поддержка

Для получения поддержки, пожалуйста, создайте проблему и предоставьте следующие данные:

  • Пример задачи/плейбука для воспроизведения вашей проблемы
  • Полученный файл, который был создан.
О проекте

Configure Podman Systemd Units for system and rootless users.

Установить
ansible-galaxy install notmycloud/ansible-podman_systemd
Лицензия
mit
Загрузки
224
Владелец