文章目录

  • 一、简介
  • 二、常见pod状态
  • 三、pod异常状态
  • 总结:整理不易,如果对你有帮助,可否点赞关注一下?




一、简介

一般来说,无论Pod处于什么异常状态,都可以执行以下命令来查看Pod的状态。

#查看 Pod 的配置是否正确
kubectl get pod <pod-name> -o yaml

#查看 Pod 的事件
kubectl describe pod <pod-name> 

#查看容器日志
kubectl logs <pod-name> [-c <container-name>]

二、常见pod状态

常见的pod状态如下所示:

排查容器退出 容器异常情况处理操作_排查容器退出


三、pod异常状态

#Pending状态
原因:Pod还没有调度到某个Node节点上
排查思路:
1、资源不足,集群内所有的Node都不满足该Pod请求的CPU、内存、GPU等资源
2、HostPort被占用,通常推荐使用Service对外开放服务端口

#imagePullBackOff状态
原因:通常是镜像拉取失败
排查思路:
1、docker pull <image> 来验证镜像是否可以正常拉取
2、docker images | grep <images>查看镜像是否存在(系统有时会因为资源问题自动删除一部分镜像)

#Waiting或ContainerCreating状态
原因:
1、镜像拉取失败,比如配置了镜像错误、Kubelet 无法访问镜像、私有镜像的密钥配置错误、镜像太大,拉取超时等
2、CNI网络错误,一般需要检查CNI网络插件的配置,比如无法配置Pod、无法分配IP地址
3、容器无法启动,需要检查是否打包了正确的镜像或者是否配置了正确的容器参数

#Evicted状态
原因:
1、出现这种情况,多见于系统内存或硬盘资源不足,可df-h查看docker存储所在目录的资源使用情况,如果百分比大于85%,就要及时清理下资源,尤其是一些大文件、docker镜像。

#Error状态
通常处于Error状态说明Pod启动过程中发生了错误。
原因:
1、依赖的 ConfigMap、Secret 或者 PV 等不存在
2、请求的资源超过了管理员设置的限制,比如超过了LimitRange 等
3、违反集群的安全策略,比如违反了PodSecurityPolicy 等
4、容器无权操作集群内的资源,比如开启RBAC后,需要为ServiceAccount配置角色绑定

#CrashLoopBackOff状态
CrashLoopBackOff 状态说明容器曾经启动了,但可能又异常退出了
原因:
1、容器进程退出
2、健康检查失败退出

#Unknown状态
原因:
1、所谓pod是什么状态是apiserver和运行在pod节点的kubelet进行通信获取状态信息的,如果节点之上的kubelet本身出故障,那么apiserver就连不上kubelet,得不到信息了,就会看Unknown