低版本内核的CentOS节点反复创删应用时偶现cgroup kmem泄露问题
故障现象
CentOS 7.6节点内核低于3.10.0-1062.12.1.el7.x86_64的场景下(主要为1.17.9版本集群),反复创建应用时出现cgroup kmem泄露,导致节点内存有空余,但是无法创建新的Pod,并提示报错Cannot allocate memory。
问题根因
在反复创建应用时会创建的临时memory cgroup,但在应用删除时,内核已经删除了 cgroup (/sys/fs/cgroup/memory下对应的cgroup目录已经删除), 但在内核中没有释放cssid,导致内核认为的cgroup的数量实际数量不一致,残留的cgroup达到节点上限后,导致该节点无法继续新建Pod。
解决方法
- 该问题可以通过可以在内核层全局使用 “cgroup.memory=nokmem” 参数关闭kmem使用防止发生泄漏。
- 1.17集群版本已停止维护,修复该问题建议升级至1.19及以上集群版本,并通过节点重置为最新版本的操作系统修复该问题,确保内核版本高于3.10.0-1062.12.1.el7.x86_64。