imagefs和rootfs 3
| 资源类型 | 官方 metric | 官方触发条件 | 官方含义 | 官方文档 | kubelet检查路径 | 源码位置 |
|---|---|---|---|---|---|---|
| nodefs | nodefs.available |
nodefs.available < evictionHard |
节点磁盘(宿主机 filesystem) | https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/ | /、/var/lib/kubelet、node filesystem stats |
kubelet/stats/factory.go |
| imagefs | imagefs.available |
imagefs.available < evictionHard |
镜像层占用磁盘 | https://kubernetes.io/docs/concepts/containers/images/ | /var/lib/docker 或 containerd snapshotter |
kubelet/stats/fs_resource_analyzer.go |
| containerfs | containerfs.usage |
containerfs.usage > container limit |
容器 writable layer | https://kubernetes.io/docs/concepts/policy/limit-range/ | overlay upperdir(容器可写层) | kubelet/container/runtime_stats.go |
| ephemeral-storage | 聚合 nodefs + containerfs | request/limit 超限 | Pod 临时存储 | https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#ephemeral-storage | pod rootfs + writable layer | kubelet/eviction/eviction_manager.go |
| 类型 | 官方语义 | kubelet实现来源 | 真实计算方式 | 作用范围 | 包含内容 | 怎么查看 |
|---|---|---|---|---|---|---|
| nodefs | Node main filesystem | statfs("/") |
root filesystem device usage | Node级 | kubelet数据、logs、emptyDir、系统文件 | 1. df -h /2. kubectl describe node 查看 ephemeral-storage3. kubelet /stats/summary API |
| imagefs | container runtime image storage filesystem | statfs(runtimeRoot) |
runtime目录所在filesystem device | Node级 | images、read-only layers、snapshot | 1. df -h /var/lib/containerd 或 /var/lib/docker2. crictl imagefsinfo3. kubectl describe node |
| containerfs | writable container filesystem usage | cadvisor metrics | per-container FS统计 | Container级 | writable layer、logs、container local storage | 1. kubelet /metrics/cadvisor2. Prometheus指标:container_fs_usage_bytes3. kubectl top pod --containers(部分可见) |
| rootfs | container writable layer(overlay upperdir) | overlayfs + cadvisor | container_fs_usage_bytes |
Container级 | upperdir diff、写层 | 1. du -sh /var/lib/containerd/io.containerd.snapshotter.v1.overlayfs(或docker overlay2)2. cadvisor指标3. 进入Pod后 df -h |
🔍 补充说明(关键区别)
1️⃣ nodefs vs imagefs
-
nodefs:整个节点根盘(最容易触发
DiskPressure) -
imagefs:专门给镜像用的盘(如果单独挂盘才会区分)
👉 如果没单独挂盘:
-
nodefs = imagefs(逻辑上分,但物理上同一个盘)
2️⃣ containerfs vs rootfs
这两个最容易混淆:
-
containerfs(广义)
-
kubelet/cadvisor统计的容器文件系统使用量
-
包含:
-
rootfs(写层)
-
logs
-
volume中的本地存储(部分)
-
-
-
rootfs(狭义)
-
只指:
-
overlay upperdir(容器写层)
-
-
👉 可以理解为:
containerfs = rootfs + logs + 其他本地写入
3️⃣ Kubernetes 资源对应关系
| 资源 | 实际来源 |
|---|---|
| ephemeral-storage | nodefs + containerfs 汇总 |
| eviction(驱逐) | nodefs / imagefs |
| metrics-server | 主要看 containerfs |
🧪 常用排查组合(实战)
如果你在查磁盘问题,一般这么用:
📌 查节点是否爆盘
df -h
kubectl describe node
📌 查容器写爆
kubectl top pod --containers
📌 查具体哪个容器写层大
curl http://<node>:10250/metrics/cadvisor | grep container_fs_usage_bytes
📌 查 overlay 实际占用
du -sh /var/lib/containerd/*
如果你愿意,我可以帮你画一张 nodefs / imagefs / containerfs / rootfs 关系图(非常直观),或者结合你当前集群(containerd / docker)给你一套排查脚本。
浙公网安备 33010602011771号