如何在Kubernetes中为容器设置ulimit?(特别是ulimit -u)
um6iljoc1#
似乎您目前无法设置ulimit,但这是一个开放的问题:https://github.com/kubernetes/kubernetes/issues/3595
o3imoua42#
如果你能够ssh到kubernetes集群,你可以修改docker.service文件。
docker.service
/usr/lib/systemd/system/docker.service
LimitMEMLOCK=Infinity
sudo service docker restart个这将使docker容器具有无限的memlock值。可能与docker cli等效的命令是:docker run --ulimit memlock=-1:-1 <docker image>个
sudo service docker restart
docker run --ulimit memlock=-1:-1 <docker image>
3bygqnnd3#
在Kubernetes集群(AWS EKS)中,您可以通过修改容器运行的节点中的/etc/docker/daemon. json来更改docker容器的ulimit。将以下行添加到/etc/docker/daemon. json“default-ulimits”:{“nofile”:{“Name”:“nofile”,“Hard”:128000,“软”:128000最后通过执行以下命令重新启动该节点上的docker服务。服务docker重启
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开始工作了!!!!
neekobn85#
如果你使用Kubernetes,你永远不需要memlock!!!!如果你在Kubernetes中使用ElasticSearch,那么用下面的环境变量配置它:
bootstrap.memory_lock=false
字符串False!您不需要在Kubernetes中设置memlock,因为Kubernetes不使用swap-file运行。一些应用程序(例如ElasticSearch)无法正常工作,如果操作系统提供给它们的一些RAM被刷新到磁盘的交换文件中。因此,这些应用程序要求您阻止内存刷新到磁盘。如果在操作系统中禁用了swap-file,那么这些应用程序将永远不会遇到这个问题。这正是Kubernetes的情况,因为它需要在安装时禁用交换文件。如果你使用Kubernetes,那么你不需要阻止内存刷新到磁盘,因为这永远不会发生。
5条答案
按热度按时间um6iljoc1#
似乎您目前无法设置ulimit,但这是一个开放的问题:https://github.com/kubernetes/kubernetes/issues/3595
o3imoua42#
如果你能够ssh到kubernetes集群,你可以修改
docker.service
文件。/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>
个3bygqnnd3#
在Kubernetes集群(AWS EKS)中,您可以通过修改容器运行的节点中的/etc/docker/daemon. json来更改docker容器的ulimit。
将以下行添加到/etc/docker/daemon. json
“default-ulimits”:{“nofile”:{“Name”:“nofile”,“Hard”:128000,“软”:128000
最后通过执行以下命令重新启动该节点上的docker服务。
服务docker重启
rekjcdws4#
尤其是不为我工作。
我做了以下工作(它在ubuntu:18.04和centos/7上工作):
字符串
添加
型
到线
型
这一行必须看起来像:
型
然后你必须正确地重新加载:先运行命令
型
然后运行命令
型
要检查它是否工作,请运行命令
型
你必须看到无限的最大锁内存,如下所示:
型
Elasticsearch开始工作了!!!!
neekobn85#
如果你使用Kubernetes,你永远不需要memlock!!!!
如果你在Kubernetes中使用ElasticSearch,那么用下面的环境变量配置它:
字符串
False!
您不需要在Kubernetes中设置memlock,因为Kubernetes不使用swap-file运行。
一些应用程序(例如ElasticSearch)无法正常工作,如果操作系统提供给它们的一些RAM被刷新到磁盘的交换文件中。因此,这些应用程序要求您阻止内存刷新到磁盘。
如果在操作系统中禁用了swap-file,那么这些应用程序将永远不会遇到这个问题。这正是Kubernetes的情况,因为它需要在安装时禁用交换文件。
如果你使用Kubernetes,那么你不需要阻止内存刷新到磁盘,因为这永远不会发生。