Kubernetes故障响应磁盘压力Pod驱逐集群可靠性
场景
工作节点因磁盘空间不足触发磁盘压力条件,导致该节点上的Pod被驱逐并进入Pending状态。
症状
kubectl get nodes显示节点状态为DiskPressure- 被驱逐的Pod状态为
Pending,kubectl describe pod显示0/1 nodes are available: 1 node had taint {node.kubernetes.io/disk-pressure: } kubectl get events -n <namespace>可见Evicted事件
诊断
- 确认节点磁盘使用情况:
bash kubectl describe node <node-name> | grep -A5 Conditions查看DiskPressure条件为True。 - 登录节点检查磁盘:
bash ssh <node-ip> df -h寻找使用率接近100%的分区(通常为/var/lib/docker或/var/lib/kubelet)。 - 使用
kubectl top nodes检查节点资源压力(可选)。
风险控制
- 立即停止调度:将节点cordon,避免新Pod调度至此。
bash kubectl cordon <node-name> - 驱逐工作负载:如果节点无法快速恢复,安全驱逐所有非守护Pod:
bash kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data安全警告:--delete-emptydir-data会删除emptyDir数据,确保数据已备份或可丢失。 - 保留系统Pod:守护集Pod(如kube-proxy)不会被驱逐,保持节点基本功能。
恢复操作
- 清理磁盘空间:
- 删除未使用的容器镜像:
docker image prune -a(需节点访问) - 清理Docker日志:truncate -s 0 /var/lib/docker/containers/*/*-json.log- 检查并清理kubelet日志:journalctl --vacuum-size=500M - 验证磁盘压力消除:
bash kubectl describe node <node-name> | grep -A5 Conditions确认DiskPressure为False。
回滚
- 让节点重新调度:
bash kubectl uncordon <node-name> - 恢复被驱逐的Pod:通常通过Deployment或StatefulSet会自动重新调度,如果Pod未自动重建,可手动扩容:
bash kubectl scale deployment <deployment-name> --replicas=<original-replica-count> - 验证Pod状态:
bash kubectl get pods -o wide | grep <node-name>确保Pod运行正常且未再被驱逐。
验证
- 节点健康:再次检查节点条件,
DiskPressure应为False,Ready状态正常。 - Pod状态:所有Pod应处于
Running或Completed状态。 - 集群事件:
kubectl get events --all-namespaces无异常驱逐或错误。 - 业务监控:确认业务延迟、错误率等指标恢复正常。
何时提交OpsGlobal工单
- 自动恢复失败:节点磁盘压力反复出现或无法通过上述步骤消除。
- 多节点受影响:两个以上工作节点同时出现磁盘压力,可能暗示存储系统问题。
- 数据丢失风险:eviction导致关键数据丢失(如需持久卷恢复)。
- 集群级影响:控制平面节点也出现类似压力,或API服务器响应异常。
提交工单时请包含:节点名称、事件时间戳、kubectl describe node 输出、磁盘使用率截图。
适用场景
适合正在处理 Kubernetes、Kubernetes, 故障响应, 磁盘压力, Pod驱逐 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
本文通过一个磁盘压力导致的节点故障场景,详细演示Kubernetes故障响应全流程:从症状识别、诊断排查、命令操作到风险控制、回滚验证,并明确何时提交OpsGlobal工单。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。