麒麟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
posted @ 2024-06-24 22:25  shookm  阅读(106)  评论(0编辑  收藏  举报