K8S集群中Pod资源常见的异常状态以及排查思路
1.Pod资源的结构
Pod资源中会有一个基础容器Pause容器,每一个Pod资源下都会有一个Pause容器,Pause容器负责创建一个虚拟网络和存储卷,Pod资源中的所有容器都会与Pause共享网络资源以及存储资源,同一个Pod中的多个容器直接通信可以使用localhost的形式直接通信。
2.Pod资源常见的几种故障状态
Pod资源常见的故障状态大致分为十种:
-
Running
状态:处于Running状态Pod资源不一定可用,当Pod资源处于健康检查时也会显示Running状态,但是不一定可能,健康检查失败后会一直重启容器,此时也需要排查。一定要观察资源的READY是否两个值都一样,如果一样表示成功启动。 -
Pending
状态:当Pod资源由于Node节点上的资源不够或者存储没有定义对的情况下,Pod资源会处于Pending挂起状态。 -
Waiting
状态:当存储卷PVC挂载错误或者节点产生故障时,Pod资源hi处于Waiting等待状态。 -
ContainerCreateing
状态:Pod处于正在创建的状态,如果长时间处于该状态,可能是由于调度的Node节点出现了问题。 -
ImagePullBackOff
状态:当容器的镜像拉取失败,Pod就会处于该状态。 -
CrashLoopBackOff
状态:当容器无法正常启动,可能是由于程序问题就会导致Pod资源处于该状态。 -
Error
状态:Pod资源状态异常,需要查看详细信息和日志进行定位。 -
Terminating
状态:Pod资源处于删除状态,通过观察详细信息和日志进行排查。 -
Unknown
状态:Pod资源处于未知状态,通过观察详细信息和日志进行排查。 -
Evicted
状态:Pod资源处于被驱赶的状态,可能是由于Node节点资源不足或者Node几点出发驱逐机制导致。
3.Pod资源状态异常的排查思路
1)首先排查出当前Pod资源处于什么状态。
kubectl get pod
2)当知道Pod处于什么状态后,通过查看Pod资源的详细信息获取更详细的描述。
kubectl describe pod <pod_name>
3)如何还是无法解决,那么久查询Pod中容器的运行日志。
kubectl logs -f <pod_name> -c <container>