尝试在 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
也可以设置 sysctls在securityContext
Pod 中。但目前虚拟内存设置被认为是不安全的,需要一些更多调整在你的 Kubernetes 设置上。