При попытке запустить ElasticSearch на K8 я столкнулся с ошибкой, которая убила бы контейнер:
максимальное количество областей виртуальной памяти vm.max_map_count [65530] слишком мало, увеличьте как минимум до [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
.
Большинство настроек Elasticsearch для Kubernetes используют Init Контейнер , чтобы убедиться, что это значение установлено должным образом. Недостатком здесь является то, что это необходимо в привилегированном режиме: Elasticsearch Helm Chart
Также можно установить sysctls в securityContext
Pod. Но на данный момент настройки виртуальной памяти считаются небезопасными и требуют дополнительных настроек в вашей настройке Kubernetes.