当前位置: 首页 > news >正文

K8s 常见故障案例分析

#作者:程宏斌

文章目录

  • 一、节点故障
    • (一)节点 NotReady 状态
    • 排查步骤
    • 解决方案
  • 二、Pod 故障
    • (一)Pod 一直处于 Pending 状态
    • 排查步骤
    • 解决方案
    • (二)Pod 频繁重启
    • 故障现象
    • 排查步骤
    • 解决方案
  • 三、控制器故障
    • (一)Deployment 无法创建 Pod
    • 故障现象
    • 排查步骤
    • 解决方案
  • 四、网络故障
    • (一)Pod 之间无法通信
    • 排查步骤
    • 解决方案
  • 五、存储故障
    • 排查步骤
    • 解决方案
  • 六、总结

在这里插入图片描述
在 Kubernetes(K8s)集群的日常运维中,各种故障时有发生。本文将针对 K8s 中常见的故障案例进行详细分析,包括故障现象、排查步骤和解决方案,为运维人员提供参考。

一、节点故障

(一)节点 NotReady 状态

故障现象
通过kubectl get nodes命令查看节点状态时,发现某个节点处于 NotReady 状态,导致该节点上的 Pod 无法正常运行。

排查步骤

  1. 登录到该节点,检查 Kubelet 服务状态,执行systemctl status kubelet命令,查看是否存在服务未启动或异常退出的情况。
  2. 检查节点的网络连接,使用ping命令测试与集群中其他节点及 API Server 的连通性。
  3. 查看节点的资源使用情况,执行top或free -m等命令,检查 CPU、内存、磁盘等资源是否耗尽。
  4. 检查 Kubelet 的日志,执行journalctl -u kubelet -f命令,查找可能的错误信息。

解决方案

  1. 如果 Kubelet 服务未启动,执行systemctl start kubelet命令启动服务;如果服务异常,根据日志信息排查问题,可能需要重启服务或修复配置文件。
  2. 若网络存在问题,检查网络配置,修复网络连接,确保节点能够正常与其他组件通信。
  3. 当资源耗尽时,清理节点上不必要的进程或服务,释放资源;如果是长期资源不足,考虑扩容节点。

二、Pod 故障

(一)Pod 一直处于 Pending 状态

故障现象
创建 Pod 后,通过kubectl get pods命令查看,发现 Pod 长时间处于 Pending 状态,无法进入 Running 状态。

排查步骤

  1. 执行kubectl describe pod <pod名称>命令,查看事件信息,了解 Pod 调度失败的原因,可能是节点资源不足、节点亲和性不满足等。
  2. 检查集群中节点的资源情况,执行kubectl describe nodes命令,查看节点的可分配资源是否满足 Pod 的需求。
  3. 查看 Pod 的亲和性和反亲和性配置,确认是否存在配置错误导致无法调度。

解决方案

  1. 若节点资源不足,可扩容节点或调整 Pod 的资源请求和限制;若存在节点亲和性问题,修正亲和性配置。

(二)Pod 频繁重启

故障现象

Pod 在运行过程中频繁重启,通过kubectl get pods命令可看到 RESTARTS 字段数值不断增加。

排查步骤

  1. 执行kubectl logs <pod名称> --previous命令,查看 Pod 重启前的日志,寻找错误信息。
  2. 检查 Pod 的健康检查配置(livenessProbe 和 readinessProbe),确认是否因健康检查失败导致重启。
  3. 查看容器的资源使用情况,是否因资源限制导致容器被 Kill。

解决方案

  1. 根据日志中的错误信息修复应用程序的问题;若健康检查配置不合理,调整检查参数;若资源限制过低,适当提高资源限制。

三、控制器故障

(一)Deployment 无法创建 Pod

故障现象

创建 Deployment 后,没有 Pod 被创建,通过kubectl get deployments命令查看,发现 Deployment 的 replicas 数量未达到预期。

