首页 > 其他分享 >K8S问题排查

K8S问题排查

时间:2023-07-19 19:56:10浏览次数:26  
标签:kubectl name 是否 节点 问题 排查 Pod K8S pod

Pod 相关问题及排查

Pod 无法启动,如何查找原因?

  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令查看该 Pod 的状态信息,检查容器的状态和事件信息,判断是否出现问题。
  • 使用 kubectl logs [pod_name] -n [namespace_name] 命令查看该 Pod 容器的日志信息,判断是否有错误或异常信息。
  • 使用 kubectl get events --field-selector involvedObject.name=[pod_name] -n [namespace_name] 命令查看该 Pod 相关的事件信息,判断是否有异常事件发生。

Pod 无法连接到其他服务,如何排查?

  • 使用 kubectl exec -it [pod_name] -n [namespace_name] -- /bin/bash 命令进入该 Pod 所在的容器,尝试使用 ping 或 telnet 等命令测试与其他服务的网络连接情况。
  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令检查 Pod 的NetworkPolicy 配置,判断是否阻止了该 Pod 访问其他服务。
  • 使用 kubectl describe service [service_name] -n [namespace_name] 命令检查目标服务的配置和状态信息,判断是否存在故障。

Pod 运行缓慢或异常,如何排查?

  • 使用 kubectl top pod [pod_name] -n [namespace_name] 命令查看该 Pod 的 CPU 和内存使用情况,判断是否存在性能瓶颈。
  • 使用 kubectl exec -it [pod_name] -n [namespace_name] -- /bin/bash 命令进入该 Pod 所在的容器,使用 top 或 htop 命令查看容器内部进程的 CPU 和内存使用情况,找出可能存在的瓶颈。
  • 使用 kubectl logs [pod_name] -n [namespace_name] 命令查看该 Pod 容器的日志信息,寻找可能的错误或异常信息。

Pod 无法被调度到节点上运行,如何排查?

  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令查看 Pod 的调度情况,判断是否存在资源不足、调度策略等问题。
  • 使用 kubectl get nodes 和 kubectl describe node [node_name] 命令查看所有节点的资源使用情况,判断是否存在节点资源不足或故障的情况。
  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令检查 Pod 所需的标签和注释,以及节点的标签和注释,判断是否匹配。

Pod 状态一直是 Pending ,怎么办?

  • 查看该 Pod 的事件信息: kubectl describe pod
  • 查看该节点资源利用率是否过高: kubectl top node
  • 如果是调度问题,可以通过以下方式解决:
    • 确保有足够的节点资源满足该 Pod 调度需求
    • 检查该节点的 taints 和 tolerations 是否与 Pod 的 selector 匹配
    • 调整 Pod 的调度策略,如使用 NodeSelector、Affinity 等

Pod 无法访问外部服务,怎么办?

  • 查看 Pod 中的 DNS 配置是否正确
  • 检查 Pod 所在的命名空间中是否存在 Service 服务
  • 确认该 Pod 是否具有网络访问权限
  • 查看 Pod 所在的节点是否有对外的访问权限
  • 检查网络策略是否阻止了 Pod 对外的访问

Pod 启动后立即退出,怎么办?

  • 查看该 Pod 的事件信息: kubectl describe pod
  • 查看该 Pod 的日志: kubectl logs
  • 检查容器镜像是否正确、环境变量是否正确、入口脚本是否正常
  • 尝试在本地使用相同的镜像运行该容器,查看是否有报错信息,如执行 docker run

Pod 启动后无法正确运行应用程序,怎么办?

  • 查看 Pod 中的应用程序日志: kubectl logs
  • 查看该 Pod 的事件信息: kubectl describe pod
  • 检查应用程序的配置文件是否正确
  • 检查应用程序的依赖是否正常
  • 尝试在本地使用相同的镜像运行该容器,查看是否有报错信息,如执行 docker run
  • 确认该应用程序是否与 Pod 的资源限制相符

