如何在Kubernetes中为容器设置ulimit



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

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

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

  • 对于amazon EKS集群,文件位于CCD_ 2。

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

    sudo service docker restart

这将使docker容器具有无限的memlock值。可能与docker-cli等效的命令是:

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

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

在/etc/docker/daemon.json 中添加以下行

"默认ulimits":{"nofile":{"名称":"nofile","硬":128000,"软":12.8万}}

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

服务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
...

弹性搜索开始工作了!!!!

如果你使用Kubernetes,你永远不需要memlock!!!!

如果您在Kubernetes中使用ElasticSearch,则使用以下环境变量进行配置:

bootstrap.memory_lock=false

假的!!!

您不需要在Kubernetes中设置memlock,因为Kubernete不使用交换文件运行。

如果操作系统提供给某些应用程序的RAM被刷新到磁盘的交换文件中,则某些应用程序(例如ElasticSearch)无法正常工作。因此,这些应用程序要求您阻止将内存刷新到磁盘。

如果交换文件在操作系统中被禁用,那么这些应用程序将永远不会遇到这个问题。这正是Kubernetes的情况,因为它需要在安装时禁用交换文件。

如果您使用的是Kubernetes,那么您不需要阻止内存刷新到磁盘,因为这永远不会发生。

最新更新