Pod问题和排查
1.pod无法启动
1.1查看该pod状态信息,检查容器的状态和事件,判断是否出现问题
kubectl describe pod [pod_name] -n [namespace_name]
1.2查看该pod容器的日志信息,判断是否有错误或者异常
kubectl logs [pod_name] -n [namespace_name]
1.3查看pod事件信息,是否有异常事件发生
kubectl get events --field-selector involvedObject.name=[pod_name] -n [namespace_name]
2.pod无法连接到其它服务,进行排查
2.1进入到该pod所在容器
kubectl exec -it [pod_name] -n [namespace_name] --/bin/bash
使用ping或者telnet测试与其他服务器的网络连接情况
2.2检查pod的NetworkPolicy配置,判断是否组织了该pod访问其他服务
kubectl describe pod [pod_name] -n [namespace_name]
2.3检查目标服务器的配置和状态信息,判断是否存在故障
kubectl describe service [service_name] -n [namespace_name]
3.pod运行缓慢或者异常,进行排查
3.1查看该pod的cpu和内存使用情况,判断是否有性能瓶颈
kubectl top pod [pod_name] -n [namespace_name]
3.2进入该pod所在容器,使用top或者htop查看容器内部进程cpu和内存使用情况,找出可能存在的问题
kubectl exec -it [pod_name] -n [namespace_name] --/bin/bash
3.3查看pod容器的日志信息,寻找错误和异常
kubectl logs [pod_name] -n [namespace_name]
4.pod无法被调度到节点上运行,进行排查
4.1查看pod调度情况,判断是否存在资源不足、调度策略等问题
kubectl describe pod [pod_name] -n [namespace_name]
4.2查看所有节点的资源使用情况,判断是否有节点资源不足或者故障情况
kubectl get nodes
kubectl describe node [node_name]
4.3检查所有pod所需的标签和注释及节点的标签和注释,判断是否匹配
kubectl describe pod [pod_name] -n [namespace_name]
5.pod状态一直是Pending,解决思路
5.1检查pod的状态和事件,确定pod处于何种状态以及是否有任何错误或者警告
kubectl get pods -n [namespace_name]
5.2检查pod的描述文件(YAML或JSON),确保各项字段(镜像名称、资源请求、端口等)配置正确
5.3如果pod需要特定类型的节点(如GPU节点),确认集群中是否有符合条件的节点可用
5.4检查pod所需的资源配额是否已经达到上限,可以使用
kubectl describe pod [pod_name] -n [namespace_nbame]
5.5检查pod所需的存储卷是否可用,确保没有引发挂在错误
5.6如果是调度问题,推荐以下方式解决:
确保有足够的节点资源满足该pod调度需求
检查该节点的taints和tolerations是否和pod的selector匹配
调整pod的调度策略,如果使用nodeselector、affinity等
6.pod无法访问外部服务
6.1查看pod中的DNS配置是否正确
6.2检查pod所在的命名空间中是否存在service服务
6.3确认该pod是否具有网络访问权限
6.4查看pod所在的节点是否有对外访问权限
6.5检查网络策略是否阻止了pod对外的访问
7.pod启动后立即退出,检查和解决
7.1查看该pod的事件信息
kubectl describe pod [pod_name]
7.2查看该pod日志
kubectl logs [pod_name] -n [namespace_name]
7.3检查容器镜像是否正确、环境变量是否正确、入口脚本是否正常
7.4尝试在本地使用相同的镜像运行该容器,查看是否有报错信息
docker run [image-name]
8.pod启动后无法正确运行应用程序
8.1查看pod中的应用程序日志
kubectl logs [pod_name]
8.2查看该pod的事件信息
kubectl describe pod [pod_name]
8.3检查应用程序的配置文件是否正确
8.4检查应用程序的依赖是否正常
8.5尝试在本地使用相同的镜像运行该容器,看是否有报错
8.6确认该应用程序是否与pod的资源限制相符
9.kubenetes集群中的service不可访问
9.1检查coreDNS服务是否可用
9.2查看DNS配置文件是否正确(/etc/resolve.conf)
9.3业务层面svc的port是否正确
9.4业务pod是否正常工作
9.5CNI网络组件(flannel,calico)组件是否有问题
9.6kube-proxy组件是否正常
9.7是否已经创建相关的iptables规划或ipvs路由
10.pod启动后立即终止或CrashLoopBackOff状态
10.1检查pod的状态和事件,查看是否有任何错误或警告
kubectl get pods -n [namespace]
10.1查看pod日志输出,重点在关注最后几行的错误信息
kubectl logs [pod-name] -n [namespace]
10.2确认pod生命周期钩子(postStart、preStop)是否配置正确,是否会导致容器意外退出
10.3检查容器的资源使用情况是否超过了pod的资源限制,尤其是内存限制
11.pod内部服务无法访问或网络连接问题
11.1检查pod状态和事件,查看是否有错误或报警信息
kubectl get pods -n [namespace]
11.2确认pod所属的service是否已经创建,并且与pod使用的端口和协议匹配
11.3检查pod内部的DNS配置,确保能够解析其他服务的域名
11.4进入pod内部,手动测试容器间的网络连通性
kubectl -exec [pod-name] -n [namespace] --[command]
12.pod与存储卷间的问题
12.1检查颇多状态和事件,查看是否有任何错误或警告
kubectl get pods -n [namespace]
12.2确认存储卷是否已经正确地绑定到pod上
kubectl describe pod [pod_name] -n [namespace]
12.3进入到pod内部,手动测试存储卷是否已经正常挂载和访问
12.4检查存储卷提供程序(如NFS、AWS、EBS)地配置是否正确,并确保其可用性
12.5确保存储卷访问模式(ReadWriteOnce、ReadOnlyMany)与应用程序地要求相匹配