Kubernetes 集群中的 Service 不可访问,怎么办?

  • 检查 Service 的定义是否正确
  • 检查 endpoint 是否正确生成
  • 检查网络插件配置是否正确
  • 确保防火墙配置允许 Service 对外开放

Node 相关问题及排查

Node 状态异常,如何排查?

  • 使用 kubectl get nodes 命令查看集群中所有节点的状态和信息,判断是否存在故障。
  • 使用 kubectl describe node [node_name] 命令查看目标节点的详细信息,包括 CPU、内存、磁盘等硬件资源的使用情况,判断是否存在性能瓶颈。
  • 使用 kubectl get pods -o wide --all-namespaces 命令查看集群中所有 Pod 的状态信息,判断是否有 Pod 运行在目标节点上导致资源紧张。

Node 上运行的 Pod 无法访问网络,如何排查?

  • 使用 kubectl describe node [node_name] 命令查看目标节点的信息,检查节点是否正常连接到网络。
  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令查看 Pod 所运行的节点信息,判断是否因为节点状态异常导致网络访问失败。
  • 使用 kubectl logs [pod_name] -n [namespace_name] 命令查看 Pod 容器的日志信息,寻找可能的错误或异常信息。

Node 上的 Pod 无法访问存储,如何排查?

  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令检查 Pod 的 volumes配置信息,判断是否存在存储挂载失败的情况。
  • 使用 kubectl exec -it [pod_name] -n [namespace_name] -- /bin/bash 命令进入 Pod 所在的容器,尝试使用 ls 和 cat 等命令访问挂载的文件系统,判断是否存在读写错误。
  • 使用 kubectl describe persistentvolumeclaim [pvc_name] -n [namespace_name] 命令查看相关 PVC 配置和状态信息,判断是否存在故障。

存储卷挂载失败,如何处理?

  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令检查 Pod 的 volumes配置信息,判断是否存在存储卷定义错误。
  • 使用 kubectl describe persistentvolumeclaim [pvc_name] -n [namespace_name] 命令检查 PVC 的状态和信息,判断是否存在存储配额不足或存储资源故障等原因。
  • 如果是 NFS 或 Ceph 等网络存储,需要确认网络连接是否正常,以及存储服务器的服务是否正常。

Node 节点加入 Kubernetes 集群后无法被调度,怎么办?

  • 检查该节点的 taints 和 tolerations 是否与 Pod 的 selector 匹配
  • 检查该节点的资源使用情况是否满足 Pod 的调度要求
  • 确保该节点与 Kubernetes API server 的连接正常

Kubernetes 集群中的 PersistentVolume 挂载失败,怎么办?

  • 检查 PersistentVolume 和 Pod 之间的匹配关系是否正确
  • 检查 PersistentVolumeClaim 中的 storageClassName 是否与 PersistentVolume 的storageClassName 匹配
  • 检查节点存储配置和 PersistentVolume 的定义是否正确
  • 自动供给层面的权限是否已经给到位

集群层面问题及排查

集群中很多 Pod 运行缓慢,如何排查?

  • 使用 kubectl top pod -n [namespace_name] 命令查看所有 Pod 的 CPU 和内存使用情况,判断是否存在资源瓶颈。
  • 使用 kubectl get nodes 和 kubectl describe node [node_name] 命令查看所有节点的资源
  • 使用情况,判断是否存在单个节点资源紧张的情况。
  • 使用 kubectl logs [pod_name] -n [namespace_name] 命令查看 Pod 容器的日志信息,寻找可能的错误或异常信息。

集群中某个服务不可用,如何排查?

  • 使用 kubectl get pods -n [namespace_name] 命令查看相关服务的所有 Pod 的状态信息,判断是否存在故障。
  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令检查 Pod 的网络连接和存储访问等问题,寻找故障原因。
  • 使用 kubectl describe service [service_name] -n [namespace_name] 命令查看服务的配置和状态信息,判断是否存在故障。

