首页/云/Kubernetes 速查/DiskPressure 与磁盘清理
集群运维与排障54 条

DiskPressure 与磁盘清理

节点磁盘或 inode 紧张触发 DiskPressure:kubelet 会清扫镜像、拒绝新 Pod 甚至驱逐;处理要先定位是 nodefs 还是 imagefs。

Kubernetes 速查云更新于 2026-10-13

磁盘压力从哪来

节点磁盘容量或索引节点紧张时,节点会被标记为磁盘压力。触发后 kubelet 先回收镜像与已退出容器,压力持续则拒绝新 Pod 并驱逐已有工作负载。处理这类问题要先分清是容量不足还是索引节点耗尽,两者现象相似但清理手段不同。

基本信息

适用平台Kubernetes 1.20+,节点条件由 kubelet 维护
触发条件磁盘容量低于阈值或可用索引节点不足
两种统计域节点文件系统与镜像文件系统
自我恢复回收未被使用的镜像与已结束的容器
升级后果拒绝新 Pod、驱逐已有 Pod

典型使用场景

  • 节点突然标记不可调度,需要确认是不是磁盘问题
  • 容器频繁被驱逐,事件原因指向本地存储不足
  • 批量拉取大镜像后磁盘水位告警
  • 索引节点耗尽导致无法创建新文件,容量却还有很多
  • 清理前评估镜像、容器日志与业务数据各自占用

节点侧定位(节点上执行)

节点侧定位(节点上执行)
df -h /var/lib/kubelet /var/lib/containerd / 2>/dev/null   # 容量水位
df -i / | tail -1                                            # 索引节点水位
journalctl -u kubelet --no-pager | grep -i -E 'imagefs|nodefs|disk' | tail -20
du -sh /var/lib/containerd/* 2>/dev/null | sort -h | tail -5   # 占用大头

集群侧观察

集群侧观察
kubectl describe node node1 | grep -i -A2 DiskPressure          # 节点条件
kubectl get events -A --field-selector reason=Evicted | tail -5   # 驱逐事件
kubectl get pods -A --field-selector spec.nodeName=node1 | grep -v Running   # 受影响负载

盘位与成因对照

观察点含义常见成因
节点文件系统系统盘与容器日志所在分区日志轮转缺失、临时文件堆积
镜像文件系统镜像与容器层存放分区镜像版本过多、长期不清理
索引节点文件数量上限大量小文件,容量仍有剩余
镜像回收自动回收未使用镜像回收后水位仍高说明有大文件占用
清理前先看清楚占用分布。多数情况下镜像层与容器日志才是大块头,只删业务日志往往收效有限,而且可能删掉排查所需的现场信息。
索引节点耗尽与容量耗尽表现相似但成因不同,只用容量命令检查会得出错误结论。两者应同时查看。

易错点

  • 只删业务日志就动手:镜像层与容器日志通常才是主要占用,应先看占用排名再清理
  • 只看容量不看索引节点:文件数量到顶时容量还有余量,问题表现却一样
  • 把驱逐当成应用故障排查:事件里已经写明本地存储不足,先解决节点水位
  • 长期不做镜像清理:频繁发布的环境镜像堆积很快,节点水位在毫无预警的情况下触顶

数据来源与参考

  • Kubernetes 官方文档 · 节点条件与镜像/容器回收
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