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

在 Kubernetes(K8s)集群的日常运维中,各种故障时有发生。本文将针对 K8s 中常见的故障案例进行详细分析,包括故障现象、排查步骤和解决方案,为运维人员提供参考。
一、节点故障
(一)节点 NotReady 状态
故障现象
通过kubectl get nodes命令查看节点状态时,发现某个节点处于 NotReady 状态,导致该节点上的 Pod 无法正常运行。
排查步骤
- 登录到该节点,检查 Kubelet 服务状态,执行systemctl status kubelet命令,查看是否存在服务未启动或异常退出的情况。
- 检查节点的网络连接,使用ping命令测试与集群中其他节点及 API Server 的连通性。
- 查看节点的资源使用情况,执行top或free -m等命令,检查 CPU、内存、磁盘等资源是否耗尽。
- 检查 Kubelet 的日志,执行journalctl -u kubelet -f命令,查找可能的错误信息。
解决方案
- 如果 Kubelet 服务未启动,执行systemctl start kubelet命令启动服务;如果服务异常,根据日志信息排查问题,可能需要重启服务或修复配置文件。
- 若网络存在问题,检查网络配置,修复网络连接,确保节点能够正常与其他组件通信。
- 当资源耗尽时,清理节点上不必要的进程或服务,释放资源;如果是长期资源不足,考虑扩容节点。
二、Pod 故障
(一)Pod 一直处于 Pending 状态
故障现象
创建 Pod 后,通过kubectl get pods命令查看,发现 Pod 长时间处于 Pending 状态,无法进入 Running 状态。
排查步骤
- 执行kubectl describe pod <pod名称>命令,查看事件信息,了解 Pod 调度失败的原因,可能是节点资源不足、节点亲和性不满足等。
- 检查集群中节点的资源情况,执行kubectl describe nodes命令,查看节点的可分配资源是否满足 Pod 的需求。
- 查看 Pod 的亲和性和反亲和性配置,确认是否存在配置错误导致无法调度。
解决方案
- 若节点资源不足,可扩容节点或调整 Pod 的资源请求和限制;若存在节点亲和性问题,修正亲和性配置。
(二)Pod 频繁重启
故障现象
Pod 在运行过程中频繁重启,通过kubectl get pods命令可看到 RESTARTS 字段数值不断增加。
排查步骤
- 执行kubectl logs <pod名称> --previous命令,查看 Pod 重启前的日志,寻找错误信息。
- 检查 Pod 的健康检查配置(livenessProbe 和 readinessProbe),确认是否因健康检查失败导致重启。
- 查看容器的资源使用情况,是否因资源限制导致容器被 Kill。
解决方案
- 根据日志中的错误信息修复应用程序的问题;若健康检查配置不合理,调整检查参数;若资源限制过低,适当提高资源限制。
三、控制器故障
(一)Deployment 无法创建 Pod
故障现象
创建 Deployment 后,没有 Pod 被创建,通过kubectl get deployments命令查看,发现 Deployment 的 replicas 数量未达到预期。
排查步骤
- 执行kubectl describe deployment <deployment名称>命令,查看事件信息,了解无法创建 Pod 的原因,可能是镜像拉取失败、配置错误等。
- 检查 Deployment 的配置文件,确认镜像名称、标签选择器等配置是否正确。
- 检查集群的镜像仓库是否可达,以及镜像是否存在。
解决方案
- 若镜像拉取失败,检查镜像仓库地址和认证信息,确保能够正常拉取镜像;若配置错误,修正 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 绑定。
排查步骤
- 执行kubectl describe pvc <pvc名称>命令,查看事件信息,了解绑定失败的原因,可能是没有合适的 PV、PV 与 PVC 的存储类不匹配等。
- 执行kubectl get pv命令,查看集群中可用的 PV,检查 PV 的容量、访问模式、存储类等是否与 PVC 匹配。
解决方案
1.若没有合适的 PV,创建符合要求的 PV;若存储类不匹配,调整 PVC 或 PV 的存储类配置。
六、总结
K8s 集群故障种类繁多,排查故障时需要结合日志、事件信息和相关命令进行综合分析。在日常运维中,应加强对集群的监控,及时发现潜在问题,并做好备份和应急处理预案,以提高集群的稳定性和可靠性。同时,不断积累故障排查经验,提升解决问题的效率。