【发布时间】:2016-02-12 11:08:07
【问题描述】:
如何在 Kubernetes 中为容器设置 ulimit? (特别是 ulimit -u)
【问题讨论】:
-
docker 支持 ulimit 吗?据我记得他们没有实现它。
-
现在 docker 支持 ulimit。
标签: kubernetes google-kubernetes-engine
如何在 Kubernetes 中为容器设置 ulimit? (特别是 ulimit -u)
【问题讨论】:
标签: kubernetes google-kubernetes-engine
您目前似乎无法设置 ulimit,但这是一个未解决的问题:https://github.com/kubernetes/kubernetes/issues/3595
【讨论】:
如果你能够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>
【讨论】:
在 Kubernetes 集群 (AWS EKS) 中,您可以通过修改运行容器的节点中的 /etc/docker/daemon.json 来更改 docker 容器的 ulimit。
将以下行添加到 /etc/docker/daemon.json
“默认-ulimits”:{ “没有文件”: { "名称": "nofile", “硬”:128000, “软”:128000 } }
最后通过执行以下命令重新启动该节点上的 docker 服务。
服务泊坞窗重启
【讨论】:
首先不适合我。
我做了以下事情(它适用于 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 开始工作了!!!!
【讨论】:
sudo systemctl edit containerd 2. 添加此文本[Service]LimitMEMLOCK=infinity 3. sudo systemctl daemon-reload && sudo systemctl restart containerd