Это руководство описывает процесс обновления MongoDB в среде Kubernetes, в частности, с использованием чарта Bitnami/MongoDB как зависимости. Важно обеспечить совместимость версий mongodump
и mongorestore
, чтобы избежать ошибок во время процесса обновления.
- Кластер Kubernetes
- kubectl, настроенный для целевого кластера
- Доступ к подам MongoDB в кластере Kubernetes
Перед началом обновления крайне важно сделать резервную копию вашей базы данных. Ниже приведены шаги для экспорта базы данных на локальное хранилище с использованием mongodump
.
- Откройте проброс порта, чтобы получить доступ к MongoDB с вашего локального компьютера:
kubectl port-forward pod/<pod-name> 20000:27017 -n <namespace>
- Используйте
mongodump
для экспорта базы данных:
mongodump --port="20000" --archive=<database-name> -v --username=<username> --password=<password>
Убедитесь, что версия mongodump
совпадает с версией mongorestore
, которая будет использоваться позже, чтобы избежать проблем совместимости.
Обновляйте версию MongoDB последовательно, чтобы избежать резких переходов на новые версии, которые могут вызвать проблемы совместимости.
-
Начните с обновления с версии
10.0.0
до12.16.0
, при этом версия приложения MongoDB обновится до6.0.0
(Debian). -
Проверьте, что обновленная версия функционирует корректно, прежде чем продолжать.
Если при обновлении с 12.16.0
до 13.0.0
появляется ошибка nonCompatibleVersion
, выполните следующие шаги:
- Масштабируйте развертывание до 0:
kubectl scale deployment <deployment-name> --replicas=0 -n <namespace>
- Удалите существующий запрос на постоянный том (PVC), чтобы удалить старые данные и разрешить новую инициализацию:
kubectl get pvc -n <namespace>
kubectl delete persistentvolumeclaim <pvc-name> --namespace <namespace>
- Масштабируйте развертывание обратно, что может не сработать напрямую. Вместо этого используйте задание (job) или аналогичный метод для повторного развертывания службы.
После очистки базы данных и обновления MongoDB до версии 6 восстановите ранее сделанный дамп базы данных:
- Снова инициируйте проброс порта:
kubectl port-forward pod/<pod-name> 20000:27017 -n <namespace>
- Перейдите в папку, содержащую дамп базы данных, и используйте
mongorestore
для импорта данных:
mongorestore --archive=<database-name> --drop -u root --authenticationDatabase admin --verbose=5 --port=20000
Ставим самую последнюю минорную версию. Если возникают ошибки ставим ниже.