Развертывание в 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.12.1

для создания пространства имён 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               2023-06-06 17:45:52.919849 +0800 CST        deployed        matrixdb-operator-0.12.1        0.12.1

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

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

4. Развертывание кластера базы данных YMatrix

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

Пример файла db0.yaml приведён ниже:

apiVersion: 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 и может быть загружен напрямую.
Если вам нужен образ Enterprise-версии 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.