Развертывание приложений в Kubernetes может быть сложным, особенно для приложений с состоянием, таких как MongoDB, в кластере Kubernetes. Как облегчить процесс развертывания? Позвольте Оператору Kubernetes для MongoDB автоматически разворачивать и управлять приложениями с состоянием в вашем кластере Kubernetes.
В этом руководстве вы узнаете, как развернуть MongoDB в Kubernetes с использованием Оператора Kubernetes для MongoDB.
Читайте дальше и начните автоматизировать развертывание ваших приложений в Kubernetes!
Предварительные условия
Этот учебник будет практической демонстрацией. Чтобы следовать за ним, убедитесь, что у вас есть следующие требования:
- A Kubernetes cluster – This demo uses the Kubernetes cluster v1.23.
- Kubectl установлен на локальной машине.
- MongoDB Compass установлен на локальной машине.
- Git установлен на вашей машине.
- jq Установлен на локальной машине для разбора JSON.
Создание пространства имен для MongoDB
При развертывании приложений в Kubernetes всегда рекомендуется создать специальное пространство имен для ваших проектов.
Пространства имен упрощают управление ресурсами Kubernetes для администраторов и предотвращают конфликты имен. В то же время создание пространств имен предотвращает неправильное использование ресурсов в среде Kubernetes.
Откройте ваш терминал и выполните нижеуказанную команду kubectl create
для создания нового пространства имен (ns
) с именем mongodb
в вашем кластере Kubernetes.
Теперь выполните нижеуказанную команду kubectl get
, чтобы проверить список пространств имен в вашем кластере Kubernetes.
Вы увидите новое пространство имен с названием mongodb, доступное на вашем кластере, как показано ниже.

Загрузка оператора Kubernetes для MongoDB
После создания пространства имен пора загрузить оператор Kubernetes для MongoDB. Оператор Kubernetes для MongoDB представляет собой набор операторов Kubernetes. Эти операторы обеспечивают автоматическое развертывание, настройку и управление сообществом MongoDB в среде Kubernetes.
Запустите команду git
ниже, чтобы клонировать
проект оператора Kubernetes для MongoDB на ваш локальный компьютер.
Теперь выполните каждую команду ниже, чтобы изменить ваш текущий рабочий каталог на mongodb-kubernetes-operator
и показать (ls
) все доступные файлы и каталоги.
Вы увидите подкаталог с именем config внутри проекта ~/mongodb-kubernetes-operator, как показано ниже. Подкаталог config содержит примеры файлов YAML для развертывания MongoDB в Kubernetes.

Развертывание оператора MongoDB
Теперь, когда ваше пользовательское пространство имен и оператор Kubernetes для MongoDB настроены, вы готовы развернуть оператор MongoDB на ваш кластер Kubernetes. Как? Вы будете использовать конфигурацию внутри каталога config.
Оператор MongoDB управляет жизненным циклом вашего развертывания MongoDB в кластере Kubernetes. Оператор автоматически создает, управляет и масштабирует состояние вашего развертывания MongoDB.
Чтобы развернуть оператор MongoDB, необходимо создать определение пользовательских ресурсов (CRD) Kubernetes и контроллер. CRD Kubernetes расширяем к API Kubernetes, что позволяет создавать пользовательские ресурсы в Kubernetes.
1. Запустите команду kubectl apply
ниже, чтобы создать новый CRD Kubernetes для развертывания MongoDB.
Оператор Kubernetes заменяет всю человеческую интеракцию для развертывания приложения в Kubernetes. Оператор – это контроллер pod, который автоматически разворачивает и управляет вашим приложением с сохранением состояния в Kubernetes.

2. Затем выполните следующую команду kubectl get
, чтобы проверить список доступных crd
в вашем Kubernetes.
Ниже вы можете увидеть CRD с именем mongodbcommunity.mongodbcommunity.mongodb.org.

3. Запустите команду ниже, чтобы создать новый пользовательский Role-Based Access Control (RBAC) для оператора MongoDB, и укажите реализацию RBAC в пространстве имен mongodb.
Эта команда создает новую роль, привязку роли и учетную запись службы для оператора MongoDB, которые представляют собой настраиваемые разрешения на вашем кластере Kubernetes. Эти настраиваемые разрешения необходимы для автоматического развертывания и управления MongoDB.

