Небольшой вопрос относительно 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, пожалуйста?
Спасибо
Вы запускаете ReplicaSet только с одним членом? Это было бы бесполезно.
Вы правы @WernfriedDomscheit, перешли на развертывание + с использованием версии 5.0, все та же проблема. Вы знаете, в чем проблема, пожалуйста?
Вам нужно подписаться на Обновить набор реплик до версии 5.0

Ошибка связана с тем, что версия mongodb несовместима с файлами данных, смонтированными в /data/db.
Разрыв между версиями слишком велик. Как прокомментировал @WernfriedDomscheit, вам нужно будет обновить его по шагам:
Если позволяет размер набора данных, вы можете сократить его, сделав резервную копию ваших данных из версии 4.4, запустив версию 6 с новым пустым томом, подключенным к /data/db, и восстановив базу данных из резервной копии.
Вам нужно выполнить миграцию в два этапа. Сначала с 4.4 до 5.0, а потом с 5.0 до 6.0