Установка 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, если нет - создайте её самостоятельно.