14.09.2022

Установка MongoDB в кластер Kubernetes

Введение

MongoDB — одна из самых популярных систем для управления базами данных NoSQL. В сочетании с Kubernetes оно может стать легко масштабируемым многоцелевым решением, подходящим  для самых разных задач.

В Serverspace вы можете создать сервер с уже установленным приложением "MongoDB".

Reply

Требования к установке

Для работы с MongoDB в Kubernetes вам нужен "управляющий" сервер и привилегированная учетная запись на нем. Этот сервер может работать под любой операционной системой, однако предпочтителен все же Linux. Также потребуется кластер Kubernetes (будет развернут на следующем шаге).

Создание кластера Kubernetes

Прежде, чем устанавливать MongoDB, необходимо развернуть Kubernetes. Чтобы сделать это в инфраструктуре Serverspace, просто войдите в личный кабинет, затем перейдите в раздел Kubernetes и начните установку:

Процесс может занять достаточно долгое время, пожалуйста, наберитесь терпения. По завершении вы увидите параметры кластера и кнопку, по нажатию на которую вы сможете скачать файл, позволяющий подключиться к свежесозданному окружению:

Установка MongoDB

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

Подключитесь к "управляющему" серверу в качестве привилегированного пользователя и установите ПО при помощи пакетного менеджера.
sudo -s
apt-get update && apt install curl apt-transport-https -y && curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee -a /etc/apt/sources.list.d/kubernetes.list && apt-get update && apt install kubectl -y

Внесите данные доступа к окружению Kubernetes в специальный файл, потом «подключите» данный файл как переменную к конфигурации вашего системного профиля.
mkdir /usr/local/etc/mongo && cd /usr/local/etc/mongo
cat << EOF > testcluster.conf
<ВСТАВЬТЕ СЮДА ДАННЫЕ ИЗ ПРЕДОСТАВЛЕННОГО В ЛИЧНОМ КАБИНЕТЕ ФАЙЛА>
EOF
echo "export KUBECONFIG=testcluster.conf" >> ~/.bashrc

Проверьте подключение с помощью команды.
kubectl cluster-info

Если в результате вы увидите что-то, похожее на рисунок ниже - вы подключились успешно:

MongoDB для хранения данных использует специальный контейнер. Его конфигурация описывается в специальном конфигурационном файле. Вы можете изменить его под свои конкретные задачи.
cat << EOF > PersistVolClaim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodatapv
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi # Емкость контейнера
EOF

Следующим шагом предстоит создать файл, содержащий реквизиты для подключения непосредственно к MongoDB.
cat << EOF > Creds.yaml
apiVersion: v1
data:
username: <ЗАШИФРОВАННЫЙ С ПОМОЩЬЮ BASE64 ЛОГИН>
password: <ЗАШИФРОВАННЫЙ С ПОМОЩЬЮ BASE64 ПАРОЛЬ>
kind: Secret
metadata:
creationTimestamp: null
name: creds
EOF

Совет - при надобности вы можете шифровать и расшифровывать данные при помощи простых команд:

echo <ДАННЫЕ> | base64 # для шифрования при помощи base64
echo <ЗАШИФРОВАННЫЕ ДАННЫЕ> | base64 -d # для дешифровки

Далее создайте файл с описанием конфигурации контейнера MongoDB.
cat << EOF > Deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mongo
name: mongo
spec:
replicas: 1
selector:
matchLabels:
app: mongo
strategy: {}
template:
metadata:
labels:
app: mongo
spec:
containers:
- image: mongo
name: mongo
args: ["--dbpath","/data/db"]
livenessProbe:
exec:
command:
- mongo
- --disableImplicitSessions
- --eval
readinessProbe:
exec:
command:
- mongo
- --disableImplicitSessions
- --eval
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: creds
key: username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: creds
key: password
volumeMounts:
- name: "datadir"
mountPath: "/data/db"
volumes:
- name: "datadir"
persistentVolumeClaim:
claimName: "mongopvc"
EOF

Для запуска созданного инстанса выполните команду:
kubectl apply -f

Свидетельствующий об успехе вывод выглядит так:

Проверка подключения

Теперь, когда все контейнеры успешно развернуты, можно проверить подключение при помощи следующих команд.
kubectl exec deployment/client -it -- /bin/bash
mongo

Об успешном подключении к MongoDB свидетельствует стандартное приглашение сервиса управления базами данных:

Для создания новой базы данных просто «переключитесь» на нее. Внимание - фактически данные не будут сохранены до тех пор, пока в созданную БД не будут добавлены любые данные.
use ИМЯ_БАЗЫ_ДАННЫХ
db.createCollection("newdata") # пример добавляемых в базу тестовых данных
show dbs # проверка существования базы данных

Заключение

После прочтения этой статьи вы узнали, как создать кластер Kubernetes через личный кабинет ServerSpace, развернуть в нем сервис MongoDB, создать новую базу данных и добавить в нее новые данные.