如何在 Kubernetes 中为容器设置 ulimit?

Posted

技术标签:

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

(特别是 ulimit -u)

【问题讨论】:

docker 支持 ulimit 吗?据我记得他们没有实现它。 现在 docker 支持 ulimit。 【参考方案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

以上是关于如何在 Kubernetes 中为容器设置 ulimit?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Ignite XML 配置中为 Kubernetes IP Finder 设置 Master Url

如何在 Flutter 中为容器的底部边框设置动画?

如何从 Kubernetes 在容器中设置环境变量?

在 Kubernetes 中为 Statefulset 应用 HPA?

运维实战 容器部分 Kubernetes调度

运维实战 容器部分 Kubernetes调度