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.
ansible-galaxy install notmycloud.podman_systemd