预约咨询 提交工单

Kubernetes故障响应与集群可靠性实战指南

本文通过一个磁盘压力导致的节点故障场景,详细演示Kubernetes故障响应全流程:从症状识别、诊断排查、命令操作到风险控制、回滚验证,并明确何时提交OpsGlobal工单。

Kubernetes故障响应与集群可靠性实战指南
Kubernetes 6min 11 浏览 2026-06-13
Kubernetes故障响应磁盘压力Pod驱逐集群可靠性

场景

工作节点因磁盘空间不足触发磁盘压力条件,导致该节点上的Pod被驱逐并进入Pending状态。

症状

  • kubectl get nodes 显示节点状态为 DiskPressure
  • 被驱逐的Pod状态为 Pendingkubectl describe pod 显示 0/1 nodes are available: 1 node had taint {node.kubernetes.io/disk-pressure: }
  • kubectl get events -n <namespace> 可见 Evicted 事件

诊断

  1. 确认节点磁盘使用情况: bash kubectl describe node <node-name> | grep -A5 Conditions 查看 DiskPressure 条件为 True
  2. 登录节点检查磁盘: bash ssh <node-ip> df -h 寻找使用率接近100%的分区(通常为 /var/lib/docker/var/lib/kubelet)。
  3. 使用 kubectl top nodes 检查节点资源压力(可选)。

风险控制

  1. 立即停止调度:将节点cordon,避免新Pod调度至此。 bash kubectl cordon <node-name>
  2. 驱逐工作负载:如果节点无法快速恢复,安全驱逐所有非守护Pod: bash kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data 安全警告--delete-emptydir-data 会删除emptyDir数据,确保数据已备份或可丢失。
  3. 保留系统Pod:守护集Pod(如kube-proxy)不会被驱逐,保持节点基本功能。

恢复操作

  1. 清理磁盘空间: - 删除未使用的容器镜像:docker image prune -a(需节点访问) - 清理Docker日志:truncate -s 0 /var/lib/docker/containers/*/*-json.log - 检查并清理kubelet日志:journalctl --vacuum-size=500M
  2. 验证磁盘压力消除bash kubectl describe node <node-name> | grep -A5 Conditions 确认 DiskPressureFalse

回滚

  1. 让节点重新调度bash kubectl uncordon <node-name>
  2. 恢复被驱逐的Pod:通常通过Deployment或StatefulSet会自动重新调度,如果Pod未自动重建,可手动扩容: bash kubectl scale deployment <deployment-name> --replicas=<original-replica-count>
  3. 验证Pod状态bash kubectl get pods -o wide | grep <node-name> 确保Pod运行正常且未再被驱逐。

验证

  1. 节点健康:再次检查节点条件,DiskPressure 应为 FalseReady 状态正常。
  2. Pod状态:所有Pod应处于 RunningCompleted 状态。
  3. 集群事件kubectl get events --all-namespaces 无异常驱逐或错误。
  4. 业务监控:确认业务延迟、错误率等指标恢复正常。

何时提交OpsGlobal工单

  • 自动恢复失败:节点磁盘压力反复出现或无法通过上述步骤消除。
  • 多节点受影响:两个以上工作节点同时出现磁盘压力,可能暗示存储系统问题。
  • 数据丢失风险:eviction导致关键数据丢失(如需持久卷恢复)。
  • 集群级影响:控制平面节点也出现类似压力,或API服务器响应异常。

提交工单时请包含:节点名称、事件时间戳、kubectl describe node 输出、磁盘使用率截图。

适用场景

适合正在处理 Kubernetes、Kubernetes, 故障响应, 磁盘压力, Pod驱逐 相关问题的团队,用于快速建立排查路径和交付标准。

问题背景

本文通过一个磁盘压力导致的节点故障场景,详细演示Kubernetes故障响应全流程:从症状识别、诊断排查、命令操作到风险控制、回滚验证,并明确何时提交OpsGlobal工单。

排查步骤

先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。

命令示例

示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。

风险说明

生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。

回滚方案

保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。

交付清单

问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。

!

遇到类似技术问题?

如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询