(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Kubernetes】Livenessによる再起動時にCrashLoopBackOffとなる事象

スポンサーリンク

事象

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...

以上。