Управляемый сервис MongoDB

MongoDB — популярная документоориентированная NoSQL-база данных, известная своей гибкостью и масштабируемостью. Управляемый сервис MongoDB предоставляет самовосстанавливающийся реплицируемый кластер под управлением Percona Operator for MongoDB.

Детали развёртывания

Этот управляемый сервис контролируется Percona Operator for MongoDB, обеспечивающим эффективное управление и бесперебойную работу.

Режимы развёртывания

Режим набора реплик (Replica Set, по умолчанию)

По умолчанию MongoDB разворачивается как набор реплик (replica set) с указанным числом реплик. Этот режим подходит для большинства сценариев, требующих высокой доступности.

Режим шардированного кластера

Включите sharding: true для горизонтального масштабирования по нескольким шардам. Каждый шард представляет собой набор реплик, а маршрутизаторы mongos выполняют маршрутизацию запросов.

Примечания

Внешний доступ

Когда включён external: true:

  • Режим набора реплик: Трафик балансируется между всеми участниками набора реплик. Это хорошо работает для операций чтения, но для операций записи требуется подключение к первичному узлу (primary). Драйверы MongoDB автоматически определяют первичный узел, используя строку подключения к набору реплик.
  • Шардированный режим: Трафик направляется через маршрутизаторы mongos, которые корректно обрабатывают и чтение, и запись.

Учётные данные

При первой установке Secret с учётными данными будет пустым, пока оператор Percona не инициализирует кластер. После готовности MongoDB выполните helm upgrade, чтобы заполнить Secret с учётными данными фактическим паролем.

Жизненный цикл данных

При удалении релиза MongoDB финализаторы оператора высвобождают ресурсы, относящиеся к релизу:

Высвобождаются финализатором percona.com/delete-psmdb-pvc:

  • Все PVC, обеспечивающие хранилище набора реплик. Будут ли фактически удалены базовый PersistentVolume и данные на диске, зависит от reclaimPolicy у StorageClass (Delete удаляет их, Retain оставляет для ручной очистки).
  • Управляемые оператором Secret’ы:
    • <release>-percona-server-mongodb-users — учётные данные пользователей оператора
    • internal-<release> — внутреннее состояние оператора
    • internal-<release>-users — внутренние данные пользователей оператора
    • <release>-mongodb-encryption-key — ключ шифрования данных в состоянии покоя (at-rest)

Высвобождаются командой helm uninstall:

  • <release>-credentials — строка подключения для кода приложения
  • <release>-user-<username> — пароли отдельных пользователей
  • <release>-s3-creds — учётные данные места назначения резервных копий (если резервное копирование настроено)

Не высвобождаются автоматически:

  • TLS-секреты <release>-ssl и <release>-ssl-internal (выпущенные cert-manager) остаются в пространстве имён после удаления. Удалите их вручную, если они больше не нужны.

Восстановление при зависшем удалении:

Если psmdb-operator удалён до удаления ресурсов MongoDB CR, финализаторы не могут отработать, и ресурс PerconaServerMongoDB зависает в состоянии Terminating. Для восстановления очистите финализаторы вручную:

kubectl --namespace <namespace> patch psmdb <release> --type merge --patch '{"metadata":{"finalizers":[]}}'

Учтите, что это пропускает очистку, выполняемую оператором — PVC и управляемые оператором Secret’ы останутся неиспользуемыми (orphaned) и должны быть удалены вручную.

Если нужно сохранить данные, создайте резервную копию перед удалением. См. документацию Percona Operator for MongoDB по процессам резервного копирования и восстановления.

Обновление с более ранних версий

Более ранние версии этого чарта ссылались на общий для пространства имён Secret системных пользователей (percona-server-mongodb-users). Обновление до релиза, в котором этот Secret привязан к конкретному CR (<release>-percona-server-mongodb-users), запускает ротацию паролей управляемых оператором системных пользователей. Ротация выполняется оператором Percona на месте через db.changeUserPassword() для работающего mongod (в логе оператора: Secret data changed. Updating users...); поды не перезапускаются, и кластер остаётся доступным.

Ротируются автоматически при обновлении:

  • Пять управляемых оператором системных учётных записей: databaseAdmin, userAdmin, backup, clusterAdmin, clusterMonitor.
  • Secret <release>-percona-server-mongodb-users (создаётся заново, для каждого CR) и internal-<release>-users получают новые значения.
  • Secret <release>-credentials пересоздаётся; его ключи password и uri отражают новый пароль databaseAdmin.

