Table of Contents

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

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

MongoDB как хранилище данных

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

Разница с MongoDB

Вы не почувствуете значительных изменений и сможете общаться с базой аналогично MongoDB (в том числе используя MongoDB Compass и утилиту mongosh). Единственное значительное различие - FerretDB не поддерживает роли, поэтому создание новых пользователей базы данных должно происходить следующим образом:

db.createUser({
  user: 'newuser',
  pwd: 'newpassword',
  roles: []
})

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

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

FERRET_USER=any_name
FERRET_PASS=ferret_password
FERRET_SERVICE_NAME=fr-ferret
NAMESPACE=ferret
kubectl create namespace $NAMESPACE

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

Создание Deployment

cat <<EOF | kubectl apply -n $NAMESPACE -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: $FERRET_SERVICE_NAME
spec:
  replicas: 1
  selector:
    matchLabels:
      app: $FERRET_SERVICE_NAME
  template:
    metadata:
      labels:
        app: $FERRET_SERVICE_NAME
    spec:
      containers:
        - name: $FERRET_SERVICE_NAME
          image: ghcr.io/ferretdb/ferretdb-eval:2
          ports:
            - containerPort: 27017
          env:
            - name: POSTGRES_USER
              value: $FERRET_USER
            - name: POSTGRES_PASSWORD
              value: $FERRET_PASS
          volumeMounts:
          - mountPath: /var/lib/postgresql/data
            name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: fr-ferret-pvc
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ferret-storageclass
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: ferret-storage
  namespace: $NAMESPACE
  labels:
    type: local
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  storageClassName: ferret-storageclass
  local:
    path: /devkube/ferretdb
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fr-ferret-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ferret-storageclass
  resources:
    requests:
      storage: 2Gi
---
apiVersion: v1
kind: Service
metadata:
  name: $FERRET_SERVICE_NAME
  labels:
    app: $FERRET_SERVICE_NAME
spec:
  selector:
    app: $FERRET_SERVICE_NAME
  ports:
    - port: 27017
      targetPort: 27017
EOF

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

Внимание

Проверьте создалась ли на ноде директория /devkube/ferretdb, если нет - создайте её самостоятельно.