节点存在node.kubernetes.io/memory-pressure:NoSchedule,但节点内存充足

前言

环境:k8s1.20、3节点 node1、node2、node3

问题

执行ubectl describe node | grep -i taints 命令时发现node2节点存在污点,显示内存不足
Taints: node.kubernetes.io/memory-pressure:NoSchedule
查看节点的详情:
在这里插入图片描述
在这里插入图片描述
从上面的节点详情可以看出,node2节点可分配的内存时36G,已分配才是55Mi (0%),所以为什么会有内存不足的污点呢?尝试重启kubelet或手动删除污点,结果还是一样,污点会自动加上。
从上面的图中最后的一句Warning信息可以看到,kubelet企图回收内存,但是存在异常了。

查看node2节点内存如下,available内存是25G,free是10G。
在这里插入图片描述
查看node1节点内存:
在这里插入图片描述

查看node3节点内存:
在这里插入图片描述
可以看到,node1和node3的内存,无论是free 还是available,都比node2的小,那么为什么node1和node3没有内存压力污点,而node2有内存污点呢?

解决办法:
1、重启kubelet 、docker,仍然有内存压力污点;
2、排查网络插件flannel,flannel是running状态的,排查节点磁盘,磁盘空间充足。
3、决定清空服务器缓存
echo 3 > /proc/sys/vm/drop_caches
drop_caches的值可以是0-3之间的数字,代表不同的含义:
0:不释放(系统默认值)
1:释放页缓存
2:释放dentries和inodes
3:释放所有缓存

清空缓存后,内存变成了:
在这里插入图片描述
重启kubelet服务,这时没有节点内存压力了,节点正常了。
但是还是不明白为什么上面说的,node1和node3的内存,无论是free 还是available,都比node2的小,那么为什么node1和node3没有内存压力污点,而node2有内存污点呢?

问题仍然存在

第二天发现,k8s集群仍然显示内存压力污点,安装metric-server,执行kubectl top node 发现,有节点内存栏显示100%,但是到对应的节点上free -h 查看内存,内存不管是free 还是available 都还有十几G。
排查系统日志,tail -222f /var/log/messages,发现存在大量异常报错信息,存在ceph相关的异常进程,停止掉这些进程,重启kubelet之后,内存压力的污点就没有了。

这个错误提示是因为 Kubernetes 集群中的节点出现污点 (Taint)。污点是指节点上的一些标记,用于表明节点的一些特属性或状态,例如节点上硬盘容量不足。当一个 Pod 需要调度到某个节点上时,Kubernetes 会根据 Pod 的需求和节点的状态来判断是否可以将其调度到该节点上。如果节点上的污点与 Pod 的需求不匹配,那么该节点就会被排除在调度的范围之外,从而导致 Pod 调度失败。 根据这个错误提示,您的 Kubernetes 集群中有两个节点出现污点:一个是控制平面节点上的 node-role.kubernetes.io/control-plane 污点,另一个是某个节点上的 node.kubernetes.io/disk-pressure 污点。其中,node-role.kubernetes.io/control-plane 污点用于标记控制平面节点,通常不应该将其他类型的 Pod 调度在控制平面节点上。而 node.kubernetes.io/disk-pressure 污点则表示该节点上的硬盘容量不足。 为了解决这个问题,您可以采取以下几个步骤: 1. 查看节点状态:使用 kubectl get nodes 命令查看节点的状态,确认哪些节点出现污点。 2. 解除污点:使用 kubectl taint nodes 命令解除节点上的污点,例如:kubectl taint nodes node1 node-role.kubernetes.io/control-plane=:NoSchedule 可以解除节点 node1 上的控制平面污点,从而允许其他类型的 Pod 调度到该节点上。 3. 节点维护:如果污点是由于节点上的硬盘容量不足导致的,那么您可以考虑对该节点进行维护,扩容硬盘容量或清理无用数据。在进行节点维护之前,需要使用 kubectl drain 命令将该节点上的 Pod 调度到其他节点上,避免数据丢失或服务中断。 希望这些信息能够帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值