pod常见问题及解决方法整理

发布时间 2023-10-13 15:03:06作者: ianCloud

pod常见问题及解决方法整理

参考链接https://blog.51cto.com/u_15127577/4139629

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

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

存在的问题:当前没有满足调度条件的节点:
1、节点资源不足
2、HostPort被占用
3、节点不存在对应的标签
4、节点存在污点

建议解决方案
节点资源不足:
建议解决方案:集群新增节点。
紧急解决方案:缩减非核心业务pod数量。
HostPort被占用
建议解决方案:检查端口冲突,修改对端;建议采用service方式暴露服务
节点不存在对应的标签
建议解决方案:检查标签是否正确;给对应节点添加对应标签。
节点存在污点:
建议解决方案:添加对应的容忍度
二、pod处于Waiting/ImagePullBackOff状态
原因:
如果 Pod 被卡在Waiting 状态,那么它已被调度在某个工作节点,但它不能在该机器上运行。一般来说,这是因为镜像拉去失败导致。

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

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

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、容器无法启动:镜像参数配置异常

建议解决方案
镜像拉去失败:
建议解决方案:检查镜像名称,检查kubelet配置文件,尝试在节点直接拉取镜像
CNI网络错误:
建议解决方案:检查网络组件状态,查看网络组件日志。
容器无法启动:
建议解决方案:确认镜像参数是否正确,确认开发本地相同tag的镜像是否可以正常运行
三、pod处于ContainerCreating状态
原因:
如果 Pod 被卡在ContainerCreating状态,那么它已被调度在某个工作节点,但是在启动过程中发送了错误。一般来说,这是因为依赖资源不存在导致。

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

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

建议解决方案
依赖资源不存在:
建议解决方案:检查资源名称是否正确,对应资源是否已创建
四、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、应用程序运行异常

建议解决方案
健康检查失败:
建议解决方案:检查健康检查的内容是否正确。
应用程序运行异常:
建议解决方案:反馈对应开发联合排查,确认问题。
四、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通信异常

建议解决方案
kubelet未启动:
建议解决方案:启动kubelet服务,排查kubelet服务异常停止的原因。
kubelet节点与apiserver通信异常:
建议解决方案:检查kubelet节点与apiserver节点间的网络状态
五、pod处于Evicted状态
原因:
如果 Pod 处于Evicted状态,通常是因为与 Pod 所在主机系统内存或硬盘资源不足导致。

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

2、查看系统内存资源使用率
free -h

存在的问题:kubelet服务与apiserver失联
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未执行回收操作/执行回收失败

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