В этом документе описывается установка и развертывание YMatrix в кластере Kubernetes.
Для доступа к вашему кластеру Kubernetes требуются клиент Kubernetes kubectl и helm.
Вы должны иметь достаточные права для создания пространств имён и развертывания ресурсов в них.
При установке компонентов с помощью helm вы можете настраивать параметры в соответствии с требованиями вашей среды Kubernetes.
Необходимо знать, как использовать kubectl и helm.
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 в него.
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 в него.
matrixdb-operatormatrixdb-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-operatorhelm 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.
Ниже приведён пример файла 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.
Выполните следующую команду для создания пространства имён matrixdb-ns для развертывания YMatrix:
kubectl create namespace matrixdb-ns
После подготовки следующих компонентов:
db0.yaml.matrixdb-ns.Выполните:
kubectl apply -f db0.yaml --namespace matrixdb-ns
После успешного выполнения проверьте статус развернутого кластера YMatrix db0 с помощью:
kubectl get mxdb --namespace matrixdb-ns
Перед использованием кластера может потребоваться настройка параметров YMatrix для оптимизации производительности.
Команда gpconfig должна выполняться на мастер-узле. Имя хоста мастера имеет формат <cluster-name>-0-0.
В приведённом выше развертывании имя хоста мастера — db0-0-0.
Выполните:
kubectl exec -it db0-0-0 --namespace matrixdb-ns -- sudo -u mxadmin -i
чтобы открыть оболочку внутри пода мастера.
В оболочке используйте gpconfig для просмотра и изменения параметров конфигурации.
Например, чтобы вывести все настраиваемые параметры:
gpconfig -l
Дополнительную информацию о gpconfig см. в: Документация по gpconfig
После внесения изменений перезапустите кластер, чтобы новые настройки вступили в силу:
mxstop -a -r -M fast
В конце выполните exit, чтобы завершить сеанс оболочки на поде мастера.
Учётные данные администратора по умолчанию для развернутой базы YMatrix:
| Имя пользователя | Пароль |
|---|---|
| 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 предназначен для доступа к интерфейсу.
В средах, где доступен ClusterIP, выполните:
psql -h 172.20.216.189 -p 5432 -U mxadmin
чтобы подключиться к базе данных. (Введите пароль для mxadmin при запросе.)
Используйте kubectl port-forward для временного доступа к сервису.
В средах с доступом к ClusterIP откройте в браузере http://172.20.157.163:8240.
Войдите, используя пароль пользователя mxadmin.
Используйте прокси, созданный через kubectl proxy, для временного доступа.
См.: Импорт данных с помощью Kafka
Методы подключения аналогичны методам для psql.
На данный момент 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
Данные, хранящиеся в базе, находятся в постоянных томах (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 должно осуществляться вручную администратором базы данных.
Образы 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