集群中的 Node 和 Pod 不平衡,如何排查?

  • 使用 kubectl get nodes 和 kubectl get pods -o wide --all-namespaces 命令查看所有Node 和 Pod 的状态信息,判断是否存在分布不均的情况。
  • 使用 kubectl top pod -n [namespace_name] 命令查看所有 Pod 的 CPU 和内存使用情况,判断是否存在资源瓶颈导致 Pod 分布不均。
  • 使用 kubectl describe pod [pod_name] -n [namespace_name] 命令查看 Pod 所运行的节点信息,并使用 kubectl describe node [node_name] 命令查看相关节点的状态信息,判断是否存在节点不平衡的情况。
  • 使用 kubectl describe pod / node [node_name] 查看当前Pod / Node上是否有相关的亲和或反亲和策略导致固定调度。

集群中某个节点宕机,如何处理?

  • 使用 kubectl get nodes 命令检查节点状态,找到异常节点。
  • 使用 kubectl drain [node_name] --ignore-daemonsets 命令将节点上的 Pod 驱逐出去,并将其部署到其他节点上。添加 --ignore-daemonsets 参数可以忽略 DaemonSet 资源。
  • 如果需要对节点进行维护或替换硬件:
    • 先将节点设置为不可以调度 kubectl cordon [node_name]
    • 再通过 kubectl drain [node_name] --ignore-daemonsets 命令将节点上的 Pod 驱逐出去,并将其部署到其他节点上。
    • 然后再次 kubectl delete node [node_name] 安全的进行节点下线。

Kubernetes API Server 不可用,如何排查?

  • 使用 kubectl cluster-info 命令查看集群状态,判断是否存在 API Server 不可用的情况。
  • 使用 kubectl version 命令查看集群版本,确认 Kubernetes API Server 和 kubelet 版本是否匹配。
  • 使用 systemctl status kube-apiserver 命令检查 API Server 运行状态,确认是否存在故障或错误。
  • 结合apiServer所在的节点查看系统层面的日志,进一步定位问题点。

Kubernetes 命令执行失败,怎么办?

  • 检查 Kubernetes API server 是否可用: kubectl cluster-info
  • 检查当前用户对集群的权限是否足够: kubectl auth can-i
  • 检查 kubeconfig 文件中的登录信息是否正确: kubectl config view

Kubernetes master 节点不可用,怎么办?

  • 检查 kube-apiserver、kube-scheduler、kube-controller-manager 是否都在运行状态
  • 检查 etcd 存储系统是否可用
  • 尝试重新启动 master 节点上的 kubelet 和容器运行时

Kubernetes 集群绕过了 LoadBalancer,直接访问 Pod,怎么办?

  • 检查 Service 和 Pod 的通信是否使用了 ClusterIP 类型的 Service
  • 确认该 Service 的 selector 是否匹配到了正确的 Pod

Kubernetes 集群中的 Deployment 自动更新失败,怎么办?

  • 检查更新策略是否设置正确,如 rollingUpdate 或 recreate
  • 检查 Kubernetes API server 和 kubelet 之间的连接是否正常
  • 检查 Pod 的定义是否正确

Kubernetes 集群中的状态检查错误,怎么办?

  • 检查节点日志和事件信息,并确认错误类型
  • 确认该状态检查是否与 kubelet 的版本兼容
  • 尝试升级 kubelet 和容器运行时等组件

Kubernetes 集群中的授权配置有误,怎么办?

  • 检查 RoleBinding 和 ClusterRoleBinding 定义是否正确
  • 检查用户或服务账号所绑定的角色是否正确
  • 检查 kubeconfig 文件中的用户和访问权限是否正确

Kubernetes 集群无法连接 etcd 存储系统,怎么办?

  • 检查 etcd 存储系统是否正常运行
  • 检查 kube-apiserver 配置文件中 etcd 的连接信息是否正确
  • 尝试手动连接 etcd 集群,如执行 etcdctl cluster-health

标签:kubectl,name,是否,节点,问题,排查,Pod,K8S,pod
From: https://www.cnblogs.com/chuyiwang/p/17566583.html

