排查 Pod CrashLoopBackOff
Pod 如果处于 CrashLoopBackOff
状态说明之前是启动了,只是又异常退出了,只要 Pod 的 restartPolicy 不是 Never 就可能被重启拉起。
通过 kubectl 可以发现是否有 Pod 发生重启:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
grafana-c9dd59d46-s9dc6 2/2 Running 2 69d
当 RESTARTS
大于 0 时,说明 Pod 中有容器重启了。
这时,我们可以先看下容器进程的退出状态码来缩小问题范围。
排查容器退出状态码
使用 kubectl describe pod <pod name>
查看异常 pod 的状态:
Containers:
kubedns:
Container ID: docker://5fb8adf9ee62afc6d3f6f3d9590041818750b392dff015d7091eaaf99cf1c945
Image: ccr.ccs.tencentyun.com/library/kubedns-amd64:1.14.4
Image ID: docker-pullable://ccr.ccs.tencentyun.com/library/kubedns-amd64@sha256:40790881bbe9ef4ae4ff7fe8b892498eecb7fe6dcc22661402f271e03f7de344
Ports: 10053/UDP, 10053/TCP, 10055/TCP
Host Ports: 0/UDP, 0/TCP, 0/TCP
Args:
--domain=cluster.local.
--dns-port=10053
--config-dir=/kube-dns-config
--v=2
State: Running
Started: Tue, 27 Aug 2019 10:58:49 +0800
Last State: Terminated
Reason: Error
Exit Code: 255
Started: Tue, 27 Aug 2019 10:40:42 +0800
Finished: Tue, 27 Aug 2019 10:58:27 +0800
Ready: True
Restart Count: 1
在容器列表里看 Last State
字段,其中 ExitCode
即程序上次退出时的状态码,如果不为 0,表示异常退出,我们可以分析下原因。