4. Теперь выполните каждую команду kubectl
ниже, чтобы проверить роль, привязку роли и учетную запись службы для оператора MongoDB.
Ниже приведен вывод, показывающий, что роль, привязка роли и учетная запись mongodb-kubernetes-operator созданы в пространстве имен mongodb.

5. После завершения проверки выполните следующую команду kubectl
, чтобы развернуть оператор MongoDB в пространстве имен mongodb
.
Эта команда создает новый под (mongodb-kubernetes-operator) с базовым образом Docker (quay.io/mongodb/mongodb-kubernetes-operator). Этот под будет действовать как контроллер для автоматического развертывания наборов реплик MongoDB на кластере Kubernetes.
Ниже вы можете увидеть, что развертывание оператора MongoDB создано, но под все еще инициализируется.

6. Наконец, выполните следующие команды, чтобы проверить развертывание и поды в пространстве имен mongodb
.
Как видно ниже, под оператора MongoDB работает.

Развёртывание набора реплик MongoDB в Kubernetes
После развертывания MongoDB вы развернете ReplicaSet в Kubernetes, чтобы обеспечить высокую доступность и избыточность для вашего развертывания MongoDB. Вы не захотите простоев в вашем развертывании.
Развертывание MongoDB ReplicaSets с использованием оператора Kubernetes MongoDB по умолчанию безопасно благодаря использованию аутентификации SCRAM для пользователей. В то же время вы можете использовать безопасное подключение по TLS для подключений пользователей и приложений и предоставить метрики Prometheus для мониторинга ресурсов.
Связано: Начало работы с мониторингом кластера Kubernetes с помощью Grafana и Prometheus
Внутри каталога config/samples/ вы увидите несколько образцов файлов YAML для развертывания ReplicaSet. Каждый файл может использоваться в различных сценариях развертывания, но файл развертывания ReplicaSet по умолчанию – это mongodb.com_v1_mongodbcommunity_cr.yaml.
1. Отредактируйте файл YAML для вашего развертывания с использованием выбранного вами редактора. В этом демонстрационном варианте используется файл /mongodb.com_v1_hostpath.yaml для локального развертывания. Этот файл YAML находится в каталоге config/samples/arbitrary_statefulset_configuration/.
Если вы развертываете оператор Kubernetes MongoDB на облачных сервисах, таких как GKE и AKS, используйте файл YAML mongodb.com_v1_mongodbcommunity_cr.yaml. Но если вы развертываете локально в Kind или Minikube, вы можете использовать пользовательский файл YAML (arbitrary_statefulset_configuration/mongodb.com_v1_hostpath.yaml), который автоматически создает пользовательские PV и PVC для поддержки MongoDB ReplicaSet.
Ниже измените количество (members) ReplicaSets, которые вы хотите развернуть, в зависимости от вашей среды, но по умолчанию их 3. В этом руководстве количество ReplicaSets установлено на 2.
Замените <your-password-here> своим надежным паролем. Вы будете использовать этот пароль для входа в базу данных MongoDB, и по умолчанию используется аутентификация SCRAM.
Сохраните изменения и закройте редактор, когда будете удовлетворены паролем.
2. Затем выполните команду kubectl
ниже, чтобы развернуть (apply
) набор реплик MongoDB, используя mongodb.com_v1_hostpath.yaml
в пространство имен mongodb.
Эта команда создает следующее:
- A new custom resource (MongoDBCommunity) with the name mdb0 under the
mongodbcommunity.mongodb.com/v1
CRD
- Секреты Kubernetes для хранения паролей пользователей MongoDB. В то же время создаются некоторые PV и PVC с типом
hostPath
для набора реплик MongoDB.
Развертывание займет некоторое время, в зависимости от размера ReplicaSets для создания и самого кластера Kubernetes.

3. После развертывания выполните каждую команду ниже, чтобы проверить пользовательские ресурсы и поды в пространстве имен mongodb
.
Ниже приведен вывод, в котором:
- Пользовательский ресурс MongoDBCommunity с именем mdb0 работает с MongoDB v4.4.0.
- Два пода ReplicaSet MongoDB работают с именами mdb0-0 и mdb0-1. Каждый под содержит два разных контейнера: mongod, и mongodb-agent.

4. Наконец, выполните другую команду kubectl
, чтобы проверить pv
и pvc
в пространстве имен mongodb
.
Ниже приведен вывод, в котором отображаются некоторые pv и pvc, используемые подами ReplicaSet MongoDB.

