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

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.xdnf.cn/news/17273.html

相关文章:

  • KLA/TENCOR ALTAIR 8900
  • vscode 配置
  • 灵活、高效,Sub-GHz频段中的轻量化组网方案
  • linux-文件系统
  • Android 中 实现自定义 Dialog 提示框
  • 32-Hive SQL DML语法之查询数据
  • 无人机仿真环境搭建
  • 软件包管理、缓存、自定义 YUM 源
  • 基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解
  • Linux网络--1、网络基础
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • [GESP2023012 五级] 2023年12月GESP C++五级上机题题解,附带讲解视频!
  • c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
  • WiFi 核心概念与实战用例全解
  • 17.14 CogVLM-17B多模态模型爆肝部署:4-bit量化+1120px高清输入,A100实战避坑指南
  • SimpleMindMap:一个强大的Web思维导图
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • 【面经】2025年软件测试面试题,精选100 道(附答案)
  • 为什么通过CreateThread创建的线程调用C/C++运行库函数不稳定
  • 交换机100G模块远距离连接踩坑记录
  • Vibe coding现在能用于生产吗?
  • “鱼书”深度学习进阶笔记(1)第二章
  • 弱电+机房+设备+运维资料合集方案(Word+PPT)
  • trae开发c#
  • Vue3 计算属性与监听器
  • 【MATLAB例程】联邦卡尔曼滤波,主滤波与子滤波融合GPS、IMU、里程计多传感器数据。提供源代码下载链接
  • Zabbix网络发现:自动化监控新利器
  • apiSQL网关调优:释放单节点的最大潜能
  • Trackio:面向机器学习者的本地优先、开源免费的轻量级实验追踪新工具
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成