Как установить MongoDB в кластер Kubernetes

Что такое MongoDB

MongoDB – это открытая база данных (БД) NoSQL, которая позволяет хранить и обрабатывать большие объёмы данных. 

Её основное отличие от традиционных реляционных баз данных заключается в том, что MongoDB использует особую схему данных, которая не требует строгой предварительной фиксации их структуры. Вместо этого MongoDB использует формат JSON-подобных документов, называемых BSON, что делает её более гибкой к постоянно изменяющимся требованиям приложений.

Преимущества MongoDB

  • Гибкость. MongoDB позволяет хранить данные различных типов и изменять их структуру без необходимости перемещения БД. Это особенно полезно в ситуациях, когда требуется быстро внести изменения в данные или адаптировать схему базы данных к новым требованиям. 
  • Масштабируемость. MongoDB также обладает возможностью горизонтального масштабирования, что позволяет легко расширять хранилище данных по мере увеличения нагрузки, добавляя новые серверы или узлы кластера.
  • Высокая производительность. MongoDB обеспечивает высокую скорость выполнения операций – чтения и записи – благодаря ряду оптимизаций и особенностей. 
  • Отказоустойчивость. MongoDB предлагает возможность создания частичных копий (реплик) базы данных по всему миру, что позволяет распределить данные и обеспечить их доступность и отказоустойчивость. Реплики автоматически синхронизируются между собой, обеспечивая непрерывную работу в случае отказа одного или нескольких серверов. Если одна реплика становится недоступной, MongoDB автоматически переключается на доступные реплики, минимизируя простои и потерю данных.
  • Поддержка сложных запросов. MongoDB позволяет выполнять сложные операции поиска, фильтрации и агрегирования данных – группировку, сортировку и суммаризацию данных, – что делает эту БД подходящим выбором для аналитических и статистических задач. Кроме того, она также поддерживает индексы и оптимизирует запросы для быстрого доступа к данным. 

Варианты использования MongoDB

MongoDB предлагает широкий спектр задач и сфер, в которых она может быть полезна: 

Хранение данных

MongoDB может использоваться в качестве хранилища данных для различных типов информации. Она позволяет хранить структурированные и неструктурированные данные, такие как документы, JSON-подобные объекты, графы и временные ряды. 

Разработка веб-приложений

MongoDB является популярным выбором для разработки веб-приложений, особенно тех, которые обрабатывают большие объёмы данных. Она позволяет легко масштабировать хранилище по мере увеличения нагрузки, а также обеспечивает высокую производительность при чтении и записи информации. 

Аналитика данных 

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

Системы управления контентом 

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

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

Системы мониторинга

MongoDB также бывает полезна в системах мониторинга для хранения и анализа данных о состоянии и производительности различных компонентов и устройств. Она позволяет хранить данные о событиях, метриках и журналах, а также выполнять быстрый поиск и анализ этих данных.

Интернет вещей

MongoDB может использоваться в приложениях интернета вещей (IoT) для хранения и обработки данных, собранных от различных устройств и датчиков. 

Что такое Kubernetes

Kubernetes (часто сокращают как K8s) – это программное обеспечение c открытым исходным кодом, которое разработала компания Google для автоматизации развертывания, масштабирования и управления контейнерными приложениями. 

Подробнее в статье: «Что такое kubernetes». 

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

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

Вы можете использовать любую операционную систему, но использование Linux и его дистрибутивов снизит риск возникновения проблем при установке до минимума. 

Если вы хотите получить готовый надёжный сервер, RU-CENTER предлагает услугу «Аренда выделенного сервера». Обратившись к нашим специалистам, вы сможете подобрать подходящий тариф и получить не только мощное оборудование для хранения своих данных, но и его круглосуточное обслуживание. 

Как создать кластер Kubernetes

Определите платформу, на которой вы хотите развернуть кластер Kubernetes. 

Существует несколько популярных платформ: 

  • Docker;
  • Minikube;
  • Google Kubernetes Engine (GKE);
  • Amazon Elastic Kubernetes Service (EKS); 
  • и другие. 

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

В нашем руководстве мы используем Docker. С процессом установки вы можете ознакомиться в статье про Kubernetes

Как установить MongoDB в кластер Kubernetes

  1. Войдите на свой сервер как root-пользователь.
  2. С помощью менеджера пакетов установите следующие инструменты:

sudo -s

apt-get update && apt install curl apt-transport-https -y && curl -s http

  1. Создайте файл, в котором хранятся данные доступа к кластеру, и установите его в качестве системной переменной:

mkdir /usr/local/etc/mongo && cd /usr/local/etc/mongo

cat << EOF > testcluster.conf

<PASTE CONFIGURATION DATA HERE>

EOF

echo "export KUBECONFIG=testcluster.conf" >> ~/.bashrc

  1. Чтобы проверить наличие соединения, пропишите:

kubectl cluster-info

В выводе вы должны увидеть похожую запись: 

Kubernetes control plane is running at https://11.11.1.22:2222

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

root@ubuntu:/usr/1ocal/etc/mongo#

Где «https://11.11.1.22:2222» – это ваш IP-адрес.

  1. MongoDB нужно хранилище для сохранения данных. Настроить его вы можете с помощью собственного конфигурационного файла «PersistVolClaim.yaml»:

cat << EOF > PersistVolClaim.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mongodatapv 

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 1Gi 

EOF

Где:

«storage» – ёмкость контейнера в гигабайтах. 

«accessModes» указывает тип доступа; 

«ReadWriteOnce» позволяет смонтировать том для чтения и записи только одному узлу. 

Важно! Если вам необходимо смонтировать том для чтения и записи множеству узлов – установите значение «ReadWriteMany». 

Если же том должен быть смонтирован только для чтения нескольких узлов, пропишите «ReadOnlyMany».

  1. Следующим шагом является создание файла с учётными данными, который хранит доступ к MongoDB. В него входят логин и пароль, зашифрованные через BASE64.

К примеру, он может иметь вид:

cat << EOF > Creds.yaml

apiVersion: v1

data:

username: <BASE64_ENCODED_LOGIN>

password: <BASE64_ENCODED_PASSWORD>

kind: Secret

metadata:

creationTimestamp: null

name: creds

EOF

Важно! Для шифрования и дешифрования данных вы можете использовать следующие команды:

echo <обычные данные> | base64 # to crypt data via base64 tool

echo <данные с шифрованием> | base64 -d # to decrypt it

  1. Затем создайте файл развёртывания экземпляра:

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

  1. Чтобы запустить MongoDB, выполните команду:

kubectl apply -f

В случае успешного запуска в выводе отобразится:

secret/creds created

deployment. apps/mongo created

persistent volume/mongodata created

persistentvolumeclaim/mongodata created

root@ubuntu:/usr/1ocal/etc/mongo#

Как проверить подключение

  1. Теперь, когда экземпляры развёрнуты, необходимо проверить соединение. Для этого пропишите команду:

kubectl exec deployment/client -it -- /bin/bash

mongo

Если подключение прошло успешно, на экране вы увидите:

  1. Чтобы создать новую базу данных, просто переключитесь на неё:

Важно! БД не будет сохранена, если вы не добавите в неё хоть какие-то данные.

use NEW_DATABASE_NAME

db.createCollection("newdata") 

show dbs  

Вместо «NEW_DATABASE_NAME» пропишите название базы данных. 

Готово! Вы полностью завершили установку MongoDB в кластер Kubernetes.

Всё ещё остались вопросы?