K8S故障处理指南:pod驱逐问题处理
创始人
2025-07-14 16:11:44
0

在K8S集群故障处理过程中,你可能遇到过pod的各种状态,Evicted状态代表你的K8S环境遇到了资源驱逐的问题,本节通过对驱逐问题的解决,参数的调整,问题的处理思路,希望给你解决此类问题提供帮助。

pod驱逐问题

pod出现状态为Evicted时,表示出现了驱逐。pod驱逐出现的原因一般为资源不足,内存或磁盘空间不足,kubect describe node 根据集群事件或者系统日志来判断处于哪种驱逐场景。

图片

  • 内存驱逐

图片

关键字:MemPressure

操作系统日志,kubelet厂商驱逐pod来回收内存

图片

  • 磁盘驱逐

根据pod日志查看也可以。

图片

关键字:DiskPressure

当出现磁盘驱逐的时候,K8S的机制会在磁盘资源不足时删除未使用的容器镜像来释放空间。

处理思路

总体策略:根据分析的原因对应处理即可,找到驱逐pod所在的node节点,分析内存,cpu或者磁盘空间,分别采取不同措施。

首先是释放资源,让pod不再出现驱逐事件,保证业务使用不受影响。

内存场景说明

  1. 如果是内存出现驱逐,应用是多副本的情况下,可以择时重启导致内存占用高的服务释放资源
  2. 若没有发现占用内存高的资源,查看buff/cache占用是否过多不释放,可以临时或者加定时任务释放
echo 1 > /proc/sys/vm/drop_caches
或者 sysctl -w vm.drop_caches=1
echo 2 > /proc/sys/vm/drop_caches
或者 sysctl -w vm.drop_caches=2
echo 3 > /proc/sys/vm/drop_caches
或者sysctl -w vm.drop_caches=3

3.如果是正常业务占用,则后续及时扩容内存即可。

4.如果是其他场景,检查操作系统是否为XC系统,需要找厂商进行分析。

  • 清理驱逐pod

清理驱逐的pod,避免反复重启积累过多。

kubectl get pod -o wide | grep  'Evicted' | awk '{print $2}' | xargs kubectl delete pod
  • 关于驱逐的监控项

在K8S集群中,为了及时监控到驱逐问题,我们可以通过添加Prometheus监控来提前检测。

# 监控内存驱逐
kube_node_status_condition{cnotallow="MemoryPressure",status="true"} ==1
#监控磁盘驱逐
kube_node_status_condition{cnotallow="DiskPressure",status="true"} == 1

驱逐参数配置

解决了问题,我们来研究下驱逐的策略是怎样的。

节点压力驱逐是 kubelet 主动终止 Pod 以回收节点上资源的过程。

kubelet 监控集群节点的内存、磁盘空间和文件系统的 inode 等资源。当这些资源中的一个或者多个达到特定的消耗水平, kubelet 可以主动地使节点上一个或者多个 Pod 失效,以回收资源。

驱逐的默认配置:

memory.available<100Mi
nodefs.available<10%
imagefs.available<15%
nodefs.inodesFree<5%(Linux 节点)

例如,如果一个节点的总内存为 10GiB,并且你希望在可用内存低于 1GiB 时触发驱逐则可以将驱逐条件定义为 memory.available<10% 或 memory.available< 1G(你不能同时使用二者)。

有些情况下,当你的内存或者磁盘足够多时,采用百分比可能会导致在资源充足的情况下,产生驱逐问题,因此我们可以将默认驱逐修改为当剩余资源低于某个阈值时产生驱逐问题。

cat /data/kube/kubelet/kubelet-config.yaml  | grep -A 4 evictionHard
evictionHard:
  imagefs.available: "1Gi"
  memory.available: "200Mi"
  nodefs.available: "1Gi"
  nodefs.inodesFree: "5%"

重启让配置生效。

sudo systemctl daemon-reload && sudo systemctl restart kubelet

重启完成后检查pod是否正常,业务闲时操作。

官方网站: https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/node-pressure-eviction/#eviction-signals

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...