Kubernetes уничтожает контейнер Mongo

#mongodb #docker #kubernetes

#mongodb #docker #kubernetes

Вопрос:

У нас есть ситуация, когда Kubernetes уничтожает контейнеры Mongo, когда достигает максимального предела памяти контейнера. Несмотря на то, что ожидается, что K8s будет работать таким образом, но кажется, что Mongo не использует повторно свою память, поскольку она продолжает увеличивать использование памяти день ото дня, даже если загрузка пользователя и транзакции одинаковы, так что проверить, как мы можем ограничить Mongo в достижении максимальной памяти контейнера или сбросить память Mongo через регулярные промежутки времени.

Я попытался увеличить объем памяти, что помогло модулям продолжать работать еще пару дней, прежде чем K8 уничтожил его

      "containers": [
          {
            "name": "mongo",
            "image": "dockercentral.com:5870/com.public/mongodb:3.6",
            "ports": [
              {
                "containerPort": 27017,
                "protocol": "TCP"
              }
            ]      
"resources": {
              "limits": {
                "cpu": "1",
                "memory": "24Gi"
              },
              "requests": {
                "cpu": "250m",
                "memory": "24Gi"
              }
            }
   "name": "MONGO_SECURITY",
                "value": "true"
              }
            ],
            "resources": {
              "limits": {
                "cpu": "500m",
                "memory": "1Gi"
              },
              "requests": {
                "cpu": "150m",
                "memory": "256Mi"
              }
            },
  

Комментарии:

1. Какую конкретную версию сервера MongoDB вы используете? Установили ли вы cacheSizeGB (и если да, то в какое значение)? Согласно примечаниям к разработке MongoDB : Если вы запускаетесь mongod в контейнере (например, lxc , cgroups , Docker и т.д.), Который не имеет доступа ко всей оперативной памяти, доступной в системе, вы должны установить storage.wiredTiger.engineConfig.cacheSizeGB значение, меньшее объема оперативной памяти, доступного в контейнере.

2. Версия MongoDB 3.6, значение cacheSizeGB не установлено, думал, что он будет учитывать ограничения памяти контейнера и автоматически выделять кэш WiredTiger .. я установил wiredTigerCacheSizeGB сейчас .. проверю, сработает ли это

3. Существовали некоторые исторические проблемы с надежным обнаружением памяти контейнера с помощью общего подхода, поэтому текущая рекомендация заключается в том, чтобы установить wiredTigerCacheSizeGB явно. Если вы установите значение, wiredTigerCacheSizeGB аналогичное значению по умолчанию (50% доступной оперативной памяти — 1 ГБ), использование памяти должно быть более стабильным. ПРИМЕЧАНИЕ: в ветке разработки MongoDB 4.1.9 было реализовано улучшение посредством SERVER-16571 , который был перенесен в предстоящие версии серверов 3.6.13 и 4.0.9.

Ответ №1:

Основываясь на том, что написал Стенни из MongoDB, Inc. в комментарии к вопросу.

эта команда в kube .yaml работает для меня:

       command:
        - "sh"
        - "-c"
        - >
          echo "storage:" >>  /etc/mongod.conf;
          echo "    wiredTiger:" >>  /etc/mongod.conf;
          echo "       engineConfig:" >>  /etc/mongod.conf;
          echo "          cacheSizeGB: 2" >>  /etc/mongod.conf;
          echo "replication:" >> /etc/mongod.conf;
          echo "  replSetName: YOUR_REPL_NAME" >> /etc/mongod.conf;
          mongod --config /etc/mongod.conf;
  

также есть способ установить его во время выполнения:

 db.adminCommand( { "setParameter": 1, "wiredTigerEngineRuntimeConfig":"cache_size=2G"})
  

который также работает просто отлично, но это выглядит проще через файл kuberneties yaml, потому что для выдачи команды вам нужно дождаться, пока монго будет запущен.

ПРИМЕЧАНИЕ: убедитесь, что ваш:

       resources:
        limits:
          memory:
  

позволяет использовать дополнительный 1G для системы.

Комментарии:

1. установка wiredTigerCacheSizeGB помогла в устранении проблемы .. спасибо @Stennie .. amp; user2932688 sry, ребята, за то, что вернулись поздно, я тестировал изменение и подождал некоторое время в рабочей среде, чтобы убедиться, что исправление работает.

2. @ Panda у меня такая же проблема, когда мой модуль mongodb перезапускается, и я предполагаю, что из-за высокого использования памяти. но у моих контейнеров k8 нет ограничений по ресурсам. Мне любопытно, какой размер вы указали для этого wiredTigerCache и работает ли это для вас

3. @Kay, Да, WiredTigerCache работал у меня. Интересно, почему у вашего контейнера нет ограничений по ресурсам, это что-то обычное, что кто-либо использует для контейнера.