В этом документе описывается установка и развертывание MatrixDB в кластере Kubernetes.
Вам понадобятся клиенты kubectl и helm, имеющие доступ к кластеру Kubernetes.
Также вам потребуются достаточные права на создание пространства имен (namespace) в кластере Kubernetes и развертывание ресурсов в этом пространстве имен.
При установке соответствующих компонентов программного обеспечения с помощью helm вы можете настроить необходимые параметры под ваш кластер Kubernetes.
Изучите, как использовать kubectl и helm.
openebs-hostpathЕсли в вашем кластере Kubernetes отсутствует StorageClass для MatrixDB,
вы можете развернуть OpenEBS и использовать StorageClass openebs-hostpath в качестве хранилища для базы данных MatrixDB.
См. документацию по установке OpenEBS через Helm
Выполните
helm repo add openebs https://openebs.github.io/charts
helm repo update
helm upgrade --install openebs --namespace openebs openebs/openebs --create-namespace
чтобы создать пространство имен openebs и установить последнюю версию OpenEBS в это пространство имен.
MatrixDB зависит от cert-manager для создания и управления сертификатами и ключами.
Для корректной работы matrixdb-operator необходимо установить cert-manager в вашем кластере Kubernetes.
Как правило, на один кластер Kubernetes устанавливается только один экземпляр cert-manager.
Перед выполнением следующих шагов установки убедитесь, что в вашем кластере еще не установлен cert-manager.
Если cert-manager уже установлен, проверьте, что его версия >= 1.6.0.
См. документацию по установке cert-manager через Helm
Выполните
helm repo add jetstack https://charts.jetstack.io
helm repo update
helm upgrade --install \
cert-manager jetstack/cert-manager \
--namespace cert-manager \
--create-namespace \
--set installCRDs=true
чтобы создать пространство имен cert-manager и установить последнюю версию cert-manager в это пространство имен.
matrixdb-operatormatrixdb-operator — это инструмент для развертывания MatrixDB в кластере Kubernetes.
Чтобы развернуть MatrixDB, вам нужно установить его в кластер.
См. наш репозиторий Helm-чартов
Примечание!
matrixdb-operatorи версия MatrixDB совместимы между собой, поэтому необходимо выбирать соответствующую версию инструмента.
Подробную информацию о соответствии версий см. в разделе соответствие версий MatrixDB и MatrixDB Operator
Выполните
helm repo add ymatrix https://ymatrix-data.github.io/charts
helm repo update
helm upgrade --install \
matrixdb-operator ymatrix/matrixdb-operator \
--namespace matrixdb-system \
--create-namespace \
--version 0.8.0
чтобы создать пространство имен matrixdb-system и установить последнюю версию matrixdb-operator в это пространство имен.
Примечание!
Если доменное имя вашего кластера Kubernetes отличается от значения по умолчанию
cluster.local, необходимо настроить параметры установки matrixdb-operator, чтобы он использовал ваше доменное имя кластера.Предположим, что доменное имя вашего кластера Kubernetes —
custom.domain. Тогда при установке matrixdb-operator в командуhelm upgradeнужно добавить следующие параметры:--set kubernetesClusterDomain=custom.domain
После завершения установки выполните:
helm list --namespace matrixdb-system
Результат вывода будет примерно таким:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
matrixdb-operator matrixdb-system 1 2022-04-15 17:45:52.919849 +0800 CST deployed matrixdb-operator-0.8.0 0.8.0
Это позволит определить версию установленного matrixdb-operator.
При развертывании базы данных необходимо убедиться, что версия matrixdb-operator, поддерживаемая образом контейнера развернутой базы данных, совпадает с установленной версией matrixdb-operator.
Пример файла db0.yaml приведён ниже:
aapiVersion: deploy.ymatrix.cn/v1
kind: MatrixDBCluster
metadata:
name: db0 # The name of the YMatrix cluster
spec:
image:
repository: matrixdb/matrixdb-community # If you are using the Enterprise Edition, you need to modify this value to your own mirroring storage.
tag: <DB-TAG-TO-SPECIFY> # You need to modify the tag value here to select a database mirroring that can run on the version of matrixdb-operator you installed.
master:
enableStandby: true
memory: "500Mi"
cpu: "0.5"
storageClassName: openebs-hostpath # You can choose other StorageClasses supported by your Kubernetes cluster.
storage: "1Gi"
workerSelector: {}
segments:
count: 1
enableMirror: false
memory: "500Mi"
cpu: "0.5"
storageClassName: openebs-hostpath # You can choose other StorageClasses supported by your Kubernetes cluster.
storage: "1Gi"
workerSelector: {}
gate:
memory: "100Mi"
cpu: "0.1"
storageClassName: openebs-hostpath # You can choose other StorageClasses supported by your Kubernetes cluster.
storage: "1Gi"
workerSelector: {}
Подробные сведения о конфигурации параметров см. в разделе описание файла CRD.
Выполните следующую команду, чтобы создать пространство имен matrixdb-ns для развертывания MatrixDB:
kubectl create namespace matrixdb-ns
После выполнения предыдущих шагов:
db0.yaml.matrixdb-ns.Выполните следующую команду, чтобы развернуть базу данных, определённую в файле db0.yaml:
kubectl apply -f db0.yaml --namespace matrixdb-ns
После успешного выполнения команды можно выполнить:
kubectl get mxdb --namespace matrixdb-ns
чтобы просмотреть состояние развернутого кластера MatrixDB db0.
Перед использованием развернутого кластера может потребоваться настройка параметров MatrixDB для оптимизации производительности.
Команда gpconfig должна выполняться на мастер-узле, имя хоста которого имеет формат <cluster-name>-0-0.
В ранее развернутом кластере имя хоста мастер-узла — db0-0-0.
Выполните:
kubectl exec -it db0-0-0 --namespace matrixdb-ns -- sudo -u mxadmin -i
чтобы открыть оболочку (shell) в поде, где находится мастер.
В открытой оболочке можно выполнить gpconfig, чтобы просмотреть и изменить нужные параметры.
Например, выполните следующую команду, чтобы просмотреть все изменяемые параметры:
gpconfig -l
Подробнее об использовании gpconfig см. в: документации gpconfig
После изменения параметров выполните следующую команду, чтобы перезапустить кластер базы данных и применить новые настройки:
gpstop -a -r -M fast
Наконец, выполните exit, чтобы выйти из оболочки пода, где находится мастер.
Имя пользователя и пароль администратора по умолчанию для развернутой MatrixDB указаны ниже. Перед использованием измените пароль администратора.
| Имя пользователя | Пароль | |--------------------------| | mxadmin | changeme |
При использовании кластера необходимо определить, к какому сервису базы данных вы подключаетесь.
Выполните следующую команду, чтобы просмотреть сервис ранее развернутой базы данных:
kubectl get svc --namespace matrixdb-ns
Примерный вывод:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
db0 ClusterIP None <none> 22/TCP 7d22h
db0-cylinder ClusterIP 172.20.148.232 <none> 4637/TCP 7d22h
db0-gate ClusterIP None <none> 4617/TCP 7d22h
db0-pg ClusterIP 172.20.216.189 <none> 5432/TCP 7d22h
db0-ui ClusterIP 172.20.157.163 <none> 8240/TCP 7d22h
Здесь db0-pg — это сервис, к которому необходимо подключаться для работы с базой данных. db0-ui — сервис, который используется при работе с пользовательским интерфейсом базы данных.
В среде с доступом к IP-адресу кластера выполните:
psql -h 172.20.216.189 -p 5432 -U mxadmin
чтобы подключиться к базе данных. (Введите запрашиваемый пароль для mxadmin)
Используйте kubectl port-forward для временного доступа к сервису.
В среде с доступом к IP-адресу кластера откройте в браузере http://172.20.157.163:8240
Введите пароль пользователя mxadmin, чтобы войти в интерфейс.
Proxy, созданный с помощью kubectl proxy, можно использовать для временного доступа к сервису.
См.: Импорт данных с помощью Kafka
Метод использования аналогичен psql.
Текущий matrixdb-operator разворачивает кластер базы данных в виде нескольких StatefulSet.
Например, развертывание кластера db0 выглядит так:
$ kubectl get statefulset
NAME READY AGE
db0-0 2/2 9d
db0-1 2/2 9d
db0-2 2/2 9d
db0-gate 1/1 9d
Среди них все StatefulSet с именем db0-{StatefulSet serial number} являются частью кластера базы данных.
StatefulSet с порядковым номером 0 разворачивает сегмент master.
Соответствующий под db0-0-{Replication serial number} разворачивает основной сегмент master (номер репликации 0) и зеркало standby (номер репликации 1).
StatefulSet с порядковым номером, отличным от 0, разворачивает сегмент data.
Соответствующий под db0-{StatefulSet serial number}-{Replication serial number} разворачивает основной сегмент primary сегмента data (номер репликации 0) и зеркало (номер репликации 1).
Основные инструменты управления gp* и mx* должны запускаться на master.
Выполните следующую команду, чтобы получить оболочку пода, где работает master (запуск от пользователя mxadmin):
kubectl exec -n matrixdb-ns -it db0-0-0 -- sudo -u mxadmin -i
Данные, хранящиеся в базе данных, в конечном итоге сохраняются в PV.
Эти PV создаются по запросу PVC matrixdb-operator в кластере Kubernetes:
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
db0-data-db0-0-0 Bound pvc-7d7fdf0c-0922-4d2a-9cdd-f72ce9cd8441 1Gi RWO gp2 9d
db0-data-db0-0-1 Bound pvc-966dbad2-f7b0-4af4-b7b1-62073492833d 1Gi RWO gp2 9d
db0-data-db0-1-0 Bound pvc-eaa0bd6f-d9bc-4578-aeec-4375a86d6c21 1Gi RWO gp2 9d
db0-data-db0-1-1 Bound pvc-fac53281-9ffd-423e-ba71-0e3d381b3cc8 1Gi RWO gp2 9d
db0-data-db0-2-0 Bound pvc-a0ddc01a-6cc7-4640-8b8e-1471ccc5a8ab 1Gi RWO gp2 9d
db0-data-db0-2-1 Bound pvc-b5ee24f9-d7e6-4448-8c54-ebdb60488bcb 1Gi RWO gp2 9d
db0-data-db0-gate-0 Bound pvc-ad685e25-8f18-4d30-9227-a3868bb19f90 1Gi RWO gp2 9d
Эти PV монтируются в каталог /mxdata соответствующего пода. Управление жизненным циклом этих PVC и PV должно осуществляться вручную администратором базы данных.
Образ Community-версии MatrixDB размещен на DockerHub и может быть загружен напрямую.
Если вам нужен образ Enterprise-версии MatrixDB, свяжитесь с нами для получения соответствующей ссылки на скачивание,
чтобы импортировать его в собственное хранилище образов контейнеров с помощью docker или nerdctl.
Предположим, вы скачали образ matrixdb-v4.5.0.enterprise-v0.8.0.tar.gz.
Выполните следующую команду, чтобы импортировать его в локальное хранилище образов и загрузить в хранилище образов, используемое вашим кластером Kubernetes:
# Use docker load to import image files
gunzip -c matrixdb-v4.5.0.enterprise-v0.8.0.tar.gz | docker load
# The output is omitted here
...
Loaded image: matrixdb/matrixdb-enterprise:v4.5.0.enterprise-v0.8.0
# retag mirror
docker tag matrixdb/matrixdb-enterprise:v4.5.0.enterprise-v0.8.0 \
<your-image-repo>/matrixdb-enterprise:v4.5.0.enterprise-v0.8.0
# Push new tags to your image storage
docker push <your-image-repo>/matrixdb-enterprise:v4.5.0.enterprise-v0.8.0
# After that, when you deploy the database, you can use the above custom repo and tag in the CRD file.