麒麟v10 SP2系统容器化部署MySQL、RabbitMQ、redis-ha-haproxy等出现OOMkill内存异常升高问题
问题场景
操作系统:麒麟系统v10 SP2
k8s版本:v1.23.17
容器运行时:containerd
Rabbitmq镜像版本:3.9.11-debian-10-r0(3.11.10-debian-11-r0版本已正常)
Mysql镜像版本:mysql_5.7.37-debian-10-r95(8.0.20版本已正常)
redis-ha-haproxy镜像版本:haproxy:2.0.22-alpine、haproxy:2.0.25-alpine
问题描述
容器化部署Rabbitmq,mysql,出现OOM内存异常升高导致系统内存无限制打满,以及kubesphere安装部署redis-ha-haproxy时异常(CrashLoopBackOff ,System OOM encountered)无法正常运行。
- mysql
- redis-ha-haproxy
问题原因
与麒麟系统工程师沟通了下,麒麟反馈在麒麟系统v10 SP2版本上,systemd版本已经升级到了243,内存异常容器镜像使用的systemd为240版本,当使用SP2系统版本部署容器化中间件会因为open file数目巨大导致内存占用异常。
问题修复
修改docker或containerd的容器运行时ulimit nofile
-
docker
可以从配置修改daemon.json,或是从systemd服务层面进行修改,建议从systemd服务层面进行修改
-
docker配置修改daemon.json
"default-ulimits": { "nofile": { "Name": "nofile", "Hard": 1048576, "Soft": 1048576 } }
-
systemd服务层面进行修改
vim /lib/systemd/system/docker.service # 将LimitNOFILE=infinity改为LimitNOFILE=1048576 LimitNOFILE=1048576
修改完成后进行reload,重启
systemctl daemon-reload systemctl restart docker
查看容器ulimit值为设置的1048576则正常
ulimit -n 1048576
-
-
containerd
systemd服务层面进行修改
vim /lib/systemd/system/containerd.service # 将LimitNOFILE=infinity改为LimitNOFILE=1048576 LimitNOFILE=1048576
修改完成后进行reload,重启
systemctl daemon-reload systemctl restart containerd
查看容器ulimit值为设置的1048576则正常
ulimit -n
1048576