You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes Pod因ephemeral-storage问题频繁驱逐的监控与配置问询

K8s ephemeral-storage 问题解决方案

一、ephemeral-storage 监控方法

  • 命令行快速排查:
    执行 kubectl describe node <节点名> 可查看节点整体临时存储的总容量、已分配容量、剩余可用容量,以及节点上所有Pod的临时存储请求/限制值;
    执行 kubectl top pod <Pod名> --containers 可查看单个容器的实时临时存储用量(前提是集群已部署metrics-server);
    执行 kubectl exec <Pod名> -- df -h /tmp 可直接查看Pod内部临时目录的占用情况。
  • 可观测体系监控:
    基于Prometheus可以直接采集kubelet_ephemeral_storage_used_bytes(单容器临时存储用量)、node_ephemeral_storage_available_bytes(节点剩余临时存储容量)指标,配置阈值告警:节点临时存储使用率达到70%触发预警,85%触发紧急告警。
  • 节点本地排查:
    登录问题worker节点,执行 du -sh /var/lib/kubelet/pods/<PodUID>/volumes/kubernetes.io~empty-dir/ 可精准查询指定Pod的emptyDir等临时存储占用。

二、ephemeral-storage 节点存储路径

ephemeral-storage默认占用节点系统盘空间,具体存储路径分三类:

  • 容器可写层、镜像层:Docker运行时对应路径为/var/lib/docker/,Containerd运行时对应路径为/var/lib/containerd/
  • Pod临时存储卷(emptyDir等):/var/lib/kubelet/pods/<Pod的UID>/volumes/kubernetes.io~empty-dir/
  • 容器标准输出日志:/var/log/pods/<Pod命名空间>_<Pod名>_<PodUID>/<容器名>/
    如果kubelet配置了自定义--root-dir参数,上述路径会对应迁移到自定义目录下。

三、Docker 按大小触发的logrotate配置

默认logrotate按天轮转,无法应对短时间日志暴增的场景,可按如下配置调整:

  1. 编辑Docker日志轮转配置文件 /etc/logrotate.d/docker,写入如下内容:
/var/lib/docker/containers/*/*.log {
    daily
    size 100M
    rotate 5
    compress
    missingok
    notifempty
    copytruncate
    dateext
    dateformat -%Y%m%d-%s
    create 0644 root root
}

核心参数说明:

  • size 100M:单个日志文件达到100M就触发轮转,可根据业务需求调整阈值
  • rotate 5:最多保留5个历史日志文件,避免占用过多空间
  • copytruncate:先拷贝日志到历史文件再清空原日志,无需重启Docker服务
  1. 验证配置有效性:执行 logrotate -d /etc/logrotate.d/docker 查看调试输出,确认无配置错误
  2. 调整轮转执行频率:默认logrotate每天执行一次,可新增定时任务缩短检查间隔,比如每10分钟检查一次:*/10 * * * * root /usr/sbin/logrotate /etc/logrotate.d/docker

四、其他优化建议

  • 调整临时存储阈值:当前配置的单容器默认2Gi限制如果无法匹配业务日志/临时文件生成需求,可按需调大LimitRange的默认值,也可以在业务Deployment的resources字段单独配置ephemeral-storage的请求/限制,优先级高于全局LimitRange。
  • 避免本地留存业务日志:将业务日志通过sidecar采集或者直接输出到标准输出,统一投递到Loki、ELK等集中日志平台存储,不要长期留存到节点本地。
  • 配置kubelet驱逐策略:在kubelet启动参数中新增--eviction-hard=ephemeral-storage<10% 预留10%的节点临时存储空间,避免节点存储被打满;同时配置--eviction-minimum-reclaim=ephemeral-storage=5%,保证每次驱逐至少回收5%的存储空间。
  • 独立挂载临时存储目录:如果节点系统盘容量较小,可以将/var/lib/docker、/var/lib/kubelet目录单独挂载到大容量数据盘,避免系统盘被打满导致节点故障。
  • 自动清理无用资源:配置kubelet镜像垃圾回收参数--image-gc-high-threshold=80、--image-gc-low-threshold=60,当存储使用率达到80%时自动清理无用镜像,降至60%时停止清理。

内容的提问来源于stack exchange,提问作者Anvesh Muppeda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 23:42:01