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