Kubernetes、Docker 和 vm.max_map_count

Kubernetes、Docker 和 vm.max_map_count

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

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

幸运的是,这有相当好的文档记录,我能够找出容器的配置设置,使其稳定下来。这个问题与此无关。

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

答案1

的设置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 设置都使用初始化容器以确保此值按要求设置。这里的缺点是它需要在特权模式下:Elasticsearch Helm Chart

也可以设置 sysctlssecurityContextPod 中。但目前虚拟内存设置被认为是不安全的,需要一些更多调整在你的 Kubernetes 设置上。

相关内容