Перейти к основному содержимому

Развертывание Selena с помощью Operator

В этой теме рассказывается, как использовать Selena Operator для автоматизации развертывания и управления кластером Selena в кластере Kubernetes.

примечание

Selena k8s operator был разработан как оператор уровня 2. См. https://sdk.operatorframework.io/docs/overview/operator-capabilities/ для понимания возможностей оператора уровня 2.

Как это работает

img

Перед началом работы

Создание кластера Kubernetes

Вы можете использовать облачный управляемый сервис Kubernetes, такой как Amazon Elastic Kubernetes Service (EKS) или кластер Google Kubernetes Engine (GKE), или самоуправляемый кластер Kubernetes.

Развертывание Selena Operator

  1. Добавьте пользовательский ресурс StarRocksCluster.

    kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/starrocks.com_starrocksclusters.yaml
  2. Разверните Selena Operator. Вы можете выбрать развертывание Selena Operator, используя файл конфигурации по умолчанию или пользовательский файл конфигурации.

    1. Разверните Selena Operator, используя файл конфигурации по умолчанию.

      kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml

      Selena Operator развертывается в пространстве имен starrocks и управляет всеми кластерами Selena во всех пространствах имен.

    2. Разверните Selena Operator, используя пользовательский файл конфигурации.

      • Загрузите файл конфигурации operator.yaml, который используется для развертывания Selena Operator.

        curl -O https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/deploy/operator.yaml
      • Измените файл конфигурации operator.yaml в соответствии с вашими потребностями.

      • Разверните Selena Operator.

        kubectl apply -f operator.yaml
  3. Проверьте статус работы Selena Operator. Если pod находится в состоянии Running и все контейнеры внутри pod имеют статус READY, Selena Operator работает как ожидается.

    $ kubectl -n starrocks get pods
    NAME READY STATUS RESTARTS AGE
    starrocks-controller-65bb8679-jkbtg 1/1 Running 0 5m6s

ПРИМЕЧАНИЕ

Если вы настраиваете пространство имен, в котором находится Selena Operator, вам нужно заменить starrocks на имя вашего настроенного пространства имен.

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

Вы можете напрямую использовать примеры файлов конфигурации, предоставленные Selena, для развертывания кластера Selena (объекта, созданного с использованием пользовательского ресурса StarRocks Cluster). Например, вы можете использовать starrocks-fe-and-be.yaml для развертывания кластера Selena, который содержит три узла FE и три узла BE.

kubectl apply -f https://raw.githubusercontent.com/StarRocks/starrocks-kubernetes-operator/main/examples/starrocks/starrocks-fe-and-be.yaml

В следующей таблице описаны несколько важных полей в файле starrocks-fe-and-be.yaml.

ПолеОписание
KindТип ресурса объекта. Значение должно быть StarRocksCluster.
MetadataМетаданные, в которых вложены следующие подполя:
  • name: имя объекта. Каждое имя объекта уникально идентифицирует объект одного типа ресурса.
  • namespace: пространство имен, к которому принадлежит объект.
SpecОжидаемый статус объекта. Допустимые значения: starRocksFeSpec, starRocksBeSpec и starRocksCnSpec.

Вы также можете развернуть кластер Selena, используя измененный файл конфигурации. Для поддерживаемых полей и подробных описаний см. api.md.

Развертывание кластера Selena занимает некоторое время. В течение этого периода вы можете использовать команду kubectl -n starrocks get pods для проверки статуса запуска кластера Selena. Если все pod находятся в состоянии Running и все контейнеры внутри pod имеют статус READY, кластер Selena работает как ожидается.

ПРИМЕЧАНИЕ

Если вы настраиваете пространство имен, в котором находится кластер Selena, вам нужно заменить starrocks на имя вашего настроенного пространства имен.

$ kubectl -n starrocks get pods
NAME READY STATUS RESTARTS AGE
starrocks-controller-65bb8679-jkbtg 1/1 Running 0 22h
starrockscluster-sample-be-0 1/1 Running 0 23h
starrockscluster-sample-be-1 1/1 Running 0 23h
starrockscluster-sample-be-2 1/1 Running 0 22h
starrockscluster-sample-fe-0 1/1 Running 0 21h
starrockscluster-sample-fe-1 1/1 Running 0 21h
starrockscluster-sample-fe-2 1/1 Running 0 22h

Примечание

Если некоторые pod не могут запуститься после длительного периода времени, вы можете использовать kubectl logs -n starrocks <pod_name> для просмотра информации журнала или kubectl -n starrocks describe pod <pod_name> для просмотра информации о событиях для локализации проблемы.

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

