Kubernetes、Docker 和 vm.max_map_count

Spe*_*ort 5 deployment configuration-management docker kubernetes

在尝试在 K8 上运行 ElasticSearch 时,我遇到了一个会杀死容器的错误:

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

幸运的是,这有很好的文档记录,我能够找出使其稳定的容器的配置设置。这个问题不是关于那个。

我的问题是,为什么在 K8 和 Docker 上会发生这种情况?我在两种情况下都使用相同的图像(官方 ES 图像),那么值不同的一些原因是什么?有没有办法可以配置 K8 或运行它的机器,以免出现这种情况?

小智 6

vm.max_map_count可以在主机级别更改设置。你可以这样写的当前值:sysctl vm.max_map_count。要改变它运行:sudo sysctl -w vm.max_map_count=262144。这将在下次启动时恢复。要将其设置为永久添加vm.max_map_count=262144/etc/sysctl.conf.

大多数用于 Kubernetes 的 Elasticsearch 设置使用Init Container来确保此值设置为所需。这里的缺点是它需要在特权模式下:Elasticsearch Helm Chart

也可以在Pod 中设置 sysctlssecurityContext。但目前虚拟内存设置被认为是不安全的,需要对 Kubernetes 设置进行更多调整