K8でElasticSearchを実行しようとしたときに、コンテナーを強制終了するエラーが発生しました。
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
幸い、これはかなり文書化されており、安定したコンテナの構成設定を見つけることができました。この質問はそれについてではありません。
私に生じる質問は、なぜこれがK8とDockerで発生するのですか?両方のケースで同じイメージ(公式のESイメージ)を使用しているので、値が異なる理由は何ですか?この状況が発生しないように、K8またはそれを実行しているマシンを構成する方法はありますか?
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
ポッドのsecurityContext
で set sysctls を実行することもできます。ただし、現時点では仮想メモリの設定は安全ではないと考えられており、Kubernetesのセットアップで もっと調整する が必要です。