预约咨询 提交工单

掌握Kubernetes事件响应:处理节点磁盘压力

一份实用指南,用于诊断和解决由磁盘压力引起的‘节点未就绪’事件,包含命令和风险控制。

掌握Kubernetes事件响应:处理节点磁盘压力
Kubernetes 6min 18 浏览 2026-06-17
KubernetesSRE事件响应集群可靠性

场景

你在值班时收到告警,集群中一个节点状态变为NotReady。该节点上运行的Pod变得不健康,部分Pod被驱逐。同事报告该节点上的应用响应超时。

症状

  • kubectl get nodes显示一个节点为NotReady
  • kubectl describe node <node>的Conditions段显示DiskPressure为True
  • 该节点上的Pod处于PendingTerminating状态
  • kubelet日志包含eviction manager: attempting to reclaim ephemeral-storage

诊断

  1. 确认节点状态:kubectl get nodes -o wide
  2. 查看节点详细条件:kubectl describe node <node> | grep -A5 Conditions
  3. 检查节点磁盘使用:SSH登录节点,运行df -hdu -sh /var/lib/kubelet
  4. 查看kubelet日志:journalctl -u kubelet -n 100 --no-pager | grep -i pressure
  5. 检查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,确认无重要临时数据。
  • 优先使用cordondrain,避免Pod被强制驱逐。

回滚

  1. 如果清理磁盘后节点恢复正常(NotReady消失): - 解除隔离:kubectl uncordon <node> - 确认Pod重新调度:kubectl get pods -o wide | grep <node>
  2. 如果磁盘压力无法缓解或节点硬件故障: - 彻底排空节点:kubectl drain <node> --ignore-daemonsets --force(谨慎使用) - 下线节点,替换为新节点。

验证

  • 节点状态变为Readykubectl 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、数据库或监控系统出现类似问题,可以提交日志和配置文件,我们帮你远程诊断。

工单 WhatsApp 联系 咨询