Миграция версии докера MongoDB с 4.4.18 на 6.0 всегда CrashLoopBackOff

Небольшой вопрос относительно MongoDB, пожалуйста.

В настоящее время я использую версию 4.4.18 MongoDB.

Я развертываю его с помощью этого манифеста в Kubernetes, и никаких проблем, все работает нормально, очень доволен.

apiVersion: v1
kind: ConfigMap
metadata:
  name: mongo-config
data:
  mongo.conf: |
    storage:
      dbPath: /data/db
  ensure-users.js: |
    const targetDbStr = 'test';
    const rootUser = cat('/etc/k8-test/admin/MONGO_ROOT_USERNAME');
    const rootPass = cat('/etc/k8-test/admin/MONGO_ROOT_PASSWORD');
    const usersStr = cat('/etc/k8-test/MONGO_USERS_LIST');
    const adminDb = db.getSiblingDB('admin');
    adminDb.auth(rootUser, rootPass);
    print('Successfully authenticated admin user');
    const targetDb = db.getSiblingDB(targetDbStr);
    const customRoles = adminDb
      .getRoles({rolesInfo: 1, showBuiltinRoles: false})
      .map(role => role.role)
      .filter(Boolean);
    usersStr
      .trim()
      .split(';')
      .map(s => s.split(':'))
      .forEach(user => {
        const username = user[0];
        const rolesStr = user[1];
        const password = user[2];
        if (!rolesStr || !password) {
          return;
        }
        const roles = rolesStr.split(',');
        const userDoc = {
          user: username,
          pwd: password,
        };
        userDoc.roles = roles.map(role => {
          if (!~customRoles.indexOf(role)) {
            return role;
          }
          return {role: role, db: 'admin'};
        });
        try {
          targetDb.createUser(userDoc);
        } catch (err) {
          if (!~err.message.toLowerCase().indexOf('duplicate')) {
            throw err;
          }
        }
      });
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: mongo
  replicas: 1
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 30
      containers:
        - name: mongo
          image: docker.io/mongo:4.4.18
#          image: docker.io/mongo:6.0
          command: ["/bin/sh"]
          args: ["-c", "mongod --replSet=rs0 --bind_ip_all"]
          resources:
            limits:
              cpu: 1000m
              memory: 1G
            requests:
              cpu: 100m
              memory: 1G
          ports:
            - containerPort: 27017
              name: mongo
              protocol: TCP
          volumeMounts:
            - name: data
              mountPath: /data/db
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: nfs-1
        resources:
          requests:
            storage: 50Mi
---
apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    app: mongo
spec:
  selector:
    app: mongo
  ports:
    - port: 27017
      targetPort: 27017
      name: mongo
  clusterIP: None

Теперь я просто хочу поднять версию до 6.0, буквально просто заменив эту одну строку (ту, что закомментирована), оставив все остальное точно таким же.

Затем я развертываю эту новую версию, и, к сожалению, это происходит.

NAME          READY   STATUS             RESTARTS      AGE
pod/mongo-0   0/1     CrashLoopBackOff   1 (10s ago)   24s

При просмотре журнала я вижу:

{"t":{"$date":"2022-12-07T06:50:10.048+00:00"},"s":"F",  "c":"CONTROL",  "id":20573,   "ctx":"initandlisten","msg":"Wrong mongod version","attr":{"error":"UPGRADE PROBLEM: Found an invalid featureCompatibilityVersion document (ERROR: Location4926900: Invalid featureCompatibilityVersion document in admin.system.version: { _id: \"featureCompatibilityVersion\", version: \"4.2\" }. See https://docs.mongodb.com/master/release-notes/5.0-compatibility/#feature-compatibility. :: caused by :: Invalid feature compatibility version value, expected '5.0' or '5.3' or '6.0. See https://docs.mongodb.com/master/release-notes/5.0-compatibility/#feature-compatibility.). If the current featureCompatibilityVersion is below 5.0, see the documentation on upgrading at https://docs.mongodb.com/master/release-notes/5.0/#upgrade-procedures."}}

Я пошел читать документы, но в основном речь идет о переходе на 5.0. Могу я спросить, что мне не хватает для 6.0, пожалуйста?

Спасибо

Вам нужно выполнить миграцию в два этапа. Сначала с 4.4 до 5.0, а потом с 5.0 до 6.0

Wernfried Domscheit 07.12.2022 08:11

Вы запускаете ReplicaSet только с одним членом? Это было бы бесполезно.

Wernfried Domscheit 07.12.2022 08:13

Вы правы @WernfriedDomscheit, перешли на развертывание + с использованием версии 5.0, все та же проблема. Вы знаете, в чем проблема, пожалуйста?

PatPanda 07.12.2022 08:25

Вам нужно подписаться на Обновить набор реплик до версии 5.0

Wernfried Domscheit 07.12.2022 08:30
Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
0
4
105
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка связана с тем, что версия mongodb несовместима с файлами данных, смонтированными в /data/db.

Разрыв между версиями слишком велик. Как прокомментировал @WernfriedDomscheit, вам нужно будет обновить его по шагам:

Если позволяет размер набора данных, вы можете сократить его, сделав резервную копию ваших данных из версии 4.4, запустив версию 6 с новым пустым томом, подключенным к /data/db, и восстановив базу данных из резервной копии.

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