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

  1. Cree un pod vacío, por ejemplo llamado systemd-pod:

    $ podman pod create --name systemd-pod
    11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
  2. 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
  3. Cree dos contenedores en el pod vacío. Por ejemplo, para crear container0 y container1 en systemd-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
  4. 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
  5. 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 contenedores container0 y container1.

  6. 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 unidad container-container0.service y container-container1.service. Ambos archivos de unidad se activarán.
    • Las líneas ExecStart y ExecStop de la sección [Service] inician y detienen el infra-contenedor, respectivamente.
  7. 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 unidad pod-systemd-pod.service
    • Las líneas ExecStart y ExecStop de la sección [Service] inician y detienen el container0 respectivamente.
  8. Mostrar container-container1.service archivo de la unidad:

    $ cat contenedor-contenedor1.service
  9. 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
  10. 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, escriba man podman-create.
  • Para más información sobre el comando podman generate systemd, escriba man podman-generate-systemd.
  • Para más información sobre el comando systemctl, escriba man 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.
Red Hat logoGithubRedditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

© 2024 Red Hat, Inc.