ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

k8s 集群节点 SLUB: Unable to allocate memory on node -1 cgroup 内存泄露问题

2022-08-17 16:30:08  阅读:237  来源: 互联网

标签:node grub kmem Unable allocate cgroup memory 2.2 内核


1.原因

cgroup 的 kmem account 特性在 3.x 内核上有内存泄露问题,如果开启了 kmem account 特性 会导致可分配内存越来越少,直到无法创建新 pod 或节点异常

几点解释:

kmem account 是cgroup 的一个扩展,全称CONFIG_MEMCG_KMEM,属于机器默认配置,本身没啥问题,只是该特性在 3.10 的内核上存在漏洞有内存泄露问题,4.x的内核修复了这个问题。
因为 kmem account 是 cgroup 的扩展能力,因此runc、docker、k8s 层面也进行了该功能的支持,即默认都打开了kmem 属性
因为3.10 的内核已经明确提示 kmem 是实验性质,我们仍然使用该特性,所以这其实不算内核的问题,是 k8s 兼容问题

2.解决方案:

2.1 升级内核到 4.x

既然是 3.x 的问题,直接升级内核到 4.x 及以上即可

2.2修改机器启动引导项

修改虚机启动的引导项 grub 中的cgroup.memory=nokmem,让机器启动时直接禁用 cgroup的 kmem 属性

2.2.1 先备份grub

cp -a /etc/default/grub /etc/default/grub.bak

2.2.2 修改 grub,添加 “cgroup.memory=nokmem”

vim /etc/default/grub

GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet cgroup.memory=nokmem"

2.2.3 生成配置

/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg

2.2.4 重启机器

 reboot

2.2.5 验证

cat /sys/fs/cgroup/memory/kubepods/burstable/pod*/*/memory.kmem.slabinfo 输出为0或者Input/output error说明修改成功

使用如下命令查看KMEM是否打开:

cat /boot/config-`uname -r`|grep CONFIG_MEMCG

CONFIG_MEMCG_KMEM=y # 开启kmem

标签:node,grub,kmem,Unable,allocate,cgroup,memory,2.2,内核
来源: https://www.cnblogs.com/zbhlinux/p/16595615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有