排查步骤

  1. 执行kubectl describe deployment <deployment名称>命令,查看事件信息,了解无法创建 Pod 的原因,可能是镜像拉取失败、配置错误等。
  2. 检查 Deployment 的配置文件,确认镜像名称、标签选择器等配置是否正确。
  3. 检查集群的镜像仓库是否可达,以及镜像是否存在。

解决方案

  1. 若镜像拉取失败,检查镜像仓库地址和认证信息,确保能够正常拉取镜像;若配置错误,修正 Deployment 的配置文件。

四、网络故障

(一)Pod 之间无法通信

故障现象
集群中的两个 Pod 无法进行通信,如无法 ping 通或无法访问对方的服务。

排查步骤

1.检查 Pod 的网络配置,确认 Pod 是否获取到正确的 IP 地址,执行kubectl get pods -o wide命令查看。
2.检查节点之间的网络是否通畅,确保节点间的端口通信正常。
3.查看网络插件的状态,如 Calico、Flannel 等,确认网络插件运行正常。
4.检查网络策略(NetworkPolicy)是否限制了 Pod 之间的通信。

解决方案

1.若 Pod 未获取到正确的 IP 地址,重启网络插件或检查网络插件的配置;若节点网络不通,修复节点网络;若网络策略限制了通信,调整网络策略配置。

五、存储故障

(一)PersistentVolume(PV)无法绑定 PersistentVolumeClaim(PVC)
故障现象
创建 PVC 后,长时间处于 Pending 状态,无法与 PV 绑定。

排查步骤

  1. 执行kubectl describe pvc <pvc名称>命令,查看事件信息,了解绑定失败的原因,可能是没有合适的 PV、PV 与 PVC 的存储类不匹配等。
  2. 执行kubectl get pv命令,查看集群中可用的 PV,检查 PV 的容量、访问模式、存储类等是否与 PVC 匹配。

解决方案

1.若没有合适的 PV,创建符合要求的 PV;若存储类不匹配,调整 PVC 或 PV 的存储类配置。

六、总结

K8s 集群故障种类繁多,排查故障时需要结合日志、事件信息和相关命令进行综合分析。在日常运维中,应加强对集群的监控,及时发现潜在问题,并做好备份和应急处理预案,以提高集群的稳定性和可靠性。同时,不断积累故障排查经验,提升解决问题的效率。

http://www.lryc.cn/news/613693.html

相关文章:

  • ArgoCD 与 GitOps:K8S 原生持续部署的实操指南
  • hive-日期拆分为多行
  • 二、k8s 1.29 之 网络
  • 2025年城市建设与智慧交通国际会议(ICUCIT 2025)
  • Vue复习
  • 暴力解决MySQL连接失败
  • 协同进化:AIGC、Agent和MCP如何相互促进共同发展
  • 内容分发机制研究:实测一款多源短视频聚合App
  • 医防融合中心-智慧化慢病全程管理医疗AI系统开发(上)
  • C++程序库选择:权衡与取舍的艺术——以iostream和stdio为例
  • 低压电工-------元器件认识
  • react+echarts实现个性化评分展示(类进度条)
  • AR眼镜:能源行业设备维护的“安全守护者”
  • Java 虚拟机之双亲委派机制
  • 接口自动化-pytest
  • 使用winsw把SpringBoot项目注册成window服务
  • Linux怎么查看时区信息?(Linux时区)(tzselect)
  • Xvfb虚拟屏幕(Linux)中文入门篇1:(wikipedia摘要,适当改写)
  • 容器 vs 虚拟机
  • 技法笔记3 | 验证交互式shell连接
  • 数据结构(五):顺序循环队列与哈希表
  • SkyWalking-1--SkyWalking是什么?
  • Kubernetes学习
  • 嵌入式开发学习———Linux环境下IO进程线程学习(六)
  • Qwen系列模型
  • 对比学习(Contrastive Learning)面试基础
  • STM32——STM32CubeMX
  • 4G/5G无线电单元系统
  • C语言:单链表学习
  • 北京-4年功能测试2年空窗-报培训班学测开-第七十天-面试第一天