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

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

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

1.1 Среда выполнения

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

1.2 Необходимые инструменты

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

1.3 Предварительные знания

Необходимо знать, как использовать kubectl и helm.

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

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

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

См. Руководство по установке 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 под ваш пользовательский домен.

Например, если домен кластера — 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:

apiVersion: deploy.ymatrix.cn/v1
kind: MatrixDBCluster
metadata:
  name: db0 # Name of the YMatrix cluster
spec:
  image:
    repository: matrixdb/matrixdb-community # Change this for enterprise edition to your private registry
    tag: <DB-TAG-TO-SPECIFY> # Update tag to match a DB image compatible with your installed matrixdb-operator version
  master:
    enableStandby: true
    memory: "500Mi"
    cpu: "0.5"
    storageClassName: openebs-hostpath # Choose another supported StorageClass if needed
    storage: "1Gi"
    workerSelector: {}
  segments:
    count: 1
    enableMirror: false
    memory: "500Mi"
    cpu: "0.5"
    storageClassName: openebs-hostpath # Same as spec.master.storageClassName
    storage: "1Gi"
    workerSelector: {}
  gate:
    memory: "100Mi"
    cpu: "0.1"
    storageClassName: openebs-hostpath # Same as spec.master.storageClassName
    storage: "1Gi"
    workerSelector: {}

Подробную информацию о параметрах конфигурации см. в документации по конфигурации CRD.

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

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

kubectl create namespace matrixdb-ns

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

После подготовки следующих компонентов:

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

Выполните:

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

После успешного выполнения проверьте статус развернутого кластера YMatrix db0 с помощью:

kubectl get mxdb --namespace matrixdb-ns

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

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

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 psql (замените пример IP на свой реальный IP)

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

В средах, где доступен ClusterIP, выполните:

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

В средах с доступом к ClusterIP откройте в браузере http://172.20.157.163:8240.
Войдите, используя пароль пользователя mxadmin.

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

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

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

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

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

Методы подключения аналогичны методам для psql.

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

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

На данный момент matrixdb-operator разворачивает кластер YMatrix в виде нескольких 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序号} является частью кластера базы данных.

StatefulSet с индексом 0 разворачивает сегмент master.
Соответствующий ему под db0-0-{Replication序号} запускает master сегмент (master, индекс репликации 0) и standby (индекс репликации 1).

StatefulSet с ненулевыми индексами разворачивают сегменты data.
Каждый такой под содержит data сегмент (primary, индекс репликации 0) и зеркало (индекс репликации 1).

Большинство инструментов управления gp* и mx* должны выполняться на master.

Выполните следующую команду, чтобы получить оболочку на поде, где работает master (от имени пользователя mxadmin):

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

7.2 Тома постоянных данных (PV)

Данные, хранящиеся в базе, находятся в постоянных томах (Persistent Volumes, PV).
Эти тома создаются через PersistentVolumeClaims (PVC), которые создаются matrixdb-operator.

Пример:

$ 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 Edition размещены на DockerHub и могут быть загружены напрямую.
Для образов Enterprise Edition свяжитесь с нами, чтобы получить ссылку для скачивания.
Затем вы можете использовать docker или nerdctl, чтобы импортировать образ в свой частный реестр контейнеров.

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

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

# Load image using docker load
gunzip -c matrixdb-v5.0.0.enterprise-v0.12.0.tar.gz | docker load
# Output omitted
... 
Loaded image: matrixdb/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0

# Retag the image
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 the tagged image to your registry
docker push <your-image-repo>/matrixdb-enterprise:v5.0.0.enterprise-v0.12.0

# You can now reference this custom repo and tag in your CRD during deployment