【k8s】Kubernetes 默认磁盘空间阈值 nodefs.available 和imagefs.available

kubernetes 节点磁盘空间 剩余不足10% 15% 时触发驱逐,跟k8s磁盘空间阈值 nodefs.available 和imagefs.available有关

关于 Kubernetes 中 nodefs.available 的详细解析如下:


1. 基本定义与作用

  • nodefs 是什么
    nodefs 是 Kubernetes 节点的主文件系统,通常对应根文件系统(/),用于存储以下内容:

    • 本地持久化卷(Local Persistent Volume
    • 非内存介质的 emptyDir
    • Kubernetes 组件日志(如 kubelet 日志)
    • /var/lib/kubelet 目录(Pod 的元数据、Volume 挂载信息等)。
  • nodefs.available 的含义
    nodefs.available 表示节点主文件系统的可用空间百分比或绝对值。当该值低于设定阈值时,kubelet 会触发驱逐 Pod 的流程以回收磁盘资源。


2. 默认阈值与版本差异

  • 默认硬驱逐阈值
    根据 Kubernetes 官方文档,默认硬驱逐阈值为 nodefs.available < 10%(Linux 节点)。这与用户提到的 15% 不同,可能混淆了其他参数(如 imagefs.available 默认阈值为 15%)。

  • 版本差异

    • Kubernetes 1.15 及之前版本:根目录默认阈值为 90%(即使用量超过 90% 触发驱逐)。
    • Kubernetes 1.16 及之后版本:默认阈值调整为 nodefs.available < 10%

3. 驱逐触发行为

  • 硬驱逐(Hard Eviction)
    达到硬阈值时,kubelet 会立即终止 Pod,不等待优雅终止期terminationGracePeriodSeconds),直接使用 0s 宽限期强制删除。

  • 驱逐顺序
    kubelet 按以下优先级驱逐 Pod:

    1. 非关键本地存储卷 Pod:优先驱逐使用本地存储但无副本的 Pod。
    2. 最近最少使用(LRU)的 Pod:选择最久未活跃的低优先级 Pod。
    3. 低优先级运行中的 Pod:基于 QoS 等级(BestEffort → Burstable → Guaranteed)。

4. 配置与调优

  • 修改阈值
    通过修改 kubelet 启动参数中的 --eviction-hard--eviction-soft 调整阈值:

    --eviction-hard=nodefs.available<5%,memory.available<500Mi
    

    可通过百分比或绝对值指定(如 10%1Gi)。

  • 软驱逐配置(Soft Eviction)
    允许设置宽限期(grace period),例如:

    --eviction-soft=nodefs.available<15% --eviction-soft-grace-period=nodefs.available=2m
    

    若资源压力持续超过宽限期,则会触发驱逐。


5. 监控与日志

  • 查看驱逐日志

    • 检查 kubelet 日志:
      journalctl -xu kubelet | grep "eviction"
      
    • 系统日志关键字:
      grep -i "nodefs.available" /var/log/messages
      
  • 节点状态更新
    当触发驱逐时,节点状态会更新为 DiskPressure,可通过以下命令查看:

    kubectl describe node <节点名> | grep Conditions -A 5
    

6. 注意事项

  1. 版本兼容性
    不同 Kubernetes 版本的默认阈值可能不同,需根据集群版本确认阈值配置。
  2. 资源预留
    建议预留部分磁盘空间(如通过 --system-reserved)避免频繁触发驱逐。
  3. 静态 Pod 处理
    静态 Pod 被驱逐后会尝试重建,但若节点资源持续紧张,可能无法恢复。

总结

nodefs.available 是 Kubernetes 节点磁盘压力的核心监控指标,默认阈值为 10%。合理配置驱逐策略、结合 Pod 优先级与 QoS 等级,可有效平衡集群稳定性和资源利用率。具体实践中需结合日志监控与节点状态调整参数。

关于 Kubernetes 中 nodefs.available 的详细解析如下:


