【问题标题】:How do I set ulimit for containers in Kubernetes?如何在 Kubernetes 中为容器设置 ulimit?
【发布时间】:2016-02-12 11:08:07
【问题描述】:

如何在 Kubernetes 中为容器设置 ulimit? (特别是 ulimit -u)

【问题讨论】:

  • docker 支持 ulimit 吗?据我记得他们没有实现它。
  • 现在 docker 支持 ulimit。

标签: kubernetes google-kubernetes-engine


【解决方案1】:

您目前似乎无法设置 ulimit,但这是一个未解决的问题:https://github.com/kubernetes/kubernetes/issues/3595

【讨论】:

    【解决方案2】:

    如果你能够ssh进入kubernetes集群,你可以修改docker.service文件。

    • 对于亚马逊 EKS 集群,该文件位于 /usr/lib/systemd/system/docker.service.

    • 在文件中追加属性LimitMEMLOCK=Infinity,然后重启docker服务。

      sudo service docker restart

    这将启动具有无限 memlock 值的 docker 容器。大概相当于

    docker run -ulimit memlock=-1:-1 <docker image>

    【讨论】:

    • 对于不使用 dockershim 的 containerd 用户:1. sudo systemctl edit containerd 2. 添加此文本 [Service]LimitMEMLOCK=infinity 3. sudo systemctl daemon-reload && sudo systemctl restart containerd
    【解决方案3】:

    在 Kubernetes 集群 (AWS EKS) 中,您可以通过修改运行容器的节点中的 /etc/docker/daemon.json 来更改 docker 容器的 ulimit。

    将以下行添加到 /etc/docker/daemon.json

    “默认-ulimits”:{ “没有文件”: { "名称": "nofile", “硬”:128000, “软”:128000 } }

    最后通过执行以下命令重新启动该节点上的 docker 服务。

    服务泊坞窗重启

    【讨论】:

      【解决方案4】:

      首先不适合我。

      我做了以下事情(它适用于 ubuntu:18.04 和 centos/7):

      sudo nano /usr/lib/systemd/system/docker.service
      

      添加

      --default-ulimit memlock=-1:-1
      

      到线

      ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
      

      此行必须如下所示:

      ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --default-ulimit memlock=-1:-1
      

      然后你必须正确地重新加载:首先运行命令

      sudo systemctl daemon-reload
      

      然后运行命令

      sudo systemctl restart docker.service
      

      要检查是否有效,请运行命令

      docker run busybox:1.28 cat /proc/1/limits
      

      您必须看到类似这样的无限最大锁定内存:

      ...
      Max locked memory         unlimited            unlimited            bytes
      ...
      

      elasticsearch 开始工作了!!!!

      【讨论】:

      • 也适用于 Ubuntu 20.04。谢谢!
      • 你的回答也是我唯一的工作方式。
      • as dockershim deprecated in k8s ,我仅使用 containerd 托管了一个 k8s 集群,因此此解决方法不适用于我的环境。
      • 对于容器用户:1. sudo systemctl edit containerd 2. 添加此文本[Service]LimitMEMLOCK=infinity 3. sudo systemctl daemon-reload && sudo systemctl restart containerd
      猜你喜欢
      • 1970-01-01
      • 2012-10-26
      • 2021-09-15
      • 2022-10-25
      • 2019-07-21
      • 2017-07-19
      • 2018-08-24
      • 1970-01-01
      • 2016-11-23
      相关资源
      最近更新 更多