最难不过二叉树

Rancher异常排查和解决(cattle-cluster-agent内存泄漏)

2024-09-29

现象

近期部署新服务时,经常导致一些节点因为内存爆炸直接挂掉,导致很多部署在该节点的Pod重启,影响较大,而且近期频繁出现。当前rancher版本为v2.7.3。

排查

我们通过Prometheus排查相关node,pod的资源使用情况,首先排除了导致node挂掉的不是我们新部署的服务,因为新部署的服务运行期间内存、CPU消耗很小且稳定。

查看node节点的监控数据,work-1-58这台机器一直内存泄露,吃掉14G内存后就会把机器弄挂掉。

image (4).png

work-4-12节点存在一样的问题,内存泄露,到达14G左右就会把节点搞挂。但应该是有某些条件导致内存泄露的开始,因为在某个时间点之前,内存都是平稳的。

image (5).png

节点work-7-78 上 cattle-cluster-agent更是把内存吃了28G!明显这个rancher的cattle-cluster-agent有问题,大概率就是内存泄漏了。

image (6).png

这两节点的cattle-cluster-agent有问题,登入pod,top看一下,内存吃了很多。

image (7).png

cattle-cluster-agent有些报错输出

image (12).png

查询rancher的issue,有类似的问题:

https://github.com/rancher/rancher/issues/44634

https://github.com/rancher/rancher/issues/43515

在新版本rancher已经合了这个bugfix

bugfix : https://github.com/rancher/steve/pull/162

这里总结一下rancher这个bug出现的原因:

  • 总的原因就是go并发写map会导致panic,发生panic后导致cluster agent重启
  • 当你的pod很多时,进行pod的增删就会容易触发

解决方案

  • 临时:cattle-cluster-agent的内存限额设置为2GB,当pod内存溢出时只重启该pod,而不会一直内存泄漏导致node挂掉。

image (9).png

  • 长远:将rancher更新到v2.85 release。 当前rancher版本为v2.7.3