已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
背景 我维护一个 8 节点(32C128G,K8s 1.28.9,containerd 1.7.13,cgroup v2)的生产集群,上面混跑 Java 微服务、Go 网关和一个 Flink 流计算作业。最近两次节点磁盘(/var/lib/containerd + /var/log)被打满,触发 kubelet 驱逐,连带杀掉了不相关的业务 Pod。
现象
os.TempDir() 写临时 TLS 证书,单次 50–200MB;resources.limits.ephemeral-storage: 10Gi,结果 Flink 被驱逐过两次,而真正持续吃磁盘的 Java 日志 Pod 反而没被限制住(因为日志走 stdout → containerd,不经过容器的 ephemeral-storage cgroup)。已尝试的排查
kubelog 没有针对单 Pod 的清理策略;emptyDir + sizeLimit 替代 /tmp,但 K8s 1.28 文档里 emptyDir sizeLimit 的驱逐行为描述得很模糊(是硬杀还是先 SIGTERM?阈值是 usage 还是 usage+reserved?);container_fs_usage_bytes,发现它统计的"container fs"并不包含 containerd 日志目录,所以监控侧也看不到真实磁盘压力。期望得到的答案形态