Red Hat Training
A Red Hat training course is available for RHEL 8
8.5. Vagens de inicialização automática usando systemd
Você pode iniciar múltiplos containers como serviços de sistema. Note que o comando systemctl deve ser usado somente no pod e você não deve iniciar ou parar containers individualmente via systemctl, pois eles são gerenciados pelo serviço de pod junto com o infra-container interno.
Procedimento
Criar uma cápsula vazia, por exemplo, chamada
systemd-pod:$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Liste todas as cápsulas:
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577
Criar dois recipientes na cápsula vazia. Por exemplo, para criar
container0econtainer1emsystemd-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
Liste todas as cápsulas e recipientes associados a elas:
$ 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
Gerar o arquivo da unidade do sistema para o novo módulo:
$ 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 são gerados três arquivos de unidade do sistema, um para o módulo
systemd-pode dois para os recipientescontainer0econtainer1.Exibir o arquivo da unidade
pod-systemd-pod.service:$ 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
-
A linha
Requiresna seção[Unit]define as dependências dos arquivos das unidadescontainer-container0.serviceecontainer-container1.service. Ambos os arquivos unitários serão ativados. -
As linhas
ExecStarteExecStopna seção[Service]iniciam e param o infracontainer, respectivamente.
-
A linha
Exibir o arquivo da unidade
container-container0.service:$ 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
-
A linha
BindsTona seção[Unit]define a dependência do arquivo da unidadepod-systemd-pod.service -
As linhas
ExecStarteExecStopna seção[Service]iniciam e param ocontainer0respectivamente.
-
A linha
Exibir o arquivo da unidade
container-container1.service:Container-container1.serviço de $ cat
Copiar todos os arquivos gerados para
$HOME/.config/systemd/userpara instalação como usuário não-rootal:$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/user
Habilite o serviço e comece com o login do usuário:
$ 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.
Note que o serviço pára no logout do usuário.
Etapas de verificação
Verifique se o serviço está habilitado:
$ systemctl is-enabled pod-systemd-pod.service enabled
Recursos adicionais
-
Para mais informações sobre o comando
podman create, digiteman podman-create. -
Para mais informações sobre o comando
podman generate systemd, digiteman podman-generate-systemd. -
Para mais informações sobre o comando
systemctl, digiteman systemctl. - Para mais informações, veja o artigo de Valentin Rothberg, " Running containers with Podman and shareable systemd services ".
- Para saber mais sobre a configuração de serviços com o systemd, consulte o capítulo Configurando configurações básicas do sistema chamado Gerenciando serviços com o systemd.