一、pod处于pending状态

原因:

如果 Pod 被卡在 Pending 状态,就意味着它不能调度在某个节点上。一般来说,这是因为某种类型的资源不足而导致无法调度。

排查方法:
1、查看pod详细信息,event中会显示具体无法调度的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

存在的问题:当前没有满足调度条件的节点:

1、节点资源不足
2、HostPort被占用
3、节点不存在对应的标签
4、节点存在污点

建议解决方案
  1. 节点资源不足:
    建议解决方案:集群新增节点。
    紧急解决方案:缩减非核心业务pod数量。
  2. HostPort被占用
    建议解决方案:检查端口冲突,修改对端;建议采用service方式暴露服务
  3. 节点不存在对应的标签
    建议解决方案:检查标签是否正确;给对应节点添加对应标签。
  4. 节点存在污点:
    建议解决方案:添加对应的容忍度

二、pod处于Waiting/ImagePullBackOff状态

原因:

如果 Pod 被卡在Waiting 状态,那么它已被调度在某个工作节点,但它不能在该机器上运行。一般来说,这是因为镜像拉去失败导致。

排查方法:
1、查看pod详细信息,event中会显示具体无法启动的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

2、在对应的node节点执行镜像拉去命令
docker pull <image>

3、检查网络组件状态
kubectl -n kube-system get pod -owide | grep calico

4、查看网络组件日志
kubectl logs -f  ${POD_NAME} -n ${NAMESPACE_NAME}
存在的问题:

1、镜像拉去失败:镜像配置错误、kubelet无法访问镜像、秘钥配置错误、镜像太大拉取超时
2、CNI网络错误:网络组件异常,无法为pod分配IP地址
3、容器无法启动:镜像参数配置异常

建议解决方案
  1. 镜像拉去失败:
    建议解决方案:检查镜像名称,检查kubelet配置文件,尝试在节点直接拉取镜像
  2. CNI网络错误:
    建议解决方案:检查网络组件状态,查看网络组件日志。
  3. 容器无法启动:
    建议解决方案:确认镜像参数是否正确,确认开发本地相同tag的镜像是否可以正常运行

三、pod处于ContainerCreating状态

原因:

如果 Pod 被卡在ContainerCreating状态,那么它已被调度在某个工作节点,但是在启动过程中发送了错误。一般来说,这是因为依赖资源不存在导致。

排查方法:
1、查看pod详细信息,event中会显示具体启动失败的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

存在的问题:

1、依赖资源不存在:pv、cm、secret等

建议解决方案
  1. 依赖资源不存在:
    建议解决方案:检查资源名称是否正确,对应资源是否已创建

四、pod处于Failed/CrashLoopBackOff状态

原因:

如果 Pod 被卡在CrashLoopBackOff状态,那么它已被调度在某个工作节点,且可以正常启动但是又异常退出了。一般来说,这是因为健康检查未通过或应用程序运行异常导致。

排查方法:
1、查看pod详细信息,event中会显示具体启动失败的原因
kubectl describe pods ${POD_NAME} -n ${NAMESPACE_NAME}

2、查看对应pod的日志信息
kubectl logs -f  ${POD_NAME} -n ${NAMESPACE_NAME}
存在的问题:

1、健康检查失败
2、应用程序运行异常

建议解决方案
  1. 健康检查失败:
    建议解决方案:检查健康检查的内容是否正确。
  2. 应用程序运行异常:
    建议解决方案:反馈对应开发联合排查,确认问题。

四、pod处于Unknown状态

原因:

如果 Pod 处于Unknown 状态,表示集群无法获取 Pod 的状态,通常是因为与 Pod 所在主机通信失败导致。

排查方法:
1、查看kubelet服务状态
systemctl status kubelet -l

2、检查与apiserver通信状态
telnet ${APISERVER_IP:PORT}
存在的问题:kubelet服务与apiserver失联

1、kubelet未启动
2、kubelet节点与apiserver通信异常

建议解决方案
  1. kubelet未启动:
    建议解决方案:启动kubelet服务,排查kubelet服务异常停止的原因。
  2. kubelet节点与apiserver通信异常:
    建议解决方案:检查kubelet节点与apiserver节点间的网络状态

五、pod处于Evicted状态

原因:

如果 Pod 处于Evicted状态,通常是因为与 Pod 所在主机系统内存或硬盘资源不足导致。

排查方法:
1、查看系统磁盘资源使用率
df -h

2、查看系统内存资源使用率
free -h
存在的问题:kubelet服务与apiserver失联

1、系统磁盘不足
2、系统内存不足

建议解决方案
  1. 系统磁盘不足:
    建议解决方案:进行磁盘清理或扩容磁盘。
  2. 系统内存不足:
    建议解决方案:集群新增节点
    紧急解决方案:缩减非核心业务pod数量。

六、pod处于terminating状态

原因:

如果 Pod 处于terminating 状态,通常是因为pod未被正确回收导致。

排查方法:
1、查看kubelet服务状态
systemctl status kubelet -l

2、查看docker服务状态
systemctl status kubelet -l

3、强制删除pod指令(谨慎执行)
kubectl delete pods ${POD_NAME} --grace-period=0 --force
存在的问题:

1、kubelet未执行回收操作/执行回收失败
2、docker未执行回收操作/执行回收失败

建议解决方案
  1. kubelet未正确回收:
    建议解决方案:查看kubelet服务日志,进一步判断排查。
    紧急解决方案:强制删除该pod(注意:该指令仅在确认该pod的删除对环境无影响的前提下执行)
  2. docker未正确回收:
    建议解决方案:检查docker服务日志,进一步判断排查