如何在 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