kubectl get pod -A | grep Evicted kubectl describe node node-1 | grep -A3 DiskPressure kubectl describe pod api-7f9 | grep -A4 'Reason'
早上发现三个 Pod 变成 Evicted,describe 里写着 The node was low on resource: ephemeral-storage。节点 df 还有 15% 可用。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,kubelet 按 ephemeral-storage 的阈值驱逐 Pod,容器可写层和日志都算在这项里,和节点磁盘剩余比例不是一回事。超过阈值就先杀占用最大的 Pod,容器本身没有报错。
「Pod Evicted」改完先别急着全量,挑一台机器放半天,真有问题这段时间就能看出来。改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。
验证用真实数据走一遍,测试数据太干净,边界情况根本碰不到。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。
处理上按这个顺序:先看节点 Conditions 里 DiskPressure 是不是 True;统计每个 Pod 的 ephemeral-storage 用量 找出大头;把日志和临时目录挂到卷上 不要写在可写层;给容器设 ephemeral-storage 的 requests 和 limits 让调度有依据。
改完只确认一件事:节点 DiskPressure 变回 False,新 Pod 不再被驱逐,Evicted 数量归零。
