Eu tento iniciar o etcd como um serviço systemd executado em um contêiner com podman .
Após o início, recebo este log de erros do systemd:
systemd[1]: etcd.service: Got notification message from PID 4696, but reception only permitted for main PID 4868
Mas o etcd parece ser capaz de iniciar uma tentativa de notificar o daemon do contêiner:
21T15:31:08.817Z","caller":"etcdserver/server.go:2500","msg":"cluster version>
Aug 21 15:31:08 ip-10-0-0-71 podman[4696]: {"level":"info","ts":"2021-08-21T15:31:08.817Z","caller":"etcdmain/main.go:47","msg":"notifying init daemon>
Aug 21 15:31:08 ip-10-0-0-71 podman[4696]: {"level":"info","ts":"2021-08-21T15:31:08.818Z","caller":"etcdmain/main.go:53","msg":"successfully notified>
Mas o systemd parece não estar ciente disso e encerra o serviço etcd:
Aug 21 15:32:34 ip-10-0-0-71 systemd[1]: etcd.service: start operation timed out. Terminating.
Aug 21 15:32:35 ip-10-0-0-71 podman[4696]: {"level":"info","ts":"2021-08-21T15:32:35.000Z","caller":"osutil/interrupt_unix.go:64","msg":"received sign>
Aug 21 15:32:35 ip-10-0-0-71 podman[4696]: {"level":"info","ts":"2021-08-21T15:32:35.000Z","caller":"embed/etcd.go:367","msg":"closing etcd server","n>
Este é o status do serviço systemd:
$ sudo systemctl status etcd.service
● etcd.service - etcd
Loaded: loaded (/etc/systemd/system/etcd.service; enabled; vendor preset: enabled)
Active: failed (Result: timeout) since Sat 2021-08-21 15:32:35 UTC; 8min ago
Process: 4868 ExecStart=/usr/bin/podman run -p 2380:2380 -p 2379:2379 --volume=/var/lib/etcd:/etcd-data:z --name etcd 842445240665.dkr.ecr.eu-nort>
Main PID: 4868 (code=exited, status=0/SUCCESS)
CPU: 3.729s
Este é meu arquivo de serviço de unidade systemd para etcd iniciado com podman:
cat <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unit]
Description=etcd
After=podman_ecr_login.service mk_etcd_data_dir.service
[Service]
Type=notify
ExecStart=/usr/bin/podman run -p 2380:2380 -p 2379:2379 --volume=/var/lib/etcd:/etcd-data:z \
--name etcd <my-aws-account>.dkr.ecr.eu-north-1.amazonaws.com/etcd:v3.5.0 \
/usr/local/bin/etcd --data-dir=/etcd-data \
--name etcd0 \
--advertise-client-urls http://127.0.0.1:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://127.0.0.1:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd0=http://127.0.0.1:2380
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable etcd
sudo systemctl start etcd
Suspeito que isso possa estar relacionado Type=notify
ou talvez à maneira como uso podman ou etcd. Eu inicio o etcd de maneira semelhante à descrita na documentação do etcd: Run etcd clusters within containers - Running a single node etcd . Eu corro isso no Debian 11 com Podman 3.0.1.
Alguma sugestão sobre como posso iniciar o etcd com o podman como um serviço do systemd?
De acordo com este comentário do problema , esses serviços devem ser executados como
Type=simple
uma vez que não sinalizam de volta para o systemd. Este PR para podman configurá-lo para oType=exec
que também parece funcionar bem.Depois de alterar
Type=exec
no meu arquivo de unidade de serviço, agora funciona: