事象
Liveness Probeを入れて再起動させているPodがCrashLoopBackOffとなって起動してこない。
# kubectl get pod NAME READY STATUS RESTARTS AGE liveness-exec 0/1 CrashLoopBackOff 7 (2m22s ago) 13m
尚、describeで詳細メッセージを見ると下記のメッセージが表示されている。
...Warning BackOff 38s (x28 over 8m16s) kubelet Back-off restarting failed container
環境情報
- Kubernetes v1.23
原因/解決策
RESTARTS数の蓄積により、kubeletがリスタート時に遅延(back-off delay)をかけている。
具体的な遅延時間はkubeletのログを確認することで把握できる。(以下の例では1m20s)
# journalctl -u kubelet ... ... kubelet[49647]: E0228 06:12:17.694318 49647 pod_workers.go:918] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"liveness\" with CrashLoopBackOff: \"back-off 1m20s restarting failed container=liveness pod=liveness-exec_default...
以下、補足です。
補足
定期的に再起動を繰り返す場合に以下のように特定のタイミングでCrashLoopBackOffとなります。
# kubectl get pod -w NAME READY STATUS RESTARTS AGE liveness-exec 1/1 Running 0 3s liveness-exec 1/1 Running 1 (0s ago) 76s liveness-exec 1/1 Running 2 (0s ago) 2m31s liveness-exec 1/1 Running 3 (0s ago) 3m46s liveness-exec 1/1 Running 4 (0s ago) 5m1s liveness-exec 1/1 Running 5 (0s ago) 6m16s liveness-exec 0/1 CrashLoopBackOff 5 (0s ago) 7m31s liveness-exec 1/1 Running 6 (93s ago) 9m4s liveness-exec 1/1 Running 7 (0s ago) 10m liveness-exec 0/1 CrashLoopBackOff 7 (0s ago) 11m liveness-exec 1/1 Running 8 (5m11s ago) 16m liveness-exec 1/1 Running 9 (0s ago) 17m ...
これはkubelet側にてrestartPolicyに従って再起動をかける際に追加でdelayをかけていることが原因の場合があります。以下は公式文書の抜粋。
After containers in a Pod exit, the kubelet restarts them with an exponential back-off delay (10s, 20s, 40s, …), that is capped at five minutes. Once a container has executed for 10 minutes without any problems, the kubelet resets the restart backoff timer for that container.
実際にkubeletのログを見に行くと、以下のようにback-offによる待ち時間のために起動待ちが発生していることが分かります。
...kubelet[49647]: E0228 06:27:57.549630 49647 pod_workers.go:918] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"liveness\" with CrashLoopBackOff: \"back-off 5m0s... ...kubelet[49647]: E0228 06:28:09.553612 49647 pod_workers.go:918] "Error syncing pod, skipping" err="failed to \"StartContainer\" for \"liveness\" with CrashLoopBackOff: \"back-off 5m0s...
以上。