Инструкция из личного кабинета Это руководство по сервису из личного кабинета Nubes (ЛК). Текст приведён без изменений, «как есть».
Инструкция по развертыванию MongoDB через платформу¶
1. Общая информация¶
MongoDB — документоориентированная распределённая база данных, обеспечивающая высокую доступность, горизонтальное масштабирование и гибкую модель хранения.
Доступные операции с кластером¶
- create — создание базы
- delete — удаление базы данных
- suspend — остановка базы данных
- resume — запуск базы данных
- modify — изменение базы данных
- create_backup — создание бэкапа вручную
- delete_backup — удаление бэкапов
- rollback — восстановление кластера из бэкапа
Доступные операции с пользователями¶
- create_user — создание пользователя
- modify_user — модификация пользователя
- delete_user — удаление пользователя
2. Параметры создания базы данных¶
Эти параметры необходимо указать при создании базы данных.
Платформа для развертывания¶
Среда, в которой будет развёрнут кластер. Выбирается из предложенного списка.
Количество узлов¶
Количество реплик в кластере MongoDB. Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
Примечание: уменьшение количества узлов после создания кластера не рекомендуется.
Квота памяти пода (MB)¶
Объём памяти для одного пода в мегабайтах.
Пример: 2048
Квота CPU пода (mCPU)¶
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: 1000
Размер диска для базы данных (GB)¶
Объём диска для хранения данных в гигабайтах.
Пример: 20
Расписание резервного копирования¶
Cron-выражение (5 полей), по которому автоматически создаются резервные копии.
Пример: 0 0 * * * (каждый день в 00:00)
Хранить последних бэкапов¶
Сколько последних успешных резервных копий хранить — более старые удаляются автоматически.
Пример: 7
Примечание: ротация применяется только к бэкапам, созданным по расписанию. Бэкапы, созданные вручную операцией
create_backup, в неё не входят и не удаляются автоматически — их нужно убирать вручную черезdelete_backup.
Имя ipSpace для публикации внешнего IP¶
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите no-needed, если внешний адрес не требуется.
Пример: internet-no-antiddos-v1
Список разрешённых IP-адресов¶
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: ["10.0.0.0/24", "192.168.1.10/32"]
Включить TLS¶
Булевый параметр. Определяет режим работы TLS кластера.
true— TLS включён (tls.mode: allowTLS). Сертификаты сохраняются в Vault.false— TLS выключен (tls.mode: disabled).
По умолчанию: false.
3. Параметры модификации базы данных¶
Все параметры, которые вы указываете при модификации, являются необязательными — система автоматически подставит ранее сохранённые значения, и при необходимости вы можете изменить их на нужные.
Количество узлов¶
Количество реплик в кластере MongoDB. Оптимально выбирать нечётное значение, так как это обеспечивает корректный процесс выбора ведущего узла и сохраняет работоспособность базы данных даже при отказе одной из нод.
Примечание: уменьшение количества узлов после создания кластера не рекомендуется.
Квота памяти пода (MB)¶
Объём памяти для одного пода в мегабайтах.
Пример: 2048
Квота CPU пода (mCPU)¶
CPU-квота для пода в миликорах (1000 mCPU = 1 vCPU).
Пример: 1000
Размер диска для базы данных (GB)¶
Объём диска для хранения данных указывается в гигабайтах. Его можно увеличить при необходимости, однако уменьшить уже выделенный размер невозможно.
Пример: 20
Расписание резервного копирования¶
Cron-выражение (5 полей), по которому автоматически создаются резервные копии.
Пример: 0 0 * * * (каждый день в 00:00)
Хранить последних бэкапов¶
Сколько последних успешных резервных копий хранить — более старые удаляются автоматически.
Пример: 7
Примечание: ротация применяется только к бэкапам, созданным по расписанию. Бэкапы, созданные вручную операцией
create_backup, в неё не входят и не удаляются автоматически — их нужно убирать вручную черезdelete_backup.
Имя ipSpace для публикации внешнего IP¶
Имя ipSpace, через который будет выделен внешний IP для доступа к master-узлу.
Укажите no-needed, если внешний адрес не требуется.
Пример: internet-no-antiddos-v1
Список разрешённых IP-адресов¶
Список IP-адресов или подсетей, с которых разрешён доступ к кластеру.
Если оставить пустым — доступ открыт для всех источников.
Пример: ["10.0.0.0/24", "192.168.1.10/32"]
4. Параметры удаления базы данных¶
Удалить бакет S3 с бэкапами¶
Булевый параметр.
true— вместе с кластером также будут удалены все резервные копии и бакет S3.false— бакет S3 и хранящиеся в нём бэкапы сохраняются после удаления кластера.
По умолчанию: false.
5. Параметры создания бэкапа¶
Имя бэкапа¶
Имя резервной копии, которое будет присвоено объекту бэкапа в кластере.
Должно соответствовать требованиям Kubernetes к именам объектов (строчные буквы, цифры, дефисы).
Пример: manual-20260904
Примечание: такой бэкап не участвует в автоматической ротации по параметру "Хранить последних бэкапов" (она применяется только к бэкапам по расписанию) и не удаляется сам — при необходимости убрать его нужно вручную операцией
delete_backup.
6. Параметры восстановления из бэкапа¶
Имя бэкапа¶
Имя существующей резервной копии кластера, из которой будет выполнено восстановление. Указывается один из бэкапов в состоянии ready (созданных автоматически по расписанию или вручную через операцию create_backup).
7. Параметры удаления бэкапов¶
Имена бэкапов¶
Список имён резервных копий для удаления.
Пример: ["manual-20260904", "cron-mongok8s-...-20260903020000"]
8. Параметры создания пользователя¶
Имя пользователя¶
Указывается имя пользователя (любой регистр).
Пример: readApp
Примечание: имя пользователя должно быть уникальным в рамках кластера. Если пользователь с таким именем уже существует, операция завершится ошибкой — используйте
modify_userдля изменения прав илиdelete_user+create_userдля пересоздания.
Имя базы данных¶
Название базы, в которой будет создан пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: Apps_9392
Имя роли¶
- read — доступ только на чтение
- readWrite — чтение и изменение данных
- dbOwner — полный контроль над базой данных
- dbAdmin — администрирование базы данных (индексы, статистика, схема) без доступа к чтению/записи данных
9. Параметры модификации пользователя¶
Имя пользователя¶
Необходимо выбрать существующего пользователя. Если список пуст, требуется предварительно создать пользователя.
Имя базы данных¶
База данных, к которой относится пользователь.
Если база отсутствует, она будет создана автоматически.
Пример: Apps_9392
Имя роли¶
- read
- readWrite
- dbOwner
- dbAdmin
10. Параметры удаления пользователя¶
Имя пользователя¶
Выберите пользователя из списка для удаления.
11. Выходные параметры¶
После успешного развертывания базы данных платформа возвращает ключевые параметры.
internalConnect¶
Внутренний эндпоинт для подключения к кластеру из сервисов, работающих в той же сети. Используется для внутренних интеграций и системных сервисов.
externalConnect¶
Внешний FQDN для подключения к кластеру извне. Порт подключения — 27017.
Важно: оба эндпоинта — это Kubernetes Service на весь replset, а не адрес конкретно primary-узла. Kubernetes не отслеживает, кто из узлов сейчас primary, поэтому новое подключение без параметра
replicaSetможет попасть на secondary и упасть с ошибкой записиnot writable primary. Обязательно указывайтеreplicaSet=rs0в строке подключения (см. примеры ниже) — тогда драйвер сам обнаружит топологию кластера и всегда направит запись на актуальный primary, независимо от количества реплик и от того, происходили ли выборы.
12. Пример подключения¶
Перед подключением необходимо установить mongosh.
12.1 Подключение без TLS¶
Для внутреннего подключения из той же сети:
mongosh "mongodb://<username>:<password>@<endpoint_db>:27017/<dbName>?authSource=admin&replicaSet=rs0"
12.2 Подключение через внешний endpoint с TLS¶
Кластер требует клиентский TLS-сертификат (mutual TLS). Сертификаты сохраняются в Vault при создании кластера в блоке cer в полях ca, cer, key в кодировке base64.
Подготовка файлов:
# Декодировать сертификаты из Vault
echo "<ca из блока Учётные данные>" | base64 -d > ca.crt
echo "<cer из из блока Учётные данные" | base64 -d > tls.crt
echo "<key из из блока Учётные данные>" | base64 -d > tls.key
# Собрать клиентский PEM
cat tls.key tls.crt > client.pem
Подключение:
mongosh "mongodb://<username>:<password>@<external_endpoint_db>:27017/<dbName>?tls=true&tlsCAFile=ca.crt&tlsCertificateKeyFile=client.pem&authSource=admin&replicaSet=rs0"
Где:
<username>— имя пользователя<password>— пароль<endpoint_db>— internalConnect (для подключения без TLS)<external_endpoint_db>— externalConnect (для внешнего подключения с TLS)<dbName>— имя базы данных
13. Дополнительная информация¶
Режим TLS задаётся параметром mongoConfiguration.tls только при создании кластера.
После создания изменение TLS через модификацию не поддерживается.
- При
trueкластер разворачивается с включённым TLS (tls.mode: allowTLS). Сервер принимает как обычные, так и TLS-соединения. - При
falseTLS выключен (tls.mode: disabled).
Для внешнего подключения (externalConnect) используется сертификат, выпущенный через cert-manager, с SAN, покрывающим внешний DNS-адрес кластера — поэтому tlsAllowInvalidHostnames не требуется, хост проверяется как обычно.
Внутренние подключения TLS-сертификат не используют вообще: режим allowTLS допускает как TLS, так и обычные соединения, но для внутреннего трафика применяется обычное (не TLS) подключение — см. пример 12.1.
Почему обязателен replicaSet=rs0 в строке подключения¶
Percona-оператор не проставляет на поды никакого динамического лейбла роли (primary/secondary) —
у всех подов replset'а полностью одинаковые лейблы, различается только имя/индекс пода.
master-сервис — это обычный Kubernetes Service с фиксированным селектором на весь replset, он
не знает и не может знать, какой под сейчас primary: k8s просто раздаёт новые TCP-подключения
по кругу между всеми узлами. Без replicaSet=rs0 в URI подключение может закрепиться на
secondary, и любая попытка записи будет падать с not writable primary — независимо от того,
происходили выборы недавно или нет. Указание replicaSet=rs0 включает у драйвера обнаружение
топологии реплики, и он сам направляет запись на актуальный primary при любом количестве узлов
и после любых переизбраний.