Kubernetes, Docker и vm.max_map_count

При попытке запустить ElasticSearch на K8 я столкнулся с ошибкой, которая убила бы контейнер:

максимальное количество областей виртуальной памяти vm.max_map_count [65530] слишком мало, увеличьте как минимум до [262144]

К счастью, это довольно хорошо задокументирован, и мне удалось выяснить параметр конфигурации для контейнера, который обеспечил его стабильность. Этот вопрос не об этом.

У меня возникает вопрос: почему это происходит на K8 по сравнению с Docker? Я использую один и тот же образ (официальный образ ES) в обоих случаях, так каковы некоторые причины, по которым значение будет другим? Есть ли способ настроить K8 или машины, на которых я его использую, чтобы эта ситуация не возникала?

0
задан 1 March 2019 в 19:47
1 ответ

Настройку для 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.

1
ответ дан 4 December 2019 в 15:45

Теги

Похожие вопросы