本文主要是介绍kubernetes上节点node.kubernetes.io/disk-pressure:NoSchedule污点导致pod 被驱逐,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
现象:
k8s集群中某台计算节点上pod大量处于驱逐状态,通过describe node发现该node上有Taints: node.kubernetes.io/disk-pressure:NoSchedule 污点。
分析:
查阅文档提示磁盘不足,因为时间紧张,就快速通过df -h命令查看当前磁盘情况,并在可疑的主要目录执行du -d 1 -h |sort -hr查看文件夹大小并删除一部分无用文件。结果k8s node一直没有恢复,仔细分析才先该机器有两块磁盘,一个根分区, 一个是/var/lib/docker/.
kubelet日志
I0713 14:00:43.413075 184655 helpers.go:838] eviction manager: thresholds - grace periods satisified: threshold [signal=imagefs.available, quantity=566938204979] observed 544467224Ki
k8s提到
硬驱逐阈值的配置支持下列标记:
eviction-hard 描述了驱逐阈值的集合(例如 memory.available<1Gi),如果满足条件将触发 pod 驱逐。
kubelet 有如下所示的默认硬驱逐阈值:
memory.available<100Mi
nodefs.available<10%
nodefs.inodesFree<5%
imagefs.available<15%
其中
kubelet 只支持两种文件系统分区。
nodefs 文件系统,kubelet 将其用于卷和守护程序日志等。
imagefs 文件系统,容器运行时用于保存镜像和容器可写层。
imagefs可选。kubelet使用 cAdvisor 自动发现这些文件系统。kubelet不关心其它文件系统。当前不支持配置任何其它类型。例如,在专用文件系统中存储卷和日志是不可以的。
结果:
将/var/lib/docker 所在磁盘空间也清理到已使用空间小于85%, node污点自动消失。当然我们也可以配置kubelet启动参数,将其中阈值设置的更激进,比如images可用空间小于10%才报警之类的。
备注:
刚清理完磁盘空间,node不会立刻将disk-pressure污点去除,因为node刷新有固定频率的,不过可以自行更改kubelet的参数–node-status-update-frequency
–node-status-update-frequency - 指定 kubelet 向控制面组件发送状态的频率
引用:
https://kubernetes.io/zh/docs/tasks/administer-cluster/out-of-resource/
https://kubernetes.io/docs/tasks/administer-cluster/out-of-resource/
https://kubernetes.io/zh/docs/concepts/architecture/nodes/
这篇关于kubernetes上节点node.kubernetes.io/disk-pressure:NoSchedule污点导致pod 被驱逐的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!