一、基本定义与作用

  1. imagefs 是什么
    imagefs 是 Kubernetes 节点上的可选文件系统,由容器运行时(如 Docker、Containerd)管理,主要用于存储 容器镜像的只读层 和容器可写层的临时数据(如 OverlayFS 的写入层)。

    • 典型路径示例:Docker 默认的镜像存储路径为 /var/lib/docker,Containerd 为 /var/lib/containerd
    • 若未显式配置 imagefs,容器运行时可能与 nodefs(节点根文件系统)共用同一分区。
  2. imagefs.available 的含义
    imagefs.available 表示 imagefs 文件系统的可用磁盘空间百分比或绝对值。当该值低于设定的阈值时,kubelet 会触发驱逐机制,回收资源以缓解磁盘压力。


二、默认阈值与驱逐规则

  1. 默认硬驱逐阈值

    • imagefs.available < 15%(Linux 节点):当镜像文件系统的可用空间低于 15% 时,kubelet 会立即强制驱逐 Pod。
    • 软驱逐阈值(需手动配置):可通过 --eviction-soft 定义并配合宽限期(如 imagefs.available=10% + eviction-soft-grace-period=2m),允许资源在超阈值后一定时间内恢复。
  2. 驱逐行为

    • 触发驱逐时:kubelet 优先删除未使用的容器镜像以释放空间;若仍无法缓解压力,则按 QoS 等级驱逐 Pod(顺序:BestEffort → Burstable → Guaranteed)。
    • 终止策略:硬驱逐会立即终止 Pod,软驱逐则遵循 terminationGracePeriodSecondseviction-max-pod-grace-period

三、与 nodefs 的区别

对比项 imagefs nodefs
存储内容 容器镜像、容器可写层 kubelet 日志、Pod 元数据、本地持久化卷
驱逐阈值 默认 15%(硬驱逐) 默认 10%(硬驱逐)
优先级 次要(优先清理镜像) 主要(可能直接驱逐 Pod)
典型路径 /var/lib/docker(Docker) /var/lib/kubelet
共用分区影响 若与 nodefs 共用,可能导致镜像清理与 Pod 驱逐同时触发 需单独监控避免连带影响

四、配置与优化建议

  1. 分区规划

    • 建议将 imagefsnodefs 隔离到不同磁盘分区,防止镜像膨胀影响节点核心功能。
    • 若必须共用分区,需预留充足空间(如不低于 30%)并设置更高驱逐阈值。
  2. 调整阈值参数

    • 硬驱逐阈值:通过 kubelet 参数 --eviction-hard=imagefs.available<10% 自定义。
    • 软驱逐阈值:结合宽限期配置(如 --eviction-soft=imagefs.available<20% --eviction-soft-grace-period=imagefs.available=5m)。
  3. 容器运行时配置

    • 调整容器运行时的镜像存储路径(如 Docker 的 --data-root),确保指向专用磁盘。
    • 定期清理无用镜像:通过 docker image prune 或自动化工具(如 CronJob)回收空间。

五、监控与异常处理

  1. 监控指标

    • Prometheus 指标kubelet_volume_stats_available_bytes{fs_type="imagefs"}
    • 节点状态:触发驱逐时节点状态会标记为 DiskPressure,可通过 kubectl describe node 查看。
  2. 日志排查

    • kubelet 日志:过滤关键词 eviction_managerimagefs,查看驱逐决策过程:
      journalctl -u kubelet | grep "imagefs.available"
      
    • 容器运行时日志:检查镜像删除操作(如 Docker 的 /var/log/docker.log)。

六、与其他组件的关系

  1. containerfs 新特性
    Kubernetes v1.33 引入 containerfs 概念,进一步拆分容器可写层存储(与 imagefs 分离),需启用 KubeletSeparateDiskGC 特性门控并配合 CRI-O 运行时。

    • 优势:更精细的磁盘资源管理,避免镜像与容器数据互相影响。
  2. 垃圾回收联动

    • 旧版垃圾回收参数(如 --maximum-dead-containers)已废弃,建议通过驱逐机制统一管理。

总结

imagefs.available 是 Kubernetes 节点存储管理的关键指标,直接影响容器镜像的存储与节点稳定性。合理规划分区、设定阈值并配合监控工具,可有效预防因镜像膨胀导致的集群故障。实际运维中需结合 nodefs 状态综合分析,避免资源争用引发的连锁反应。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,106评论 6 542
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,441评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,211评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,736评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,475评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,834评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,829评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,009评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,559评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,306评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,516评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,038评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,728评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,132评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,443评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,249评论 3 399
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,484评论 2 379

推荐阅读更多精彩内容