相关文章

  • vm 因为部分网络问题ping不通虚拟机,虚拟机也上不了网的经历
    主机连着公司wifi,wifi上网需要登录认证账号,此账号同时只能在线一个,不好办一网络适配器用vmnet0,桥接到wifi网卡,能ping通了,但是总是断,ssh一小会就断。ip尝试过静态、动态都不行二适配器vmnet8网络的nat模式,ping不通,vm8网络-属性-配置里图中改成enable。不行。后来ping通了改回diabled......
  • 解决IDEA安装/卸载插件后启动报错问题
    一.IDEA新安装并且卸载了一些插件,重启IDEA的时候报错Internalerror.Pleaserefertohttps://jb.gg/ide/critical-startup-errors二.关键信息错误为以下这些:1.com.intellij.diagnostic.PluginException:Fatalerrorinitializing'com.jiyuanime.ActivatePowerModeApplica......
  • 记一次<!DOCTYPE html>引起的height100%总是屏幕高度,layui弹框top值很大超出屏幕问题
    不管父元素有没有指定高度,只要有height:100%高度就是是九百多,我屏幕的高度或者浏览器可显示区域高度最先是swiper区域控制不了高度一致九百多,后来发现layui的checkboxspan文字高度也是九百多,两个地方均有height100%layuimsg无法显示,查看源代码<divclass="layui-layerlay......
  • .Net 对RSA加密结果跟JAVA加密结果不一致问题处理
    stringpublicRsaKey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC6UCsvO/M/Q51ydlxvuvwy8W9yXkAWLLiG5eA2Duha9cr/XoWrQcETf7PRMNYaQs616PGhj0tnPfxfDltmeqTJQf8rHNxevIZ9nQ0N0/8PIlVszubpMyAHnEis2OLMnLENGyepAlabFGDMDPzRpf0ibL0Q/R15BuTzII5gunzAbwIDAQAB";stri......
  • Android可以提问的问题
    Android可以提问的问题实现流程为了实现Android可以提问的问题功能,我们可以采用以下步骤:步骤描述1创建一个包含问题和答案的数据库2创建一个界面用于显示问题3创建一个界面用于输入答案4实现问题和答案的交互逻辑下面我们将逐步介绍每一步需要做的事情......
  • keycloak~EventListenerProvider初始化kafka引出的类加载问题
    EventListenerProvider初始keycloak提供的事件处理机制,可以通过实现EventListenerProvider接口来实现自定义的事件处理逻辑。在keycloak启动时,会通过ServiceLoader机制加载所有的EventListenerProvider实现类,并将其注册到keycloak的事件处理机制中。构造方法,在每个keycloak后台......
  • ubuntu20.04安装Kubernetes(k8s)
    1.禁止swap分区(必须)暂时禁止:sudoswapoff-a永久禁止:#注释掉swap一行sudovi/etc/fstab2.更改net.bridge.bridge-nf-call-iptables的值为1.(Ubuntu20.04默认为1)cat<<EOF|sudotee/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables=1net.bridge.br......
  • 宝塔php7.3安装swoole拓展问题
    宝塔选择php7.3安装swoole拓展后,发现还是不能用swoole;php-v发现默认版本是php7.4解决办法:切换默认PHP版本即可1.rm-f/usr/bin/php//删除默认的配置2.将默认版本修改成想要的版本,如:7.3ln-sf/www/server/php/73/bin/php/usr/bin/php ......
  • RTSP流媒体服务器LntonNVR(源码版)云服务平台下载录像后无法拖动时间轴的问题解决方案
    LntonNVR安防视频云服务平台是基于RTSP/Onvif协议的视频接入、处理及分发平台,可以分发出RTSP、RTMP、WS-FLV、HTTP-FLV、HLS、WebRTC等格式的视频流,可实现在全终端(PC、手机、平板、电子大屏/电视墙等)播放监控视频。有用户反馈,在使用LntonNVR下载录像时,下载后的录像时间无法拖动时间......
  • 解决seata与mybatis的saveBatch事物管理器冲突问题
    报错:org.springframework.beans.factory.NoSuchBeanDefinitionException:Noqualifyingbeanoftype'org.springframework.transaction.TransactionManager'  重写方法即可service层/***批量保存**@parambaseChapterList*@return......