Table of Contents

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

Продукты: МоиОтчеты Корпоративный Сервер

Хранилище данных с открытым исходным кодом

На данной странице рассказывается о варианте установки с использованием MongoDB. Альтернативой выступает FerretDB - аналог c открытым исходным ходом, который использует PostgreSQL как движок базы данных. Инструкцию по установке c использованием FerretDB можно прочитать по ссылке.

Начало установки

Добавление репозитория для helm:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

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

Подготовка пространства имён:

NAMESPACE=mongo
MONGO_USER=any_name
MONGO_PASS=mongo_password
MONGO_DB_SIZE=10Gi
MONGO_SERVICE_NAME=fr-mongo
kubectl create namespace $NAMESPACE

Обратите внимание на переменную MONGO_SERVICE_NAME - это имя в дальнейшем будет использоваться для обращения к MongoDB из сервера отчётов.

Дальнейшая настройка будет отличаться от того, используется ли хранилище облачного провайдера или локальное хранилище. Ниже приведено два примера. Используйте только один из них, или модифицируйте настройки для своего облачного провайдера.

Настройка хранилища для облачного провайдера

helm install $MONGO_SERVICE_NAME bitnami/mongodb \
  --namespace $NAMESPACE \
  --set persistence.enabled=true \
  --set persistence.storageClass=hcloud-volumes \
  --set persistence.size=$MONGO_DB_SIZE
  --set auth.username=$MONGO_USER \
  --set auth.password=$MONGO_PASS \
  |  tee MongoDB.txt

Настройка локального хранилища

StorageClass предоставляет средства для администраторов для описания "классов" хранилищ, которые они предоставляют.

MONGO_DATA_DIR=/devkube/mongodb
MONGO_DB=reports_db # Можно использовать любое имя

##
## Create StorageClass for MongoDB
##
cat <<EOF | kubectl apply -n $NAMESPACE -f -
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-sc-mongodb
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
EOF

##
## Create Persistent volume for MongoDB
##

cat <<EOF | kubectl apply -n $NAMESPACE -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongo-storage
  namespace: $NAMESPACE
  labels:
    type: local
spec:
  capacity:
    storage: $MONGO_DB_SIZE
  accessModes:
    - ReadWriteOnce
  storageClassName: local-sc-mongodb
  local:
    path: $MONGO_DATA_DIR
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - altlinux-10-2
EOF

Для установки MongoDB используйте следующий скрипт:

  helm install $MONGO_SERVICE_NAME bitnami/mongodb \
      --namespace $NAMESPACE \
      --set persistence.storageClass=local-sc-mongodb \
      --set auth.username=$MONGO_USER \
      --set auth.password=$MONGO_PASS \
      --set auth.database=$MONGO_DB | tee MongoDB.txt

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

Проверить корректность установки MongoDB проще всего при помощи Kubernetes Dashboard, установка которого была описана ранее.