K8S DiskPressure造成pod被驱逐——筑梦之路

现象以及排查过程:

k8s集群某个节点上的pod状态为Evicted,无cni0 flannel.1虚拟网口

使用命令kubectl delete pod xxx 重启该pod,无日志输出,状态不变

使用命令kubectl  get node,该节点是ready状态

使用命令kubectl describe pod xxx ,没有明显的报错信息

使用命令kubectl describe node xx ,最后出现有DiskPressure的关键字

ssh登录该节点,查看磁盘空间,使用率98%

到此,定位到问题是磁盘空间不足造成pod被驱逐

相关资料:

K8S 节点经常 DiskPressure 警告?分析问题将它解决掉! - 墨天轮

k8s Pod状态详解_张折耳的博客-CSDN博客_k8spod状态详解

K8S是否存在因DiskPressure驱逐pod,运维老鸟来剖析!

K8S资源回收机制 - linhaifeng - 博客园

查阅以上资料后,把关键部分总结下:

Kubelet 根据指标达到什么条件才会执行 Pod 驱逐

经过 Kubernetes 文档的介绍,Kubelet 会对下面指标进行判断,当到达设置的条件后,会执行强制驱逐 Pod:

  • memory.available<100Mi: 当内存下降到 100Mi 时 kubelet 开始驱逐 Pod 及其容器来释放磁盘空间。

  • nodefs.available<10%: 当 kubelet 相关存储可用的存储不足 10% 时开始驱逐 Pod 及其容器来释放磁盘空间。

  • imagefs.available<15%: 当容器运行时文件系统可用存储空间不足 15% 时开始驱逐 Pod,并且删除没有被使用的镜像来释放空间。

  • nodefs.inodesFree<5%: (仅 Linux 系统): 当容器运行时 inodes 可用存储空间不足 5% 时开始驱逐 Pod 及其容器来释放磁盘空间。

Kubernetes 触发 DiskPressure 时造成的影响

当触发 DiskPressure 告警时,会产生如下的影响:

  • 驱逐 Pod

  • 删除未使用的容器

  • 阻止新创建的 Pod 调度到该节点中

检查验证:

检查该节点上的镜像:docker images  一个镜像都没有了

检查该节点上的kubelet服务:systemctl status kubelet 发现有回收失败的信息

检查该节点上pod的事件:kubectl get events  发现有pod日志有diskpressure的信息

解决处理:

清理磁盘空间到根分区使用率85%以下

重启kubelet服务

重启有问题的pod

至此,全部恢复正常,pod都是Running状态 

猜你喜欢

转载自blog.csdn.net/qq_34777982/article/details/127417757