kubernetes运维故障排查笔记——Pod篇

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)与应用程序地要求相匹配

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值