在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