8.5. Arranque automático de pods mediante systemd
Puede iniciar varios contenedores como servicios systemd. Tenga en cuenta que el comando systemctl
sólo debe utilizarse en el pod y no debe iniciar o detener contenedores individualmente a través de systemctl
, ya que son gestionados por el servicio del pod junto con el infra-contenedor interno.
Procedimiento
Cree un pod vacío, por ejemplo llamado
systemd-pod
:$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Enumerar todas las vainas:
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Cree dos contenedores en el pod vacío. Por ejemplo, para crear
container0
ycontainer1
ensystemd-pod
:$ podman create --pod systemd-pod --name container0 registry.access.redhat.com/ubi8 top $ podman create --pod systemd-pod --name container1 registry.access.redhat.com/ubi8 top
Enumerar todos los pods y contenedores asociados a ellos:
$ podman ps -a --pod CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME 24666f47d9b2 registry.access.redhat.com/ubi8:latest top 3 minutes ago Created container0 3130f724e229 systemd-pod 56eb1bf0cdfe k8s.gcr.io/pause:3.2 4 minutes ago Created 3130f724e229-infra 3130f724e229 systemd-pod 62118d170e43 registry.access.redhat.com/ubi8:latest top 3 seconds ago Created container1 3130f724e229 systemd-pod
Generar el archivo de unidad systemd para el nuevo pod:
$ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.service
Observe que se generan tres archivos de unidad systemd, uno para el pod
systemd-pod
y dos para los contenedorescontainer0
ycontainer1
.Mostrar
pod-systemd-pod.service
archivo de la unidad:$ cat pod-systemd-pod.service # pod-systemd-pod.service # autogenerated by Podman 2.0.3 # Tue Jul 28 14:00:46 EDT 2020 [Unit] Description=Podman pod-systemd-pod.service Documentation=man:podman-generate-systemd(1) Wants=network.target After=network-online.target Requires=container-container0.service container-container1.service Before=container-container0.service container-container1.service [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure ExecStart=/usr/bin/podman start c852fbaba568-infra ExecStop=/usr/bin/podman stop -t 10 c852fbaba568-infra ExecStopPost=/usr/bin/podman stop -t 10 c852fbaba568-infra PIDFile=/run/user/1000/containers/overlay-containers/a7ff86382608add27a03ac2166d5d0164199f01eadf80b68b06a406c195105fc/userdata/conmon.pid KillMode=none Type=forking [Install] WantedBy=multi-user.target default.target
-
La línea
Requires
en la sección[Unit]
define las dependencias de los archivos de unidadcontainer-container0.service
ycontainer-container1.service
. Ambos archivos de unidad se activarán. -
Las líneas
ExecStart
yExecStop
de la sección[Service]
inician y detienen el infra-contenedor, respectivamente.
-
La línea
Mostrar
container-container0.service
archivo de la unidad:$ cat container-container0.service # container-container0.service # autogenerated by Podman 2.0.3 # Tue Jul 28 14:00:46 EDT 2020 [Unit] Description=Podman container-container0.service Documentation=man:podman-generate-systemd(1) Wants=network.target After=network-online.target BindsTo=pod-systemd-pod.service After=pod-systemd-pod.service [Service] Environment=PODMAN_SYSTEMD_UNIT=%n Restart=on-failure ExecStart=/usr/bin/podman start container0 ExecStop=/usr/bin/podman stop -t 10 container0 ExecStopPost=/usr/bin/podman stop -t 10 container0 PIDFile=/run/user/1000/containers/overlay-containers/12e85378f2854b8283f791974494a02aa6c92630d76d1050237839b61508a008/userdata/conmon.pid KillMode=none Type=forking [Install] WantedBy=multi-user.target default.target
-
La línea
BindsTo
de la sección[Unit]
define la dependencia del archivo de unidadpod-systemd-pod.service
-
Las líneas
ExecStart
yExecStop
de la sección[Service]
inician y detienen elcontainer0
respectivamente.
-
La línea
Mostrar
container-container1.service
archivo de la unidad:$ cat contenedor-contenedor1.service
Copie todos los archivos generados en
$HOME/.config/systemd/user
para instalarlos como usuario no root:$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
Habilitar el servicio e iniciarlo al iniciar la sesión del usuario:
$ systemctl enable --user pod-systemd-pod.service Created symlink /home/user1/.config/systemd/user/multi-user.target.wants/pod-systemd-pod.service
/home/user1/.config/systemd/user/pod-systemd-pod.service. Created symlink /home/user1/.config/systemd/user/default.target.wants/pod-systemd-pod.service /home/user1/.config/systemd/user/pod-systemd-pod.service. Tenga en cuenta que el servicio se detiene al cerrar la sesión del usuario.
Pasos de verificación
Comprueba si el servicio está activado:
$ systemctl is-enabled pod-systemd-pod.service enabled
Recursos adicionales
-
Para más información sobre el comando
podman create
, escribaman podman-create
. -
Para más información sobre el comando
podman generate systemd
, escribaman podman-generate-systemd
. -
Para más información sobre el comando
systemctl
, escribaman systemctl
. - Para más información, consulta el artículo Running containers with Podman and shareable systemd services de Valentin Rothberg.
- Para obtener más información sobre la configuración de los servicios con systemd, consulte el capítulo de la guía Configuración de los ajustes básicos del sistema llamado Gestión de los servicios con systemd.