Rancher异常排查和解决(cattle-cluster-agent内存泄漏)
2024-09-29
现象
近期部署新服务时,经常导致一些节点因为内存爆炸直接挂掉,导致很多部署在该节点的Pod重启,影响较大,而且近期频繁出现。当前rancher版本为v2.7.3。
排查
我们通过Prometheus排查相关node,pod的资源使用情况,首先排除了导致node挂掉的不是我们新部署的服务,因为新部署的服务运行期间内存、CPU消耗很小且稳定。
查看node节点的监控数据,work-1-58这台机器一直内存泄露,吃掉14G内存后就会把机器弄挂掉。
work-4-12节点存在一样的问题,内存泄露,到达14G左右就会把节点搞挂。但应该是有某些条件导致内存泄露的开始,因为在某个时间点之前,内存都是平稳的。
节点work-7-78 上 cattle-cluster-agent更是把内存吃了28G!明显这个rancher的cattle-cluster-agent有问题,大概率就是内存泄漏了。
这两节点的cattle-cluster-agent有问题,登入pod,top看一下,内存吃了很多。
cattle-cluster-agent有些报错输出
查询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挂掉。
- 长远:将rancher更新到v2.85 release。 当前rancher版本为v2.7.3