Vreau să pornesc etcd (un singur nod) în docker de la systemd, dar ceva pare să nu meargă greșit - se termină la aproximativ 30 de secunde după pornire.
Se pare că serviciul începe în stare "activare" dar terminați după aproximativ 30 de secunde fără a ajunge la starea "activ". Poate că lipsește vreo semnalizare între containerul docker și systemd?
Actualizați (vezi partea de jos a postării): starea serviciului systemd ajunge a eșuat (Rezultat: expirare)
- când scot Restart=la eșec
instrucție.
Când verific starea serviciului etcd după pornire, obțin acest rezultat:
$ sudo systemctl status etcdâ etcd.service - etcd Loaded: încărcat (/etc/systemd/system/etcd.service; activat; prestabilit furnizor: dezactivat)
Activ: se activează (repornire automată) (Rezultat: cod de ieșire) din miercuri 2021-08-18 20:13:30 UTC; acum 4s
Proces: 2971 ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --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://10.0.0.11: 2379 --listen-client-urls http://0.0.0.0:2379 --initial-advertise-peer-urls http://10.0.0.11:2380 --listen-peer-urls http://0.0.0.0: 2380 --initial-cluster etcd0=http://10.0.0.11:2380 (code=exited, status=125)
PID principal: 2971 (cod=ieșit, stare=125)
Rulez acest lucru pe o mașină Amazon Linux 2, cu un script de date utilizator care să ruleze la lansare. Am confirmat asta docker.serviciu
și docker_ecr_login.service
rulează cu succes.
Și la scurt timp după lansarea mașinii, pot vedea că etcd rulează:
sudo systemctl status etcd
â etcd.service - etcd
Încărcat: încărcat (/etc/systemd/system/etcd.service; activat; prestabilit furnizor: dezactivat)
Activ: se activează (începe) din miercuri 2021-08-18 20:30:07 UTC; acum 1 min 20 de secunde
PID principal: 1573 (docker)
Sarcini: 9
Memorie: 24,3 M
CGroup: /system.slice/etcd.service
ââ1573 /usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd my-aws-account.dkr.ecr. eu-north-1.amazonaws.com...
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.690Z","logger":"raft","caller":"...rm 2"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.691Z","caller":"etcdserver/serve..."3.5"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","caller":"membership/clust..."3.5"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","caller":"etcdserver/server.go:2...
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","caller":"api/capability.g..."3.5"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","caller":"etcdserver/serve..."3.5"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.693Z","caller":"embed/serve.go:9...ests"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.695Z","caller":"etcdmain/main.go...emon"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.695Z","caller":"etcdmain/main.go...emon"}
18 august 20:30:17 ip-10-0-0-11.eu-north-1.compute.internal docker[1573]: {"level":"info","ts":"2021-08-18T20 :30:17.702Z","caller":"embed/serve.go:1...2379"}
Sugestie: Unele linii au fost elipsate, utilizați -l pentru a le afișa în întregime.
Obțin același comportament dacă etcd ascultă Node IP (10.0.0.11) sau 127.0.0.1.
Pot rula etcd local, pornit de la linia de comandă (și nu se termină după 30 de secunde), cu:
sudo docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --name etcd-local \
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
Parametrii pentru etcd este similar cu Rularea unui singur nod etcd - documentația ectd 3.5.
Aceasta este partea relevantă a scriptului de pornire care are scopul de a lansa etcd:
sudo docker volume create --name etcd-data
pisica <<EOF | sudo tee /etc/systemd/system/etcd.service
[Unitate]
Descriere=etcd
După=docker_ecr_login.service
[Serviciu]
Tip = notificare
ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data \
--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://10.0.0.11:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--initial-advertise-peer-urls http://10.0.0.11:2380 \
--listen-peer-urls http://0.0.0.0:2380 \
--initial-cluster etcd0=http://10.0.0.11:2380
Restart=la eșec
RestartSec=5
[Instalare]
WantedBy=multi-user.target
EOF
sudo systemctl enable etcd
sudo systemctl start etcd
Când listăm toate containerele de pe mașină, pot vedea că a funcționat:
sudo docker ps -a
CONTAINER ID IMAGINE COMANDA CREAȚĂ STAREA PORTURI NUMELE
a744aed0beb1 my-aws-account.dkr.ecr.eu-north-1.amazonaws.com/etcd:v3.5.0 „/usr/local/bin/etcd⦔ 25 minute în urmă Ieșit (0) 24 minute în urmă etcd
dar bănuiesc că nu poate fi repornit deoarece numele containerului există deja.
De ce containerul etcd se termină după ~ 30 de secunde, când este pornit de la systemd? Se pare că a pornit cu succes, dar systemd îl arată doar în starea „activare”, dar niciodată în starea „activ” și pare să fie terminat după aproximativ 30 de secunde.Lipsește o semnalizare de la containerul docker etcd către systemd? Dacă da, cum pot corecta semnalizarea?
ACTUALIZAȚI:
După îndepărtarea Restart=la eșec
instrucțiuni în fișierul unității de service, acum primesc starea: a eșuat (Rezultat: expirare):
$ sudo systemctl status etcd
â etcd.service - etcd
Încărcat: încărcat (/etc/systemd/system/etcd.service; activat; prestabilit furnizor: dezactivat)
Activ: eșuat (Rezultat: expirare) de miercuri 2021-08-18 21:35:54 UTC; acum 5 minute
Proces: 1567 ExecStart=/usr/bin/docker run -p 2380:2380 -p 2379:2379 --volume=etcd-data:/etcd-data --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 (code=exited, status=0/SUCCESS)
PID principal: 1567 (cod=ieșit, stare=0/SUCCESS)
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.332Z","caller":"osutil/interrupt...ated"}
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.333Z","caller":"embed/etcd.go:36...379"]}
Aug 18 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: AVERTISMENT: 2021/08/18 21:35:54 [core] grpc: addrConn. createTransport a eșuat...ing...
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.335Z","caller":"etcdserver/serve...6a6c"}
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.337Z","caller":"embed/etcd.go:56...2380"}
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.338Z","caller":"embed/etcd.go:56...2380"}
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal docker[1567]: {"level":"info","ts":"2021-08-18T21 :35:54.339Z","caller":"embed/etcd.go:36...379"]}
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: Nu s-a pornit etcd.
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: Unitatea etcd.service a intrat în stare eșuată.
18 august 21:35:54 ip-10-0-0-11.eu-north-1.compute.internal systemd[1]: etcd.service failed.
Sugestie: Unele linii au fost elipsate, utilizați -l pentru a le afișa în întregime.