kubelet.service
kubelet.serviceは次のとおりですdocker.service
。
[Unit]
Description=kubelet
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/local/bin/kubelet ...
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
再起動すると、docker.service
kubelet.serviceが自動的に再起動されます。ただし、サーバーの再起動時docker.service
に起動に失敗すると、kubelet.serviceは自動的に再起動されません。
# journalctl -u kubelet.service
-- Logs begin at Fri 2018-05-25 09:35:00 CST, end at Fri 2018-05-25 09:53:13 CST. --
May 25 09:35:03 debian systemd[1]: Dependency failed for kubelet.
May 25 09:35:03 debian systemd[1]: kubelet.service: Job kubelet.service/start failed with result 'dependency'.
# journalctl -u docker
-- Logs begin at Fri 2018-05-25 09:35:00 CST, end at Fri 2018-05-25 09:53:46 CST. --
May 25 09:35:03 debian systemd[1]: Starting Docker Application Container Engine...
May 25 09:35:03 debian dockerd[1905]: invalid value "" for flag --mtu: strconv.ParseInt: parsing "": invalid syntax
May 25 09:35:03 debian dockerd[1905]: See '/usr/bin/dockerd --help'.
May 25 09:35:03 debian systemd[1]: docker.service: Main process exited, code=exited, status=125/n/a
May 25 09:35:03 debian systemd[1]: Failed to start Docker Application Container Engine.
May 25 09:35:03 debian systemd[1]: docker.service: Unit entered failed state.
May 25 09:35:03 debian systemd[1]: docker.service: Failed with result 'exit-code'.
May 25 09:35:12 debian systemd[1]: docker.service: Service hold-off time over, scheduling restart.
May 25 09:35:12 debian systemd[1]: Stopped Docker Application Container Engine.
May 25 09:35:12 debian systemd[1]: Starting Docker Application Container Engine...
ご覧のとおり、kubeletは09:35:03に停止し、dockerが09:35:12に正常に起動した後も決して再起動されません.
答え1
答え2
Restart
失敗した依存関係を参照するのではなく、そのデバイスに属するプロセスを参照します。
man systemd.service
:
Restart =
サービスプロセスが終了、終了、またはタイムアウトしたときにサービスを再起動するかどうかを設定します。サービスプロセスはデフォルトのサービスプロセスである可能性がありますが、ExecStartPre =、ExecStartPost =、ExecStop =、ExecStopPost =、またはExecReload =で指定されたプロセスのいずれかです。システム操作(サービスの停止または再起動など)によってプロセスが終了した場合、サービスは再起動されません。タイムアウトには、欠落している監視デバイスの「接続の維持」の期限、サービスの開始、再ロード、およびジョブの停止のタイムアウトが含まれます。