web-dev-qa-db-ja.com

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
Spencer Ruport

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

ポッドのsecurityContextset sysctls を実行することもできます。ただし、現時点では仮想メモリの設定は安全ではないと考えられており、Kubernetesのセットアップで もっと調整する が必要です。

1
webwurst