Назад | Перейти на главную страницу

Kubernetes, Docker и vm.max_map_count

При попытке запустить 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.