Kubernetes убивает контейнер Mongo

У нас есть ситуация, когда 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"
              }
            },

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

Stennie 08.04.2019 01:57

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

Panda 08.04.2019 04:43

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

Stennie 08.04.2019 05:25
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
5
3
1 786
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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"})

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

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

      resources:
        limits:
          memory:

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

установка проводнойTigerCacheSizeGB помогла решить проблему.. спасибо @Stennie.. & user2932688 простите, ребята, за опоздание, я тестировал изменение и ждал некоторое время в производстве, чтобы убедиться, что исправление работает.

Panda 26.04.2019 22:26

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

Kay 18.11.2020 17:15

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

Panda 07.02.2021 23:59

Другие вопросы по теме