将ulimit传递给dockerd

时间:2019-01-04 10:40:23

标签: docker elasticsearch kubernetes ulimit

我是kubernetes的新手,我正在尝试在其上部署Elasticsearch。 目前,elasticsearch要求并由docker允许的文件描述符数量有问题。

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

为了解决这个问题,我尝试了3种不同的方法:

方法1

从docker文档中,dockerd应该使用系统值作为默认值。

  1. /etc/security/limits.con设置* - nofile 65536 f
  2. 重新启动
  3. 执行ulimit -Hn && ulimit -Sn返回两次,两次返回65536
  4. 执行docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn'(应该返回两次65536,但不返回4096和1024)

方法2

  1. --default-ulimit nofile=65536:65536添加到/var/snap/microk8s/current/args/dockerd
  2. 重新启动
  3. 执行docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn'(应返回65536两次,但不返回4096和1024)

方法3

  1. 添加

    “ default-ulimit”:{         “无文件”:{             “名称”:“ nofile”,             “硬”:“ 65536”,             “软”:“ 65536”     } }

    /var/snap/microk8s/354/args/docker-daemon.json

  2. 执行systemctl restart snap.microk8s.daemon-docker.service
  3. 执行journalctl -u snap.microk8s.daemon-docker.service -f将返回unable to configure the Docker daemon with file /var/snap/microk8s/354/args/docker-daemon.json: the following directives don't match any configuration option: nofile

我发现设置ulimit的唯一方法是将--ulimit nofile=65536:65536传递给docker run命令。但是我不能在我的kubernetes Statesfullset配置中做到这一点。

那么您知道我如何解决这个问题? 我在这里没错吗?

预先感谢您的帮助

ps:我在ubuntu 18.0.1上,通过snap安装了docker 18.06.1-ce和microk8s

1 个答案:

答案 0 :(得分:0)

有点晚了,但是如果有人也有这个问题,您可以将此行添加到/var/snap/microk8s/current/args/containerd-env

ulimit -n 65536

然后停止/启动microk8s以启用此修复程序。如果执行命令docker run --rm centos:7 /bin/bash -c 'ulimit -Hn && ulimit -Sn',则会看到两次65536

有关Microk8s Github问题#253的更多信息。 Microk8s已对此合并了一个修复程序,它可能很快就会发布。