Доступ к кластеру Selena

К компонентам кластера Selena можно получить доступ через связанные с ними Services, такие как FE Service. Для подробных описаний Services и их адресов доступа см. api.md и Services.

ПРИМЕЧАНИЕ

  • По умолчанию развертывается только FE Service. Если вам нужно развернуть BE Service и CN Service, вам нужно настроить starRocksBeSpec и starRocksCnSpec в файле конфигурации кластера Selena.
  • Имя Service по умолчанию <имя кластера>-<имя компонента>-service, например, starrockscluster-sample-fe-service. Вы также можете указать имя Service в спецификации каждого компонента.

Доступ к кластеру Selena изнутри кластера Kubernetes

Изнутри кластера Kubernetes к кластеру Selena можно получить доступ через ClusterIP FE Service.

  1. Получите внутренний виртуальный IP-адрес CLUSTER-IP и порт PORT(S) FE Service.

    $ kubectl -n starrocks get svc 
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    be-domain-search ClusterIP None <none> 9050/TCP 23m
    fe-domain-search ClusterIP None <none> 9030/TCP 25m
    starrockscluster-sample-fe-service ClusterIP 10.100.162.xxx <none> 8030/TCP,9020/TCP,9030/TCP,9010/TCP 25m
  2. Получите доступ к кластеру Selena, используя клиент MySQL изнутри кластера Kubernetes.

    mysql -h 10.100.162.xxx -P 9030 -uroot

Доступ к кластеру Selena извне кластера Kubernetes

Извне кластера Kubernetes вы можете получить доступ к кластеру Selena через LoadBalancer или NodePort FE Service. В этой теме используется LoadBalancer в качестве примера:

  1. Выполните команду kubectl -n starrocks edit src starrockscluster-sample для обновления файла конфигурации кластера Selena и измените тип Service starRocksFeSpec на LoadBalancer.

    starRocksFeSpec:
    image: starrocks/fe-ubuntu:3.0-latest
    replicas: 3
    requests:
    cpu: 4
    memory: 16Gi
    service:
    type: LoadBalancer # указан как LoadBalancer
  2. Получите IP-адрес EXTERNAL-IP и порт PORT(S), которые FE Service предоставляет наружу.

    $ kubectl -n starrocks get svc
    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    be-domain-search ClusterIP None <none> 9050/TCP 127m
    fe-domain-search ClusterIP None <none> 9030/TCP 129m
    starrockscluster-sample-fe-service LoadBalancer 10.100.162.xxx a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com 8030:30629/TCP,9020:32544/TCP,9030:32244/TCP,9010:32024/TCP 129m ClusterIP None <none> 9030/TCP 23h
  3. Войдите на хост вашей машины и получите доступ к кластеру Selena, используя клиент MySQL.

    mysql -h a7509284bf3784983a596c6eec7fc212-618xxxxxx.us-west-2.elb.amazonaws.com -P9030 -uroot

Обновление кластера Selena

Обновление узлов BE

Выполните следующую команду для указания нового файла образа BE, например starrocks/be-ubuntu:latest:

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"image":"starrocks/be-ubuntu:latest"}}}'

Обновление узлов FE

Выполните следующую команду для указания нового файла образа FE, например starrocks/fe-ubuntu:latest:

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"image":"starrocks/fe-ubuntu:latest"}}}'

Процесс обновления длится некоторое время. Вы можете выполнить команду kubectl -n starrocks get pods для просмотра прогресса обновления.

Масштабирование кластера Selena

Горизонтальное расширение кластера BE

Выполните следующую команду для масштабирования кластера BE до 9 узлов:

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"replicas":9}}}'

Горизонтальное сжатие кластера BE

При сжатии узлов BE вам нужно масштабировать их по одному за раз и ждать перераспределения tablet на BE перед продолжением. Если есть таблицы с одной репликой, отключение узла BE может привести к потере данных, если tablet не удастся перераспределить.

Выполните следующую команду для сжатия кластера с 10 узлами BE до 9.

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksBeSpec":{"replicas":9}}}'

После сжатия вы должны вручную удалить узлы, статус alive которых равен false.

Перераспределение tablet займет некоторое время. Вы можете проверить прогресс, выполнив SHOW PROC '/statistic';.

Горизонтальное расширение кластера FE

Выполните следующую команду для расширения кластера FE до 4 узлов:

kubectl -n starrocks patch starrockscluster starrockscluster-sample --type='merge' -p '{"spec":{"starRocksFeSpec":{"replicas":4}}}'

