KubernetesSRE事件响应集群可靠性
场景
你在值班时收到告警,集群中一个节点状态变为NotReady。该节点上运行的Pod变得不健康,部分Pod被驱逐。同事报告该节点上的应用响应超时。
症状
kubectl get nodes显示一个节点为NotReadykubectl describe node <node>的Conditions段显示DiskPressure为True- 该节点上的Pod处于
Pending或Terminating状态 - kubelet日志包含
eviction manager: attempting to reclaim ephemeral-storage
诊断
- 确认节点状态:
kubectl get nodes -o wide - 查看节点详细条件:
kubectl describe node <node> | grep -A5 Conditions - 检查节点磁盘使用:SSH登录节点,运行
df -h和du -sh /var/lib/kubelet - 查看kubelet日志:
journalctl -u kubelet -n 100 --no-pager | grep -i pressure - 检查Pod驱逐事件:
kubectl get events --field-selector involvedObject.kind=Node,involvedObject.name=<node>
命令
# 隔离节点,防止新Pod调度
kubectl cordon <node>
# 驱逐节点上的Pod(忽略DaemonSet)
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
# (SSH到节点)清理磁盘空间
ssh user@<node-ip>
sudo journalctl --vacuum-time=1d # 清理旧日志
sudo docker system prune -a -f # 清理未使用的容器镜像(如使用Docker)
# 或 containerd: crictl rmi --prune
sudo du -sh /var/log && sudo find /var/log -type f -name "*.log" -mtime +7 -delete
# 验证磁盘释放
df -h /var/lib/kubelet
风险控制
- 执行
drain前确保有PodDisruptionBudget(PDB)保护关键工作负载。 - 如果节点上有本地存储(hostPath),
drain会导致数据丢失,需要备份。 --delete-emptydir-data会清空emptyDir,确认无重要临时数据。- 优先使用
cordon再drain,避免Pod被强制驱逐。
回滚
- 如果清理磁盘后节点恢复正常(
NotReady消失): - 解除隔离:kubectl uncordon <node>- 确认Pod重新调度:kubectl get pods -o wide | grep <node> - 如果磁盘压力无法缓解或节点硬件故障:
- 彻底排空节点:
kubectl drain <node> --ignore-daemonsets --force(谨慎使用) - 下线节点,替换为新节点。
验证
- 节点状态变为
Ready:kubectl get nodes - 所有工作负载正常运行:
kubectl get pods --all-namespaces | grep -v Running | grep -v Completed - 告警消除。
什么时候提交OpsGlobal工单
- 如果节点无法通过清理恢复(硬件故障/持久问题)。
- 如果多个节点同时出现磁盘压力,可能需要扩容或调整存储策略。
- 如果不确定清理操作对生产的影响。
- 当需要永久性基础设施变更(如调整节点磁盘大小)。
OpsGlobal的SRE团队可提供7x24小时支持,通过Terraform自动化修复,或设计自愈集群架构。
适用场景
适合正在处理 Kubernetes、Kubernetes, SRE, 事件响应, 集群可靠性 相关问题的团队,用于快速建立排查路径和交付标准。
问题背景
一份实用指南,用于诊断和解决由磁盘压力引起的‘节点未就绪’事件,包含命令和风险控制。
排查步骤
先确认影响范围和最近变更,再收集日志、配置、指标和链路数据,最后按风险从低到高执行修复。
命令示例
示例命令请替换为你的真实资源名,并使用环境变量保存账号、密码、token 等敏感信息。
风险说明
生产环境操作前需要确认备份、权限边界、变更窗口和回滚路径,避免扩大故障影响。
回滚方案
保留原配置和发布版本;如修复后指标异常,立即回退配置、镜像或数据库变更并复核日志。
交付清单
问题定位记录、关键命令、修复步骤、验证结果、后续优化建议。
遇到类似技术问题?
如果你的服务器、K8s、Docker、CI/CD、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。