Не затрагиваются:

  • Пользовательские учётные записи, определённые в users: в values чарта. Их Secret’ы <release>-user-<name> не изменяются.
  • Ключ шифрования данных в покое (<release>-mongodb-encryption-key) и keyfile набора реплик (<release>-mongodb-keyfile) не изменяются, поэтому данные на диске остаются читаемыми.

Требуется действие после обновления:

Рабочие нагрузки, монтирующие <release>-credentials, продолжают использовать закэшированный старый пароль, пока не перечитают Secret. Перезапустите эти поды или используйте контроллер вроде Reloader для их автоматического перезапуска (Roll). Без этого подключения приложений завершатся с ошибками аутентификации, как только истекут их текущие сессии.

Осиротевший устаревший Secret:

Прежний общий для пространства имён Secret percona-server-mongodb-users после обновления больше не используется ни одним MongoDB CR, но оператор не удаляет его автоматически. Если несколько релизов MongoDB в одном пространстве имён ранее использовали его совместно, все они переходят на собственные Secret’ы для каждого CR — пароли больше не являются общими между CR в пространстве имён, что и является ожидаемым результатом. Убедитесь, что на него не ссылаются другие потребители, затем удалите его вручную:

kubectl --namespace <namespace> delete secret percona-server-mongodb-users

storageClass помечен как неизменяемый (immutable) в схеме чарта — см. docs/storage-immutability.md, где описан этот контракт и какие потребители его обеспечивают.

Параметры

Общие параметры

ИмяОписаниеТипЗначение
replicasКоличество реплик MongoDB в наборе реплик.int3
resourcesЯвная конфигурация CPU и памяти для каждой реплики MongoDB. Если не задано, применяется пресет, указанный в resourcesPreset.object{}
resources.cpuCPU, доступный каждой реплике.quantity""
resources.memoryПамять (RAM), доступная каждой реплике.quantity""
resourcesPresetПресет размера по умолчанию, используемый, когда resources не задан.stringt1.small
sizeРазмер Persistent Volume Claim, доступный для данных приложения.quantity10Gi
storageClassStorageClass, используемый для хранения данных.string""
externalВключить внешний доступ извне кластера.boolfalse
versionМажорная версия MongoDB для развёртывания.stringv8

Конфигурация шардирования

ИмяОписаниеТипЗначение
shardingВключить режим шардированного кластера. Когда отключено, разворачивается набор реплик.boolfalse
shardingConfigКонфигурация режима шардированного кластера.object{}
shardingConfig.configServersКоличество реплик серверов конфигурации (config server).int3
shardingConfig.configServerSizeРазмер PVC для серверов конфигурации.quantity3Gi
shardingConfig.mongosКоличество реплик маршрутизаторов mongos.int2
shardingConfig.shardsСписок конфигураций шардов.[]object[...]
shardingConfig.shards[i].nameИмя шарда.string""
shardingConfig.shards[i].replicasКоличество реплик в этом шарде.int0
shardingConfig.shards[i].sizeРазмер PVC для этого шарда.quantity""

Конфигурация пользователей

ИмяОписаниеТипЗначение
usersКарта конфигурации пользователей.map[string]object{}
users[name].passwordПароль пользователя (генерируется автоматически, если не указан).string""

Конфигурация баз данных

ИмяОписаниеТипЗначение
databasesКарта конфигурации баз данных.map[string]object{}
databases[name].rolesРоли, назначенные пользователям.object{}
databases[name].roles.adminСписок пользователей с правами администратора (readWrite + dbAdmin).[]string[]
databases[name].roles.readonlyСписок пользователей с правами только на чтение.[]string[]

Параметры резервного копирования

ИмяОписаниеТипЗначение
backupКонфигурация резервного копирования.object{}
backup.enabledВключить регулярное резервное копирование.boolfalse
backup.scheduleРасписание cron для автоматического резервного копирования.string0 2 * * *
backup.retentionPolicyПолитика хранения (например, “30d”).string30d
backup.destinationPathПуть назначения для резервных копий (например, s3://bucket/path/).strings3://bucket/path/to/folder/
backup.endpointURLURL эндпоинта S3 для загрузки.stringhttp://minio-gateway-service:9000
backup.s3AccessKeyКлюч доступа для аутентификации в S3.string""
backup.s3SecretKeyСекретный ключ для аутентификации в S3.string""

Параметры начальной загрузки (восстановления)

ИмяОписаниеТипЗначение
bootstrapКонфигурация начальной загрузки.object{}
bootstrap.enabledВосстанавливать ли из резервной копии.boolfalse
bootstrap.recoveryTimeМетка времени для восстановления на момент времени; пусто означает последнюю.string""
bootstrap.backupNameИмя резервной копии, из которой восстанавливать.string""
Last modified 2026-07-07: Update mongodb.md (adfe90d)