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

ltqd579y  于 2023-08-03  发布在  Kubernetes
关注(0)|答案(5)|浏览(230)

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

um6iljoc

um6iljoc1#

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

o3imoua4

o3imoua42#

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

  • 对于amazon EKS群集,文件位于/usr/lib/systemd/system/docker.service
  • 在文件中添加属性LimitMEMLOCK=Infinity,然后重启docker服务。

sudo service docker restart
这将使docker容器具有无限的memlock值。可能与docker cli等效的命令是:
docker run --ulimit memlock=-1:-1 <docker image>

3bygqnnd

3bygqnnd3#

在Kubernetes集群(AWS EKS)中,您可以通过修改容器运行的节点中的/etc/docker/daemon. json来更改docker容器的ulimit。
将以下行添加到/etc/docker/daemon. json
“default-ulimits”:{“nofile”:{“Name”:“nofile”,“Hard”:128000,“软”:128000
最后通过执行以下命令重新启动该节点上的docker服务。
服务docker重启

rekjcdws

rekjcdws4#

尤其是不为我工作。
我做了以下工作(它在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开始工作了!!!!

neekobn8

neekobn85#

如果你使用Kubernetes,你永远不需要memlock!!!!
如果你在Kubernetes中使用ElasticSearch,那么用下面的环境变量配置它:

bootstrap.memory_lock=false

字符串
False!
您不需要在Kubernetes中设置memlock,因为Kubernetes不使用swap-file运行。
一些应用程序(例如ElasticSearch)无法正常工作,如果操作系统提供给它们的一些RAM被刷新到磁盘的交换文件中。因此,这些应用程序要求您阻止内存刷新到磁盘。
如果在操作系统中禁用了swap-file,那么这些应用程序将永远不会遇到这个问题。这正是Kubernetes的情况,因为它需要在安装时禁用交换文件。
如果你使用Kubernetes,那么你不需要阻止内存刷新到磁盘,因为这永远不会发生。

相关问题