Kubernetes节点有剩余空间但Pod报磁盘不足?ZooKeeper StatefulSet恢复求助
ZooKeeper 单Pod CrashLoopBackOff 无状态集重启修复方案
故障场景说明
- 故障Pod属于ZooKeeper StatefulSet管理负载,删除重建Pod后仍持续进入CrashLoopBackOff状态
- 所在节点剩余物理存储空间达46G,对应Pod申请的持久化存储容量仅2000Mi,不存在节点层面磁盘容量不足问题
- Pod启动日志输出如下报错:
===> 正在配置... [Errno 28] 设备上无剩余空间,执行命令
[/usr/local/bin/dub template /etc/confluent/docker/myid.template /var/lib/zookeeper/data/myid]失败!
- 修复目标:无需终止、重新部署整个StatefulSet,仅恢复单Pod正常运行
分步排查与修复操作
排查inode资源耗尽问题
物理磁盘容量充足但写文件报设备无剩余空间,最常见的触发原因是文件系统inode使用率100%:
- 登录故障Pod所在节点,执行
df -i检查ZooKeeper PVC挂载路径的inode使用率 - 若该路径inode使用率打满,即使剩余GB级存储空间,也无法创建新文件
- 操作:定位该路径下的大量碎小临时文件、过期日志残留,删除无价值文件释放inode资源,过程不需要中断整个StatefulSet服务
排查持久化卷容量超限问题
节点层面磁盘空间充足,不代表ZooKeeper绑定的持久化卷容量未超限:
- 执行
kubectl get pvc | grep zookeeper定位故障Pod对应的PVC资源,执行kubectl describe pvc <PVC名称>确认卷绑定的实际存储配额 - 通过节点调试容器进入PVC实际挂载目录,执行
du -sh <卷挂载路径>统计目录实际占用容量 - 操作:若卷目录下存在超量的过期快照、旧事务日志,手动清理释放卷配额空间,即可让Pod启动时的模板渲染命令正常写入文件
排查卷只读挂载异常
部分分布式存储在IO连续故障、写入错误达到阈值时,会自动将卷切换为只读模式,此时写入文件会触发无剩余空间类报错:
- 进入节点的PVC挂载目录,执行
touch test_write_file验证写入权限 - 操作:若验证为只读挂载,确认底层存储硬件、网络无故障后,重新将该挂载点设置为可写模式,Pod下次启动重试即可正常写入myid文件
手动生成myid文件跳过启动脚本步骤
若上述排查均无异常,可直接手动修复目标文件,规避启动脚本的渲染报错:
- 根据ZooKeeper集群的节点ID规则,生成对应Pod要求的myid值,手动写入PVC挂载路径下
/var/lib/zookeeper/data/myid文件 - 启动脚本检测到目标文件已存在时,会自动跳过模板渲染步骤,完成Pod启动流程,全程不需要重启整个StatefulSet
内容的提问来源于stack exchange,提问作者darthsithius
相关产品推荐
相关产品推荐

