Selena с Helm
Цели
Цели данного быстрого старта:
- Развернуть Kubernetes Operator для Selena и кластер Selena с помощью Helm
- Настроить пароль для пользователя базы данных Selena
root - Обеспечить высокую доступность с тремя FE и тремя BE
- Хранить метаданные в постоянном хранилище
- Хранить данные в постоянном хранилище
- Разрешить подключение MySQL-клиентов извне кластера Kubernetes
- Разрешить загрузку данных извне кластера Kubernetes с использованием Stream Load
- Загрузить некоторые публичные наборы данных
- Выполнить запросы к данным
Наборы данных и запросы такие же, как в базовом быстром старте. Основное отличие здесь — развертывание с помощью Helm и Operator для Selena.
Используемые данные предоставлены NYC OpenData и Национальными центрами экологической информации.
Оба этих набора данных большие, и поскольку данное руководство предназначено для знакомства с работой в Selena, мы не будем загружать данные за последние 120 лет. Вы можете запустить это с кластером GKE Kubernetes, построенным на трех машинах e2-standard-4 (или аналогичных) с диском 80GB. Для более крупных развертываний у нас есть другая документация, которую мы предоставим позже.
В этом документе много информации, и она представлена с пошаговым содержанием в начале и техническими деталями в конце. Это сделано для следующих целей в данном порядке:
- Развернуть систему с помощью Helm.
- Позволить читателю загрузить данные в Selena и проанализировать эти данные.
- Объяснить основы преобразования данных во время загрузки.
Предварительные требования
Среда Kubernetes
Среда Kubernetes, используемая при написании этого руководства, состоит из трех узлов с четырьмя vCPU и 16 ГБ оперативной памяти каждый (машины GCP e2-standard-4). Клас тер Kubernetes был развернут с помощью этой команды gcloud:
Эта команда приведена для справки. Если вы используете AWS, Azure или любого другого провайдера Kubernetes, вам потребуется изменить ее для вашей среды. В Google Cloud вам нужно будет указать свой собственный проект и подходящее местоположение.
gcloud container --project enterprise-demo-422514 \
clusters create ee-docs \
--location=southamerica-west1-b \
--machine-type e2-standard-4 --disk-size 80 --num-nodes 3
Helm
Helm — это менеджер пакетов для Kubernetes, который упрощает развертывание и управление приложениями. В этой лабораторной работе вы будете использовать Helm для развертывания оператора CelerData Enterprise Edition Kubernetes и примера кластера Selena.
SQL-клиент
Вы можете использовать SQL-клиент, предоставленный в среде Kubernetes, или использовать клиент в вашей с истеме. Данное руководство использует mysql CLI. Многие MySQL-совместимые клиенты будут работать.
curl
curl используется для отправки задания загрузки данных в Selena и для скачивания наборов данных. Проверьте, установлен ли он, выполнив curl или curl.exe в командной строке вашей ОС. Если curl не установлен, получите curl здесь.
Терминология
FE
Frontend-узлы отвечают за управление метаданными, управление подключениями клиентов, планирование запросов и планирование выполнения запросов. Каждый FE хранит и поддерживает полную копию метаданных в своей памяти, что гарантирует беспристрастное обслуживание среди FE.
BE
Backend-узлы отвечают как за хранение данных, так и за выполнение планов запросов.
Добавление репозитория Helm chart для Selena
Helm Chart содержит определения Operator для Selena и пользовательского ресурса StarRocksCluster.
-
Добавьте репозиторий Helm Chart.
helm repo add starrocks https://starrocks.github.io/starrocks-kubernetes-operator -
Обновите репозиторий Helm Chart до последней версии.
helm repo update -
Просмотрите добавленный репозиторий Helm Chart.
helm search repo starrocksNAME CHART VERSION APP VERSION DESCRIPTION
starrocks/kube-starrocks 1.9.7 3.2-latest kube-starrocks includes two subcharts, operator...
starrocks/operator 1.9.7 1.9.7 A Helm chart for StarRocks operator
starrocks/starrocks 1.9.7 3.2-latest A Helm chart for StarRocks cluster
starrocks/warehouse 1.9.7 3.2-latest Warehouse is currently a feature of the StarRoc...
Скачивание данных
Скачайте эти два набора данных на вашу машину.
Данные о ДТП в Нью-Йорке
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/NYPD_Crash_Data.csv
Данные о погоде
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/72505394728.csv
Создание файла значений Helm
Цели для данного быстрого старта:
- Настроить пароль для пользователя базы данных Selena
root - Обеспечить высокую доступность с тремя FE и тремя BE
- Хранить метаданные в постоянном хранилище
- Хранить данные в постоянном хранилище
- Разрешить подключение MySQL-клиентов извне кластера Kubernetes
- Разрешить загрузку данных извне кластера Kubernetes с использованием Stream Load
Helm chart предоставляет опции для удовлетворения всех этих целей, но они не настроены по умолчанию. Остальная часть этого раздела покрывает конфигу рацию, необходимую для достижения всех этих целей. Будет предоставлена полная спецификация значений, но сначала прочитайте детали для каждого из шести разделов, а затем скопируйте полную спецификацию.
1. Пароль для пользователя базы данных
Этот фрагмент YAML инструктирует Operator для Selena установить пароль для пользователя базы данных root в значение ключа password из Kubernetes secret starrocks-root-pass.
starrocks:
initPassword:
enabled: true
# Set a password secret, for example:
# kubectl create secret generic starrocks-root-pass --from-literal=password='g()()dpa$$word'
passwordSecret: starrocks-root-pass
-
Задача: Создать Kubernetes secret
kubectl create secret generic starrocks-root-pass --from-literal=password='g()()dpa$$word'
2. Высокая доступность с 3 FE и 3 BE
Установив starrocks.starrockFESpec.replicas в 3, и starrocks.starrockBeSpec.replicas в 3, вы получите достаточно FE и BE для высокой доступности. Установка низких запросов CPU и памяти позволяет создавать поды в небольшой среде Kubernetes.
starrocks:
starrocksFESpec:
replicas: 3
resources:
requests:
cpu: 1
memory: 1Gi
starrocksBeSpec:
replicas: 3
resources:
requests:
cpu: 1
memory: 2Gi
3. Хранение метаданных в постоянном хранилище
Установка значения для starrocks.starrocksFESpec.storageSpec.name в любое значение, отличное от "", приводит к:
- Использованию постоянного хранилища
- Использованию значения
starrocks.starrocksFESpec.storageSpec.nameв качестве префикса для всех томов хранения для сервиса.
Установив значение в fe, эти PV будут созданы для FE 0:
fe-meta-kube-starrocks-fe-0fe-log-kube-starrocks-fe-0
starrocks:
starrocksFESpec:
storageSpec:
name: fe
4. Хранение данных в постоянном хранилище
Установка значения для starrocks.starrocksBeSpec.storageSpec.name в любое значение, отличное от "", приводит к:
- Использованию постоянного хранилища
- Использованию значения
starrocks.starrocksBeSpec.storageSpec.nameв качестве префикса для всех томов хранения для сервиса.
Установив значение в be, эти PV будут созданы для BE 0:
be-data-kube-starrocks-be-0be-log-kube-starrocks-be-0
Установка storageSize в 15Gi уменьшает хранилище с значения по умолчанию 1Ti для соответствия меньшим квотам хранения.
starrocks:
starrocksBeSpec:
storageSpec:
name: be
storageSize: 15Gi
5. LoadBalancer для MySQL-клиентов
По умолчанию доступ к сервису FE осуществляется через cluster IP. Для разрешения внешнего доступа service.type устанавливается в LoadBalancer
starrocks:
starrocksFESpec:
service:
type: LoadBalancer
6. LoadBalancer для внешней загрузки данных
Stream Load требует внешнего доступа как к FE, так и к BE. Запросы отправляются в FE, а затем FE назначает BE для обработки загрузки. Чтобы позволить команде curl быть перенаправленной к BE, необходимо включить starroclFeProxySpec и установить тип LoadBalancer.
starrocks:
starrocksFeProxySpec:
enabled: true
service:
type: LoadBalancer
Полный файл значений
Приведенные выше фрагменты в совокупности предоставляют полный файл значений. Сохраните это в my-values.yaml:
starrocks:
initPassword:
enabled: true
# Set a password secret, for example:
# kubectl create secret generic starrocks-root-pass --from-literal=password='g()()dpa$$word'
passwordSecret: starrocks-root-pass
starrocksFESpec:
replicas: 3
service:
type: LoadBalancer
resources:
requests:
cpu: 1
memory: 1Gi
storageSpec:
name: fe
starrocksBeSpec:
replicas: 3
resources:
requests:
cpu: 1
memory: 2Gi
storageSpec:
name: be
storageSize: 15Gi
starrocksFeProxySpec:
enabled: true
service:
type: LoadBalancer
Установка пароля для пользователя root базы данных Selena
Для загрузки данных извне кластера Kubernetes база данных Selena будет доступна извне. Вам следует установить пароль для пользователя базы данных Selena root. Operator применит пароль к узлам FE и BE.
kubectl create secret generic starrocks-root-pass --from-literal=password='g()()dpa$$word'
secret/starrocks-root-pass created
Развертывание operator и кластера Selena
helm install -f my-values.yaml starrocks starrocks/kube-starrocks
NAME: starrocks
LAST DEPLOYED: Wed Jun 26 20:25:09 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing kube-starrocks-1.9.7 kube-starrocks chart.
It will install both operator and starrocks cluster, please wait for a few minutes for the cluster to be ready.
Please see the values.yaml for more operation information: https://github.com/StarRocks/starrocks-kubernetes-operator/blob/main/helm-charts/charts/kube-starrocks/values.yaml
Проверка статуса кластера Selena
Вы можете проверить прогресс с помощью этих команд:
kubectl --namespace default get starrockscluster -l "cluster=kube-starrocks"
NAME PHASE FESTATUS BESTATUS CNSTATUS FEPROXYSTATUS
kube-starrocks reconciling reconciling reconciling reconciling
kubectl get pods
Pod kube-starrocks-initpwd пройдет через состояния error и CrashLoopBackOff, поскольку он пытается подключиться к подам FE и BE для установки пароля root Selena. Вам следует игнорировать эти ошибки и ждать статуса Completed для этого пода.
NAME READY STATUS RESTARTS AGE
kube-starrocks-be-0 0/1 Running 0 20s
kube-starrocks-be-1 0/1 Running 0 20s
kube-starrocks-be-2 0/1 Running 0 20s
kube-starrocks-fe-0 1/1 Running 0 66s
kube-starrocks-fe-1 0/1 Running 0 65s
kube-starrocks-fe-2 0/1 Running 0 66s
kube-starrocks-fe-proxy-56f8998799-d4qmt 1/1 Running 0 20s
kube-starrocks-initpwd-m84br 0/1 CrashLoopBackOff 3 (50s ago) 92s
kube-starrocks-operator-54ffcf8c5c-xsjc8 1/1 Running 0 92s
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
be-data-kube-starrocks-be-0 Bound pvc-4ae0c9d8-7f9a-4147-ad74-b22569165448 15Gi RWO standard-rwo <unset> 82s
be-data-kube-starrocks-be-1 Bound pvc-28b4dbd1-0c8f-4b06-87e8-edec616cabbc 15Gi RWO standard-rwo <unset> 82s
be-data-kube-starrocks-be-2 Bound pvc-c7232ea6-d3d9-42f1-bfc1-024205a17656 15Gi RWO standard-rwo <unset> 82s
be-log-kube-starrocks-be-0 Bound pvc-6193c43d-c74f-4d12-afcc-c41ace3d5408 1Gi RWO standard-rwo <unset> 82s
be-log-kube-starrocks-be-1 Bound pvc-c01f124a-014a-439a-99a6-6afe95215bf0 1Gi RWO standard-rwo <unset> 82s
be-log-kube-starrocks-be-2 Bound pvc-136df15f-4d2e-43bc-a1c0-17227ce3fe6b 1Gi RWO standard-rwo <unset> 82s
fe-log-kube-starrocks-fe-0 Bound pvc-7eac524e-d286-4760-b21c-d9b6261d976f 5Gi RWO standard-rwo <unset> 2m23s
fe-log-kube-starrocks-fe-1 Bound pvc-38076b78-71e8-4659-b8e7-6751bec663f6 5Gi RWO standard-rwo <unset> 2m23s
fe-log-kube-starrocks-fe-2 Bound pvc-4ccfee60-02b7-40ba-a22e-861ea29dac74 5Gi RWO standard-rwo <unset> 2m23s
fe-meta-kube-starrocks-fe-0 Bound pvc-5130c9ff-b797-4f79-a1d2-4214af860d70 10Gi RWO standard-rwo <unset> 2m23s
fe-meta-kube-starrocks-fe-1 Bound pvc-13545330-63be-42cf-b1ca-3ed6f96a8c98 10Gi RWO standard-rwo <unset> 2m23s
fe-meta-kube-starrocks-fe-2 Bound pvc-609cadd4-c7b7-4cf9-84b0-a75678bb3c4d 10Gi RWO standard-rwo <unset> 2m23s
Проверка работоспособности кластера
Это те же команды, что и выше, но показывают желаемое состояние.
kubectl --namespace default get starrockscluster -l "cluster=kube-starrocks"
NAME PHASE FESTATUS BESTATUS CNSTATUS FEPROXYSTATUS
kube-starrocks running running running running
kubectl get pods
Система готова, когда все поды, кроме kube-starrocks-initpwd, показывают 1/1 в колонке READY. Pod kube-starrocks-initpwd должен показывать 0/1 и STATUS Completed.
NAME READY STATUS RESTARTS AGE
kube-starrocks-be-0 1/1 Running 0 57s
kube-starrocks-be-1 1/1 Running 0 57s
kube-starrocks-be-2 1/1 Running 0 57s
kube-starrocks-fe-0 1/1 Running 0 103s
kube-starrocks-fe-1 1/1 Running 0 102s
kube-starrocks-fe-2 1/1 Running 0 103s
kube-starrocks-fe-proxy-56f8998799-d4qmt 1/1 Running 0 57s
kube-starrocks-initpwd-m84br 0/1 Completed 4 2m9s
kube-starrocks-operator-54ffcf8c5c-xsjc8 1/1 Running 0 2m9s
Адреса EXTERNAL-IP в выделенных строках будут использоваться для предоставления доступа SQL-клиентов и Stream Load извне кластера Kubernetes.
kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-starrocks-be-search ClusterIP None <none> 9050/TCP 78s
kube-starrocks-be-service ClusterIP 34.118.228.231 <none> 9060/TCP,8040/TCP,9050/TCP,8060/TCP 78s
kube-starrocks-fe-proxy-service LoadBalancer 34.118.230.176 34.176.12.205 8080:30241/TCP 78s
kube-starrocks-fe-search ClusterIP None <none> 9030/TCP 2m4s
kube-starrocks-fe-service LoadBalancer 34.118.226.82 34.176.215.97 8030:30620/TCP,9020:32461/TCP,9030:32749/TCP,9010:30911/TCP 2m4s
kubernetes ClusterIP 34.118.224.1 <none> 443/TCP 8h
Сохраните адреса EXTERNAL-IP из выделенных строк в переменные окружения, чтобы они были под рукой:
export MYSQL_IP=`kubectl get services kube-starrocks-fe-service --output jsonpath='{.status.loadBalancer.ingress[0].ip}'`
export FE_PROXY=`kubectl get services kube-starrocks-fe-proxy-service --output jsonpath='{.status.loadBalancer.ingress[0].ip}'`:8080
Подключение к Selena с помощью SQL-клиента
Если вы используете клиент, отличный от mysql CLI, откройте его сейчас.
Эта команда запустит команду mysql в поде Kubernetes:
kubectl exec --stdin --tty kube-starrocks-fe-0 -- \
mysql -P9030 -h127.0.0.1 -u root --prompt="StarRocks > "
Если у вас установлен mysql CLI локально, вы можете использовать его вместо того, что в кластере Kubernetes:
mysql -P9030 -h $MYSQL_IP -u root --prompt="StarRocks > " -p
Создание таблиц
mysql -P9030 -h $MYSQL_IP -u root --prompt="StarRocks > " -p
Создание базы данных
Введите эти две строки в командной строке Selena > и нажмите Enter после каждой:
CREATE DATABASE IF NOT EXISTS quickstart;
USE quickstart;
Создание двух таблиц
Crashdata
Набор данных о ДТП содержит гораздо больше полей, чем представлено здесь. Схема была сокращена и включает только те поля, которые могут быть полезны для ответа на вопросы о влиянии погоды на условия вождения.
CREATE TABLE IF NOT EXISTS crashdata (
CRASH_DATE DATETIME,
BOROUGH STRING,
ZIP_CODE STRING,
LATITUDE INT,
LONGITUDE INT,
LOCATION STRING,
ON_STREET_NAME STRING,
CROSS_STREET_NAME STRING,
OFF_STREET_NAME STRING,
CONTRIBUTING_FACTOR_VEHICLE_1 STRING,
CONTRIBUTING_FACTOR_VEHICLE_2 STRING,
COLLISION_ID INT,
VEHICLE_TYPE_CODE_1 STRING,
VEHICLE_TYPE_CODE_2 STRING
);