Развертывание в Kubernetes

В этом документе описывается установка и развертывание YMatrix в кластере Kubernetes.

1 Перед установкой

1.1 Рабочая среда

  • Кластер Kubernetes
    • Версия Kubernetes >= 1.20
    • Включена RBAC
    • Включен DNS
    • Доступен StorageClass для хранения базы данных
    • Возможен доступ в Интернет для загрузки необходимых программных пакетов и образов

1.2 Подготовка инструментов

Вам понадобятся клиенты kubectl и helm, имеющие доступ к кластеру Kubernetes.
При этом вам потребуются достаточные права для создания пространства имён (namespace) в кластере Kubernetes и развертывания ресурсов в этом пространстве имён.
При установке соответствующих программных компонентов с помощью helm вы можете настроить необходимые параметры под ваш кластер Kubernetes.

1.3 Необходимые знания

Изучите, как использовать kubectl и helm.

2 Установка зависимостей

2.1 (Опционально) Установка OpenEBS для доступного StorageClass openebs-hostpath

Если в вашем кластере Kubernetes отсутствует StorageClass для YMatrix,
вы можете использовать StorageClass openebs-hostpath в качестве хранилища для базы данных YMatrix, развернув OpenEBS.

См. документацию по установке 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 в это пространство имён.

2.2 Установка стороннего программного пакета cert-manager

YMatrix зависит от 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 в это пространство имён.

3 Установка matrixdb-operator

matrixdb-operator — это инструмент для развертывания YMatrix в кластере Kubernetes.
Чтобы развернуть YMatrix, вам необходимо установить его в кластер.

См. нашу библиотеку Helm-чартов

Примечание!

Между matrixdb-operator и версиями YMatrix существуют требования совместимости, поэтому необходимо выбирать соответствующую версию инструмента. Подробную информацию о соответствии версий см. в разделе соответствие версий YMatrix и YMatrix 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.13.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-08-08 17:45:52.919849 +0800 CST        deployed        matrixdb-operator-0.13.0        0.13.0

Это позволит определить версию установленного matrixdb-operator.

При развертывании базы данных необходимо убедиться, что версия matrixdb-operator, поддерживаемая образом контейнера развернутой базы данных, совпадает с установленной версией matrixdb-operator.

4 Развертывание кластера YMatrix

4.1 Подготовка файла определения CRD YMatrix

Пример файла 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.

4.2 Подготовка пространства имён для развертывания YMatrix

Выполните следующую команду, чтобы создать пространство имён matrixdb-ns для развертывания YMatrix:

kubectl create namespace matrixdb-ns

4.3 Развертывание базы данных YMatrix

После выполнения вышеуказанных подготовительных действий:

  • Файл определения CRD YMatrix, предположим, что имя этого файла — db0.yaml.
  • Пространство имён для развертывания YMatrix, предположим, что это matrixdb-ns.

Выполните следующую команду, чтобы развернуть базу данных, определённую в db0.yaml:

kubectl apply -f db0.yaml --namespace matrixdb-ns

После успешного выполнения команды можно выполнить:

kubectl get mxdb --namespace matrixdb-ns

чтобы просмотреть состояние развернутого кластера YMatrix db0.

5 Настройка кластера

Перед использованием развернутого кластера может потребоваться настройка параметров YMatrix для оптимизации производительности.

5.1 Использование gpconfig для настройки параметров кластера

5.1.1 Вход в мастер-узел

gpconfig должен выполняться на мастер-узле, формат имени хоста которого — <cluster-name>-0-0.
В ранее развернутом кластере имя хоста мастер-узла — db0-0-0.

Выполните

kubectl exec -it db0-0-0 --namespace matrixdb-ns -- sudo -u mxadmin -i

чтобы открыть оболочку (shell) в поде, где находится мастер.

5.1.2 Настройка с помощью gpconfig

В открытой оболочке можно выполнить gpconfig, чтобы просмотреть и изменить нужные параметры.
Например, выполните следующую команду, чтобы просмотреть все изменяемые параметры:

gpconfig -l

Подробности использования gpconfig см. в: документации gpconfig

5.1.3 Перезапуск базы данных

После изменения параметров выполните следующую команду, чтобы перезапустить кластер базы данных и применить новые настройки:

mxstop -a -r -M fast

5.1.4 Выход

В конце выполните exit, чтобы выйти из оболочки пода, где находится мастер.

6 Использование кластеров

6.1 Конфигурация по умолчанию для кластеров

Имя пользователя и пароль администратора по умолчанию для развернутой базы данных YMatrix указаны ниже. Перед использованием измените пароль администратора.

| Имя пользователя | Пароль | |--------------------------| | mxadmin | changeme |

6.2 Просмотр развернутых сервисов

При использовании кластера необходимо определить, к какому сервису базы данных вы подключаетесь.

Выполните следующую команду, чтобы просмотреть сервис ранее развернутой базы данных:

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 — сервис, который используется при работе с пользовательским интерфейсом базы данных.

6.3 Подключение к базе данных с помощью клиента PostgreSQL 12 (замените пример IP-адреса на реальный IP-адрес)

6.3.1 Прямой доступ к сервису db0-pg

В среде с доступом к IP-адресу кластера выполните:

psql -h 172.20.216.189 -p 5432 -U mxadmin

чтобы подключиться к базе данных. (Введите запрашиваемый пароль для mxadmin)

6.3.2 Использование port-forward

Используйте kubectl port-forward, чтобы временно получить доступ к сервису.

6.4 Подключение к интерфейсу YMatrix (замените пример IP-адреса на реальный IP-адрес)

6.4.1 Прямой доступ к сервису db0-ui

В среде с доступом к IP-адресу кластера откройте в браузере http://172.20.157.163:8240

Введите пароль пользователя mxadmin, чтобы войти в интерфейс.

6.4.2 Использование proxy

proxy, созданный с помощью kubectl proxy, можно использовать для временного доступа к сервису.

6.4.3 Импорт данных с помощью Kafka в интерфейсе

См.: Импорт данных с помощью Kafka

6.5 Подключение приложений базы данных к кластеру

Метод использования аналогичен psql.

7 Управление кластерами

7.1 Получение оболочки мастер-узла

Текущий 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

7.2 Данные PV

Данные, хранящиеся в базе данных, в конечном итоге сохраняются в 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 должно осуществляться вручную администратором базы данных.

8 Часто задаваемые вопросы

8.1 Как получить образ базы данных YMatrix?

Образ community-версии YMatrix размещён на DockerHub и может быть получен напрямую.
Если вам нужен образ корпоративной версии YMatrix, свяжитесь с нами для получения соответствующей ссылки на скачивание,
чтобы вы могли импортировать его в собственное хранилище образов контейнеров с помощью docker или nerdctl.

Предположим, вы скачали образ matrixdb-v5.0.0.enterprise-v0.12.0.tar.gz.

Выполните следующую команду, чтобы импортировать его в локальное хранилище образов и отправить в хранилище образов, используемое вашим кластером Kubernetes:

# Use docker load to import image files
gunzip -c matrixdb-v5.0.0.enterprise-v0.12.0.tar.gz | docker load
# The output is omitted here
... 
Loaded image: matrixdb/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0

# retag mirror
docker tag matrixdb/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0 \
           <your-image-repo>/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0

# Push new tags to your image storage
docker push <your-image-repo>/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0

# After that, when you deploy the database, you can use the above custom repo and tag in the CRD file.