Создание нового пользователя и базы данных для развертывания MongoDB
На данный момент вы завершили развертывание оператора MongoDB и ReplicaSets в вашем кластере Kubernetes. Следующий шаг – создать новую базу данных MongoDB и пользователя для вашего приложения.
Вы создадите новый секрет Kubernetes для нового пользователя, отредактируете пользовательский ресурс развертывания ReplicaSet и обновите ReplicaSet в вашем кластере.
1. Создайте новый файл YAML с использованием вашего предпочтительного редактора и заполните следующий секрет Kubernetes. Вы можете назвать файл YAML как вам угодно, но в этом руководстве файл называется new-user.yaml.
Этот файл YAML создает новый секрет Kubernetes с именем myappdata и паролем myapppassword.
2. Затем выполните команду kubectl
ниже, чтобы выполнить конфигурацию new-user.yaml
.
Эта команда создает и применяет (apply) новый секрет Kubernetes в ваш кластер и применяет этот секрет к пространству имен mongodb.

3. Отредактируйте файл YAML конфигурации вашего ReplicaSet CRD (mongodb.com_v1_hostpath.yaml) в каталоге config/samples/arbitrary_statefulset_configuration.
Добавьте следующую конфигурацию в файл mongodb.com_v1_hostpath.yaml, который создает базу данных и пользователя для MongoDB.
Обязательно замените scram-secret-myapp своими собственными учетными данными scram, сохраните изменения в файле и закройте редактор.
4. Теперь выполните нижеследующую команду, чтобы применить
внесенные вами изменения в файле mongodb.com_v1_hostpath.yaml
на шаге третьем.

5. Наконец, выполните каждую из приведенных ниже команд, чтобы создать подробные подключения MongoDB для вашего приложения. Эти команды генерируют подробное подключение к MongoDB для ваших приложений в формате JSON и разбирают вывод с использованием командной строки jq
.
Замените mdb0-admin-mongoadmin на ваши данные окружения, следуя этим указаниям:
mdb0
– Метаданные имени ресурсов MongoDB.
admin
– База данных для аутентификации.
mongoadmin
– Пользователь, с которым будет проводиться аутентификация
Приведенный ниже вывод показывает, что вы можете подключиться к MongoDB с использованием стандартных соединений и соединений standardSrv. Вы также увидите имя пользователя и пароль вашего развертывания MongoDB.

Подключение к развертыванию MongoDB
Вы завершили развертывание MongoDB в кластере Kubernetes с использованием оператора Kubernetes MongoDB. Но как вы узнаете, что развертывание работает? Вы проверите подключение вашей локальной базы данных и пользователя к MongoDB внутри кластера Kubernetes.
Для проверки подключения к развертыванию MongoDB используйте перенаправление портов. Перенаправление портов в Kubernetes позволяет создавать перенаправление портов от любого службы Kubernetes к вашему локальному порту.
1. Запустите команду kubectl
ниже, чтобы get
список сервисов (svc
) в пространстве имен mongodb
.
Ниже вы увидите сервис с именем mdb0-svc, который открывает порт 27017 (порт по умолчанию MongoDB).

2. Затем выполните следующую команду для создания перенаправления портов в кластере Kubernetes.
Эта команда создает новое перенаправление портов на службу Kubernetes (mdb0-svc) и перенаправляет локальный порт 27017 на порт службы Kubernetes 27017.

3. Наконец, откройте приложение MongoDB Compass на вашем локальном компьютере, добавьте новое соединение в следующем формате и нажмите Connect, чтобы подключиться к MongoDB.
Измените поля имя пользователя и пароль на вашего пользователя и пароль MongoDB.


Когда соединение установлено успешно, вы получите следующее окно, которое подтверждает, что развертывание MongoDB в Kubernetes работает правильно.
Для пользователя mongoadmin вы увидите базы данных по умолчанию (local, config и admin).

Для пользователя appuser вы увидите только одну базу данных с привилегиями с именем appdb1.

Заключение
В ходе этого урока вы узнали, как развернуть MongoDB в кластере Kubernetes с использованием оператора Kubernetes MongoDB. Вы также кратко коснулись базового использования оператора Kubernetes. И на данный момент у вас уже есть достаточные знания о автоматическом развертывании и управлении приложениями в Kubernetes.
Почему бы не настроить соединение TLS в вашем развертывании MongoDB, чтобы воспользоваться этим новым знанием? Соединение TLS обеспечивает безопасность связи между репликами и защищает соединения клиентов или приложений с MongoDB.