notmycloud.podman_systemd

Ansible Podman_systemd

Descripción

Configura las Unidades Systemd de Podman para usuarios del sistema y usuarios sin privilegios.

Instalación

También se requieren los siguientes roles. Si los agrego como dependencias, se ejecutarán y fallarán.

  • linuxhq.sysctl
  • notmycloud.yaml2ini
  • notmycloud.systemd_unit

IMPORTANTE: Requiere la instalación del paquete de Python toml. Instala con pip.

Uso

Proporciona las siguientes variables para que este rol funcione correctamente. PODMAN_SYSTEMD_INSTALL_COCKPIT instalará Cockpit con soporte para Podman. PODMAN_SYSTEMD_ALLOW_LOWEST_PORT especificará el puerto más bajo al que puede vincularse un usuario sin privilegios. Se debate que los puertos bajos de 1024 o menos son "seguros" y deben limitarse a usuarios de confianza. Si este es un servidor multi-tenant, se recomienda omitir esta variable. Sin embargo, si gestionas completamente este servidor y configuras usuarios por servicio, esta opción puede ahorrarte problemas. En mi opinión, esto puede establecerse en 0 para un servidor que no es multi-tenant. PODMAN_SYSTEMD_ALLOW_PING permitirá a los usuarios sin privilegios hacer ping. PODMAN_SYSTEMD_DEPLOY contiene la mayor parte de la configuración de Podman. Crea una clave para cada usuario que tendrá una unidad Systemd configurada.

PODMAN_SYSTEMD_DEPLOY:
  root:
    etc...
  user1:
    etc...
  user2:
    etc...

Configuración del usuario

El usuario root será configurado en el directorio predeterminado /etc/systemd/system, mientras que los usuarios serán configurados en el directorio ~/.config/system/user. En este ejemplo, configuraremos para un usuario sin privilegios.

debug_log: bool # establece en true para habilitar el registro de tareas y depuración
PODMAN_SYSTEMD_DEPLOY:
  myuser:
    config:
      storage:
        storage:
          driver: "overlay"
        # pares clave:valor que se escribirán en formato INI para storage.conf. Esto se colocará en el directorio apropiado para un usuario o, si el usuario es root, en el directorio de configuración /etc.
        # Los pares clave:valor deben seguir el formato especificado por el rol notmycloud.yaml2ini.
      containers:
        engine:
          network_cmd_options:
            - "allow_host_loopback=true"
            - "enable_ipv6=true"
          env: 
            - "TMPDIR=$HOME/.cache/tmp/"
        # pares clave:valor que se escribirán en formato TOML para containers.conf. Esto se colocará en el directorio apropiado para un usuario o, si el usuario es root, en el directorio de configuración /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
          # En noviembre de 2020, Docker limita la tasa de descarga de imágenes. Para evitar alcanzar estos
          # límites mientras pruebas, siempre usa el espejo de Google para imágenes calificadas y
          # no calificadas de `docker.io`.
          # Ref: https://cloud.google.com/container-registry/docs/pulling-cached-images
        registry.mirror:
          - location: "https://mirror.gcr.io"
        # pares clave:valor que se escribirán en formato TOML para registries.conf. Esto se colocará en el directorio apropiado para un usuario o, si el usuario es root, en el directorio de configuración /etc.
      login: # Consulta la documentación para el módulo containers.podman.podman_login
        - registry: registry.mydomain.com
          username: registryuser
          password: super$3(r37Password
    systemd:
      enable_socket: # Por defecto es False, habilita el socket de la API de Podman para el usuario o, si es root, en todo el sistema.
      containers:
        CONTAINERNAME: # Reemplaza esto con el nombre que desees para el contenedor, esto también se utilizará para el archivo de unidad de Systemd.
          podman_options:
            image:
            network: # Cadena de red, predeterminado a slirp4netns:allow_host_loopback=true,enable_ipv6=true
            replace: # bool
            restart: # "always"|"no"|"on-failure"|"unless-stopped" predeterminado no
            remove: # Predeterminado a sí
            stop_timeout: # Predeterminado a 60 segundos
            log_driver: # Predeterminado a Passthrough, así que puedes ver tus registros en el diario
            healthcheck:
              cmd:
              interval:
              retries:
              delay:
              timeout:
            environment: # Array de pares clave-valor
              key: "value"
            ports: # 0.0.0.0:hostport:containerport
            volumes: 
              - host:
                container:
                options:
                type: # file/directory
            labels: # Array de pares clave-valor
              key: "value"
            other_options: # Cadena o array de otras opciones a pasar a podman run
          service_options: # Consulta notmycloud.systemd_unit variable profundidad igual a UNIT_NAME
      pods:
        PODNAME: # Reemplaza esto con el nombre que desees para el pod, esto también se utilizará para prefijar los contenedores asociados.
          pod_service_options: # Consulta notmycloud.systemd_unit variable profundidad igual a UNIT_NAME
          CONTAINERNAME:
            # Sigue la sintaxis anterior PODMAN_SYSTEMD_DEPLOY.USERNAME.systemd.containers.CONTAINERNAME

Otras Notas

Socket de Podman

El socket de root se habilitará en: /run/podman/podman.sock
El socket sin privilegios se habilitará en: /run/user/$UID/podman/podman.sock

Directorio de configuración de contenedores

Recomiendo que uses %E/%N/ como tu raíz de configuración.
Esto almacenará la configuración en ~/.config/{service_name}/ o /etc/{service_name}/.
Para contenedores que necesitan múltiples directorios de configuración, usaré %E/%N/config1/, %E/%N/config2/, etc...

Otras opciones recomendadas

--init Ejecuta un init dentro del contenedor que reenvía señales y recoge procesos. Consulta containers/podman#1670 para más información
--cap-drop=all Elimina todas las capacidades, es probable que necesites agregar capacidades para que tu contenedor funcione correctamente.
--security-opt=no-new-privileges Deshabilita que los procesos del contenedor ganen privilegios adicionales. Consulta la documentación para más información.
--userns=keep-id Mapea el usuario del contenedor al ID de usuario del host.

Soporte

Para soporte, por favor crea un problema y proporciona los siguientes elementos:

  • Ejemplo de tarea/playbook para replicar tu problema
  • Archivo resultante que se crea.
Acerca del proyecto

Configure Podman Systemd Units for system and rootless users.

Instalar
ansible-galaxy install notmycloud.podman_systemd
Licencia
mit
Descargas
234
Propietario