Создать кластер Managed Service for ClickHouse®
Если у вас есть проект, вы можете создать в нем кластер ClickHouse®.
Через CLI
-
Если проект еще не создан, то создайте его:
kubectl create namespace <название проекта>. -
Создайте файл ресурса
ClickhouseCluster. Например, с помощью командыtouch clickhousecluster.yaml. -
Откройте файл и вставьте конфигурацию ниже:
Минимальная конфигурацияКонфигурация с резервным копированием (stackland-storage)Резервное копирование в S3 (type: s3)apiVersion: clickhouse.stackland.yandex.cloud/v1alpha1 kind: ClickhouseCluster metadata: labels: app.kubernetes.io/name: ch-stackland-operator app.kubernetes.io/managed-by: kustomize name: ch-sample-min spec: clickhouse: service: ClusterIP # тип сервиса для всего кластера (None, ClusterIP или LoadBalancer). По умолчанию ClusterIP shards: - id: shard-1 # service: None # тип сервиса для шарда (None, ClusterIP или LoadBalancer). По умолчанию None (не создается) storage: size: 1Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" keeper: storage: size: 1GiВариант с явным указанием типа хранилища
spec.backup.storage.type: stackland-storage— бакет и ключи доступа создаёт оператор. Создайте только секрет суперпользователя. Подставьте при необходимости расписание вspec.backup.schedule(CRON Expression Format ) и заполните секциюspec.backup.retentionдля ограничения количества и времени хранения резервных копий в S3.apiVersion: v1 kind: Secret metadata: name: ch-sample-superuser type: Opaque stringData: password: "your_password" username: "your_username" --- apiVersion: clickhouse.stackland.yandex.cloud/v1alpha1 kind: ClickhouseCluster metadata: labels: app.kubernetes.io/name: ch-stackland-operator app.kubernetes.io/managed-by: kustomize name: ch-sample-full spec: clickhouse: version: "25.3" service: ClusterIP # тип сервиса для всего кластера (None, ClusterIP или LoadBalancer) shards: - id: "shard-1" weight: 1 service: LoadBalancer # тип сервиса для шарда (None, ClusterIP или LoadBalancer) settings: instances: 2 storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" - id: "shard-2" weight: 2 service: None # эндпоинт для этого шарда не создается settings: instances: 1 storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" enableSuperuserAccess: true superuserSecretRef: name: "ch-sample-superuser" keeper: instances: 3 storage: # storageClass: "your-storage-classs" size: 1Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" backup: storage: type: stackland-storage # schedule: "0 0 * * * *" retention: ignoreForManualBackups: true minBackupsToKeep: 5 deleteBackupsAfter: 7dВариант с явным указанием типа хранилища
spec.backup.storage.type: s3— для произвольного S3-совместимого бакета. Создайте секрет с учётными данными доступа к бакету и секрет суперпользователя. Подставьте в пример имя бакета, endpoint и при необходимости расписание вspec.backup.scheduleи заполните секциюspec.backup.retentionдля ограничения количества и времени хранения резервных копий в S3.apiVersion: v1 kind: Secret metadata: name: ch-sample-s3-credentials type: Opaque stringData: accessKey: "your_key" secret: "your_secret" --- apiVersion: v1 kind: Secret metadata: name: ch-sample-superuser type: Opaque stringData: password: "your_password" username: "your_username" --- apiVersion: clickhouse.stackland.yandex.cloud/v1alpha1 kind: ClickhouseCluster metadata: labels: app.kubernetes.io/name: ch-stackland-operator app.kubernetes.io/managed-by: kustomize name: ch-sample-full-s3 spec: clickhouse: version: "25.3" service: ClusterIP # тип сервиса для всего кластера (None, ClusterIP или LoadBalancer) shards: - id: "shard-1" weight: 1 service: LoadBalancer # тип сервиса для шарда (None, ClusterIP или LoadBalancer) settings: instances: 2 storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" - id: "shard-2" weight: 2 service: None # эндпоинт для этого шарда не создается settings: instances: 1 storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" storage: # storageClass: "your-storage-class" size: 2Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" enableSuperuserAccess: true superuserSecretRef: name: "ch-sample-superuser" keeper: instances: 3 storage: # storageClass: "your-storage-class" size: 1Gi resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "1" memory: "2Gi" backup: storage: s3: bucket: on-prem-quantum endpointUrl: "https://storage.yandexcloud.net" backupsToKeepRemote: 14 region: "ru-central1" forcePathStyle: false # storageClass: "STANDARD" credentialsSecretRef: name: ch-sample-s3-credentials accessKeyIdPath: accessKey secretAccessKeyPath: secret # schedule: "0 0 * * * *" deltaMaxSteps: 5 -
Примените манифест:
kubectl apply -f clickhousecluster.yaml -n <название проекта>. При необходимости можно прописать название проекта в параметр ресурсаmetadata.namespaceи не использовать в команде.
Через консоль управления
-
Если вы еще не открыли проект, выберите проект.
-
В левом меню выберите ClickHouse® Clusters.
-
Нажмите Создать.
-
Заполните поля:
Основные параметры
- Имя кластера — название кластера. Только строчные буквы, цифры и дефисы.
- Версия — версия ClickHouse®. Выберите из списка доступных версий.
- Тип сервиса кластера — тип сервиса для доступа ко всему кластеру. Доступные значения:
ClusterIP(доступ только внутри кластера, по умолчанию) илиLoadBalancer(доступ извне).
Хранилище
- Класс хранилища — Storage Class (
stackland-nvme,stackland-ssd,stackland-hdd,stackland-other). Подробнее о Storage Classes см. в разделе Дисковая подсистема. - Размер хранилища — размер диска для хранения данных. После создания размер диска можно только увеличить.
Настройки (раскрывающийся раздел)
Ресурсы
- Запрошенный CPU — гарантированное количество вычислительных ресурсов.
- Запрошенная память — гарантированный объем оперативной памяти.
- Лимит CPU — максимальное количество вычислительных ресурсов.
- Лимит памяти — максимальный объем оперативной памяти.
Шарды
Список шардов кластера. По умолчанию создается один шард
shard-1. Вы можете добавить дополнительные шарды, нажав Добавить шард.Для каждого шарда можно настроить:
- ID шарда — идентификатор шарда.
- Вес шарда — вес шарда для распределения данных.
- Количество реплик — количество реплик в шарде.
- Тип сервиса шарда — тип сервиса для доступа к шарду. Доступные значения:
Не создавать сервис(эндпоинт не создается, по умолчанию),ClusterIP(доступ только внутри кластера) илиLoadBalancer(доступ извне).
Суперпользователь
- Разрешить доступ — переключатель для включения создания суперпользователя.
- Имя — имя суперпользователя для доступа к базе данных.
- Пароль — пароль суперпользователя. Можно сгенерировать автоматически, нажав Сгенерировать.
ClickHouse® Keeper
- Количество инстансов Keeper — количество экземпляров ClickHouse® Keeper для обеспечения отказоустойчивости.
- Класс хоста Keeper — конфигурация ресурсов для инстансов Keeper (хранилище, CPU, память).
Конфигурация резервного копирования
- Включить автоматические бэкапы — переключатель для включения автоматического резервного копирования в S3-бакет.
-
Нажмите Создать.
Готово, кластер появился в списке ClickHouse® Clusters.
Подключение к кластеру
Для подключения к кластеру используйте FQDN хоста в формате <название_кластера>.<название_проекта>.svc.<домен кластера>.
clickhouse-client
Установите клиент:
sudo apt update && sudo apt install --yes clickhouse-client
Подключитесь к кластеру:
clickhouse-client --host <название_кластера>.<название_проекта>.svc.<домен кластера> \
--user <имя_пользователя> \
--database <имя_БД> \
--port 9000 \
--ask-password
HTTP-интерфейс
Выполните запрос через HTTP:
curl --header "X-ClickHouse®-User: <имя_пользователя>" \
--header "X-ClickHouse®-Key: <пароль>" \
'http://<название_кластера>.<название_проекта>.svc.<домен кластера>:8123/?database=<имя_БД>&query=SELECT%20version()'
Примечание
Для первого подключения используйте базу данных clickhouse и имя суперпользователя, указанное при создании кластера.
Получение адресов для подключения
После создания кластера вы можете получить адреса (FQDN) для подключения к кластеру и отдельным шардам.
Получение FQDN через CLI
Выполните команду:
kubectl get clickhousecluster <название_кластера> -n <название_проекта> -o jsonpath='{.status.clusterStatus.fqdns}'
Результат содержит:
cluster.internal— внутренний FQDN для подключения ко всему кластеру из других подов в Kubernetes.cluster.external— внешний FQDN для подключения к кластеру извне (доступен только еслиspec.clickhouse.serviceустановлен вLoadBalancer).shards[].serviceFqdn.internal— внутренний FQDN для подключения к конкретному шарду.shards[].serviceFqdn.external— внешний FQDN для подключения к шарду извне (доступен только еслиspec.clickhouse.shards[].serviceустановлен вLoadBalancer).
Пример результата:
{
"cluster": {
"internal": "ch-sample.my-project.svc.example.com",
"external": "ch-sample.svc.example.com"
},
"shards": [
{
"id": "shard-1",
"serviceFqdn": {
"internal": "ch-sample-shard-1.my-project.svc.example.com",
"external": "ch-sample-shard-1.svc.example.com"
}
}
]
}
Получение FQDN через консоль управления
- Откройте проект.
- В левом меню выберите ClickHouse® Clusters.
- Выберите кластер.
- На вкладке Обзор в разделах Обзор кластера и **Шард <имя шарда> отображаются адреса для подключения.
Примечание
Внутренние FQDN имеют формат <название_ресурса>.<название_проекта>.svc.<домен кластера> и доступны только внутри кластера Kubernetes.
Внешние FQDN создаются автоматически для сервисов типа LoadBalancer и доступны извне кластера. Подробнее о DNS см. в разделе DNS.