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
$ podman pod create --name systemd-pod 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ podman pod ps POD ID NAME STATUS CREATED # OF CONTAINERS INFRA ID 11d4646ba41b systemd-pod Created 40 seconds ago 1 8a428b257111 11d4646ba41b1fffa51c108cbdf97cfab3213f7bd9b3e1ca52fe81b90fed5577Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 topCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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-podCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ podman generate systemd --files --name systemd-pod /home/user1/pod-systemd-pod.service /home/user1/container-container0.service /home/user1/container-container1.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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:Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
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
Container-container1.serviço de $ catCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ cp pod-systemd-pod.service container-container0.service container-container1.service $HOME/.config/systemd/userCopy to Clipboard Copied! Toggle word wrap Toggle overflow 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. $ 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. Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ systemctl is-enabled pod-systemd-pod.service enabledCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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.