Процесс масштабирования длится некоторое время. Вы можете использовать команду kubectl -n starrocks get pods для просмотра прогресса масштабирования.

Автоматическое масштабирование для кластера CN

Выполните команду kubectl -n starrocks edit src starrockscluster-sample для настройки политики автоматического масштабирования для кластера CN. Вы можете указать метрики ресурсов для CN как среднее использование CPU, среднее использование памяти, порог эластичного масштабирования, верхний предел эластичного масштабирования и нижний предел эластичного масштабирования. Верхний и нижний пределы эластичного масштабирования указывают максимальное и минимальное количество CN, разрешенное для эластичного масштабирования.

ПРИМЕЧАНИЕ

Если настроена политика автоматического масштабирования для кластера CN, удалите поле replicas из starRocksCnSpec в файле конфигурации кластера Selena.

Kubernetes также поддерживает использование behavior для настройки поведения масштабирования в соответствии с бизнес-сценариями, помогая вам достичь быстрого или медленного масштабирования или отключить масштабирование. Для получения дополнительной информации о политиках автоматического масштабирования см. Horizontal Pod Scaling.

Ниже приведен шаблон, предоставленный Selena, чтобы помочь вам настроить политики автоматического масштабирования:

  starRocksCnSpec:
image: starrocks/cn-ubuntu:latest
limits:
cpu: 16
memory: 64Gi
requests:
cpu: 16
memory: 64Gi
autoScalingPolicy: # Политика автоматического масштабирования кластера CN.
maxReplicas: 10 # Максимальное количество CN установлено на 10.
minReplicas: 1 # Минимальное количество CN установлено на 1.
# operator создает ресурс HPA на основе следующего поля.
# см. https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/ для получения дополнительной информации.
hpaPolicy:
metrics: # Метрики ресурсов
- type: Resource
resource:
name: memory # Среднее использование памяти CN указано как метрика ресурса.
target:
# Порог эластичного масштабирования составляет 60%.
# Когда среднее использование памяти CN превышает 60%, количество CN увеличивается для расширения.
# Когда среднее использование памяти CN ниже 60%, количество CN уменьшается для сжатия.
averageUtilization: 60
type: Utilization
- type: Resource
resource:
name: cpu # Среднее использование CPU CN указано как метрика ресурса.
target:
# Порог эластичного масштабирования составляет 60%.
# Когда среднее использование CPU CN превышает 60%, количество CN увеличивается для расширения.
# Когда среднее использование CPU CN ниже 60%, количество CN уменьшается для сжатия.
averageUtilization: 60
type: Utilization
behavior: # Поведение масштабирования настраивается в соответствии с бизнес-сценариями, помогая вам достичь быстрого или медленного масштабирования или отключить масштабирование.
scaleUp:
policies:
- type: Pods
value: 1
periodSeconds: 10
scaleDown:
selectPolicy: Disabled

В следующей таблице описаны несколько важных полей:

  • Верхний и нижний пределы эластичного масштабирования.
maxReplicas: 10 # Максимальное количество CN установлено на 10.
minReplicas: 1 # Минимальное количество CN установлено на 1.
  • Порог эластичного масштабирования.
# Например, среднее использование CPU CN указано как метрика ресурса.
# Порог эластичного масштабирования составляет 60%.
# Когда среднее использование CPU CN превышает 60%, количество CN увеличивается для расширения.
# Когда среднее использование CPU CN ниже 60%, количество CN уменьшается для сжатия.
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60

FAQ

Описание проблемы: При установке пользовательского ресурса StarRocksCluster с помощью kubectl apply -f xxx возвращается ошибка The CustomResourceDefinition 'starrocksclusters.starrocks.com' is invalid: metadata.annotations: Too long: must have at most 262144 bytes.

Анализ причин: Всякий раз, когда kubectl apply -f xxx используется для создания или обновления ресурсов, добавляется аннотация метаданных kubectl.kubernetes.io/last-applied-configuration. Эта аннотация метаданных имеет формат JSON и записывает last-applied-configuration. kubectl apply -f xxx подходит для большинства случаев, но в редких ситуациях, например, когда файл конфигурации для пользовательского ресурса слишком большой, это может привести к превышению размера аннотации метаданных.

Решение: Если вы устанавливаете пользовательский ресурс StarRocksCluster впервые, рекомендуется использовать kubectl create -f xxx. Если пользовательский ресурс StarRocksCluster уже установлен в среде, и вам нужно обновить его конфигурацию, рекомендуется использовать kubectl replace -f xxx.