Files
tf_provider/generated/dev/resources_yaml/120_clickhouse.yaml
T
“Naeel” dd56bcda83 refactor: restructure project — separate tools, config, generated, provider
TOOLS/        — generators + scripts + config + ARCHITECTURE.md
  ├── yaml-generator/    (code)
  ├── resource-generator/ (code)
  ├── docs-generator/    (code)
  ├── scripts/           (← devops/*.sh)
  ├── config/            (← devops/profiles/ + devops/config/)
  │   ├── test/          profile.env, services_list.txt, operation_timeouts.json
  │   ├── prod/
  │   └── dev/
  └── ARCHITECTURE.md    (← devops/ARCHITECTURE.md)

generated/    — pipeline output only (gitignored)
  ├── test/resources_yaml/, go/, docs/, provider_build/
  ├── prod/
  └── dev/

provider/     — code only, no generated files
  resources_yaml/        — DELETED (generated)
  internal/resources_gen/ — DELETED (generated)

devops/       — removed (replaced by TOOLS/scripts + TOOLS/config + generated/)

Generators now fail if NUBES_*_DIR not set (no defaults to provider/).
Provider requires pipeline to populate resources_gen/ before build.
2026-07-06 09:06:09 +04:00

418 lines
22 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: clickhouse
service_id: 120
service_display_name: ClickHouse
service_short_name: clickhouse
service_man: '# Инструкция по управлению кластерами и пользователями ClickHouse<br/><br/>---<br/><br/>## Общая информация<br/><br/>ClickHouse — это колоночная система управления базами данных, предназначенная для обработки аналитических запросов в реальном времени. Платформа позволяет создавать, удалять, приостанавливать и возобновлять кластеры ClickHouse, а также управлять базами данных и пользователями.<br/><br/>Кластер создаётся через оператор Altinity (`https://github.com/Altinity/clickhouse-operator`) в ресурсной платформе типа `k8s`<br/><br/>Кластеры могут создаваться шардированными с произвольным количеством реплик. Для обеспечения отказоустойчивости и координации обязательно включение параметра `Создать ClickHouse-Keeper`.<br/><br/>Кластера создаются с обязательным бекапом. Для этого необходимо предварительно создать услугу `S3 Object Storage`.<br/>---<br/><br/>## Доступные операции<br/><br/>* **create** — Создание кластера<br/>* **delete** — Удаление кластера<br/>* **suspend** — Приостановка работы кластера<br/>* **resume** — Возобновление работы кластера<br/>* **create_database** — Создание базы данных<br/>* **delete_database** — Удаление базы данных<br/>* **create_user** — Создание пользователя и настройка прав доступа к базе данных<br/>* **delete_user** — Удаление пользователя<br/><br/>## Процесс создания и первого подключения<br/><br/>1. Выполнить операцию `create` - будет создан кластер<br/>2. Выполнить операцию `create_database` - будет создана база данных<br/>3. Выполнить операцию `create_user` - будет создан пользователь (выбрать доступ подключения к БД, созданной в п.2)<br/><br/>## Примеры подключения<br/><br/>### Подключение через HTTP-интерфейс<br/><br/>```bash<br/># Проверка доступности кластера<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SELECT 1&quot;<br/><br/># Выполнение запроса<br/>curl &quot;http://&lt;username&gt;:&lt;password&gt;@&lt;host&gt;:8123/&quot; -d &quot;SHOW DATABASES&quot;<br/>```<br/><br/>## Простые кейсы<br/>*Создать БД и обычной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.table<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>INSERT INTO database.table SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM database.table;<br/>```<br/>Базы и таблицы не реплицируются без специального ключа (`ON CLUSTER ''clickhousek8s''`)<br/>В случае создания в стиле, описанным выше, необходимо будет выполнять действия на всех шардах/репликах<br/><br/><br/>*Создание БД и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE database.localUsers<br/>(<br/> id UInt64,<br/> value String<br/>)<br/>ENGINE = MergeTree()<br/>ORDER BY id;<br/><br/>CREATE TABLE database.shardedTable<br/>AS localUsers<br/>ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', id);<br/><br/>INSERT INTO shardedTable SELECT number, toString(number) FROM numbers(10000000);<br/><br/>SELECT count() FROM shardedTable;<br/>```<br/>Важный момент - в данном примере таблицы придётся также выполнять на всех нодах ClickHouse<br/><br/>*Создание реплицируемой и шардированной таблицы*<br/>```clickhouse<br/>CREATE TABLE IF NOT EXISTS database.localUsers ON cluster ''clickhousek8s''<br/>(<br/> user_id UInt64,<br/> name String,<br/> email String<br/>)<br/>ENGINE = ReplicatedMergeTree(<br/> ''/clickhouse/tables/{shard}/localUsers'',<br/> ''{replica}''<br/>)<br/>ORDER BY user_id;<br/><br/>CREATE TABLE IF NOT EXISTS database.users ON cluster ''clickhousek8s''<br/>AS database.localUsers<br/>ENGINE = Distributed(''clickhousek8s'', ''database'', ''localUsers'', rand());<br/><br/>INSERT INTO database.users VALUES (1, ''Alice'', ''alice@example.com'');<br/>INSERT INTO database.users VALUES (2, ''Bob'', ''bob@example.com'');<br/>INSERT INTO database.users VALUES (3, ''Charlie'', ''charlie@example.com'');<br/>INSERT INTO database.users VALUES (4, ''David'', ''david@example.com'');<br/>INSERT INTO database.users VALUES (5, ''Gosha'', ''gosha@example.com'');<br/>INSERT INTO database.users VALUES (6, ''Eve'', ''eve@example.com'');<br/>INSERT INTO database.users VALUES (7, ''Frank'', ''frank@example.com'');<br/>INSERT INTO database.users VALUES (8, ''Grace'', ''grace@example.com'');<br/>INSERT INTO database.users VALUES (9, ''Hannah'', ''hannah@example.com'');<br/>INSERT INTO database.users VALUES (10, ''Ivan'', ''ivan@example.com'');<br/><br/>SELECT * FROM database.localUsers;<br/>SELECT * FROM database.users;<br/><br/>SELECT COUNT(*) AS total_users FROM database.users;<br/>SELECT COUNT(*) AS total_users_local FROM database.localUsers;<br/>```'
lifecycle:
suspend_on_destroy_default: true
adopt_existing_on_create_default: false
outputs:
params:
- code: state_params
type: map
- code: state_out
type: map
- code: state_params_flat
type: map
- code: state_out_flat
type: map
- code: vault_secrets
type: map
sensitive: true
- code: vault_url
type: string
- code: vault_user_path
type: string
- code: vault_fields
type: list
operations:
- name: create
id: 181
kind: instance
action: create
man: Операция создания кластера ClickHouse<br/><br/>Для подключения к кластеру также необходимо создать базу данных через операцию `create_database` и создание пользователя через операцию `create_user`
params:
- id: 572
code: resourceRealm
data_type: string
required: true
func: getAvailableResourceRealms
descr: Кластер Kubernetes в котором будет развёрнуто приложение
man: Выбрать платформу из списка<br/><br/>**Если список не отображается**<br/>обратитесь к сервис менеджеру с вопросом предоставления ресурсной платформы
sort: 10
- id: 573
code: s3Uid
data_type: uuid
required: true
ref_svc_id: 12
descr: Экземпляр (учетная запись) S3 для резервного копирования. Резервное копирование обязательно
man: '**Если список не отображается** <br/>перейдите в раздел `S3 Object Storage` <br/>операция `create`'
sort: 20
- id: 574
code: resourceInstances
data_type: integer &gt; 0
required: true
default: "1"
maxvalue: 7
minvalue: 1
descr: 'Пример: `3`'
man: '**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`'
sort: 30
is_modifiable: true
- id: 575
code: resourceInstancesShards
data_type: integer &gt; 0
required: true
default: "1"
maxvalue: 7
minvalue: 1
descr: 'Пример: `1`'
man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда'
sort: 40
is_modifiable: true
- id: 576
code: resourceCPU
data_type: integer &gt; 0
required: true
default: "1000"
maxvalue: 8000
minvalue: 1000
descr: 'Пример: `1000`'
man: Указывается в Milicores<br/>`1000` Mili == `1` Ядро
sort: 50
is_modifiable: true
- id: 577
code: resourceMemory
data_type: integer &gt; 0
required: true
default: "1536"
maxvalue: 8192
minvalue: 1536
descr: 'Пример: `2048`'
man: Указывается в Megabytes
sort: 60
is_modifiable: true
- id: 578
code: appVersion
data_type: string
required: true
default: "25.10"
value_list:
- "25.10"
descr: Версия `clickhouse-server`
sort: 70
is_modifiable: true
- id: 579
code: resourceDisk
data_type: integer &gt; 0
required: true
default: "10"
maxvalue: 999
minvalue: 1
descr: 'Пример: `100`'
man: Указывается в Gigabytes
sort: 80
is_modifiable: true
- id: 580
code: needExternalAddressMaster
data_type: boolean
required: true
default: "false"
value_list:
- "false"
- "true"
descr: Позволяет подключиться извне к ClickHouse
man: Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы
sort: 90
is_modifiable: true
- id: 581
code: ipSpaceNameMaster
data_type: string
required: false
descr: 'Пример: `internet-no-antiddos-v1`'
man: Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`
sort: 100
is_modifiable: true
- id: 582
code: needCreateKeeper
data_type: boolean
required: true
default: "true"
value_list:
- "false"
- "true"
descr: Необходим для кластеризации ClickHouse
man: Аналог `Zookeeper`, представленный от ClickHouse
sort: 200
is_modifiable: true
- id: 583
code: resourceCPUKeeper
data_type: integer &gt; 0
required: true
default: "50"
maxvalue: 8000
minvalue: 50
descr: 'Пример: `100`'
man: Указывается в Milicores<br/>`1000` Mili == `1` Ядро
sort: 210
is_modifiable: true
- id: 584
code: resourceMemoryKeeper
data_type: integer &gt; 0
required: true
default: "152"
maxvalue: 8192
minvalue: 152
descr: 'Пример: `256`'
man: Указывается в Megabytes
sort: 220
is_modifiable: true
- id: 585
code: resourceInstancesKeeper
data_type: integer &gt; 0
required: true
default: "1"
value_list:
- "1"
- "3"
maxvalue: 3
minvalue: 1
descr: 'Пример: `1`'
man: Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды
sort: 230
is_modifiable: true
- id: 586
code: ext_BACKUP_SCHEDULE
data_type: string
required: true
default: 0 0 * * *
regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
descr: Принимает формат `CRON`
sort: 500
is_modifiable: true
- id: 587
code: ext_BACKUP_NUM_TO_RETAIN
data_type: integer &gt; 0
required: true
default: "7"
maxvalue: 60
minvalue: 3
descr: 'Пример: `7`'
man: Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**
sort: 510
is_modifiable: true
- name: create_database
id: 186
kind: subresource
action: create
subresource: database
man: База данных создаётся на всех репликах кластера ClickHouse
params:
- id: 600
code: databaseName
data_type: string
required: true
regex: ^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
descr: 'Пример: `db01`'
sort: 10
- name: create_user
id: 185
kind: subresource
action: create
subresource: user
params:
- id: 596
code: username
data_type: string
required: true
regex: ^(?![0-9_])[a-zA-Z_][a-zA-Z0-9_]{0,62}$
maxlength: 62
minlength: 2
descr: 'Пример: `myusername`'
sort: 10
- id: 598
code: databaseName
data_type: json
required: true
default: '["database"]'
descr: Необходимо указать массив существующих баз
man: Если базы не существует - при выполнении операции вернётся ошибка
sort: 30
- id: 599
code: accessHosts
data_type: string
required: true
default: ::/0
descr: 'Пример: `::/0`'
sort: 40
- name: delete
id: 184
kind: instance
action: delete
man: Удаление возможно только после остановки сервиса через операцию `suspend`<br/>После выполнения операции необходимо выждать определенное кол-во времени
params: []
- name: delete_database
id: 188
kind: subresource
action: delete
subresource: database
man: Необратимое действие!!!<br/>Трижды подумай, заблокируй телефон тимлида и не выполняй это действие
params:
- id: 602
code: databaseName
data_type: string
required: true
descr: ВСЕ ДАННЫЕ ВНУТРИ БД БУДУТ УДАЛЕНЫ
- name: delete_user
id: 187
kind: subresource
action: delete
subresource: user
params:
- id: 601
code: username
required: true
descr: Имя пользователя, созданное через операцию `create_user`
- name: modify
id: 189
kind: instance
action: modify
params:
- id: 603
code: resourceInstances
data_type: integer &gt; 0
required: true
maxvalue: 7
minvalue: 1
descr: 'Пример: `3`'
man: '**Для синхронизации данных между репликами** необходимо включить `Создать ClickHouse-Keeper`'
sort: 10
- id: 604
code: resourceInstancesShards
data_type: integer &gt; 0
required: true
maxvalue: 7
minvalue: 1
descr: 'Пример: `1`'
man: '**Шард** - это часть данных, разделенная на разные узлы (серверы) для горизонтального масштабирования и обработки больших объемов информации. <br/>**Реплика** - это точная копия данных внутри одного шарда'
sort: 20
- id: 605
code: resourceCPU
data_type: integer &gt; 0
required: true
maxvalue: 8000
minvalue: 1000
descr: 'Пример: `1000`'
man: Указывается в Milicores<br/>`1000` Mili == `1` Ядро
sort: 30
- id: 606
code: resourceMemory
data_type: integer &gt; 0
required: true
maxvalue: 8192
minvalue: 1536
descr: 'Пример: `2048`'
man: Указывается в Megabytes
sort: 40
- id: 607
code: appVersion
data_type: string
required: true
default: "25.10"
descr: Версия `clickhouse-server`
sort: 50
- id: 608
code: resourceDisk
data_type: integer &gt; 0
required: true
maxvalue: 999
minvalue: 1
descr: 'Пример: `100`'
man: Указывается в Gigabytes<br/>**Нельзя** выставлять меньше текущего значения
sort: 60
- id: 609
code: needExternalAddressMaster
data_type: boolean
required: true
value_list:
- "false"
- "true"
descr: Позволяет подключиться извне к ClickHouse
man: Для выделения IP также необходимо указать имя Ip-space.<br/>Его можно получить из свойств ресурсной платформы
sort: 70
- id: 610
code: ipSpaceNameMaster
data_type: string
required: true
descr: 'Пример: `internet-no-antiddos-v1`'
man: Имя ipSpace для публикации внешнего адреса<br/><br/>Не может быть пустым, если включен `Выделение белого ip для master ноды`
sort: 80
- id: 611
code: needCreateKeeper
data_type: boolean
required: true
value_list:
- "false"
- "true"
descr: Необходим для кластеризации ClickHouse
man: Аналог `Zookeeper`, представленный от ClickHouse
sort: 200
- id: 612
code: resourceCPUKeeper
data_type: integer &gt; 0
required: true
maxvalue: 8000
minvalue: 50
descr: 'Пример: `100`'
man: Указывается в Milicores<br/>`1000` Mili == `1` Ядро
sort: 210
- id: 613
code: resourceMemoryKeeper
data_type: integer &gt; 0
required: true
maxvalue: 8192
minvalue: 152
descr: 'Пример: `256`'
man: Указывается в Megabytes
sort: 220
- id: 614
code: resourceInstancesKeeper
data_type: integer &gt; 0
required: true
value_list:
- "1"
- "3"
maxvalue: 3
minvalue: 1
descr: 'Пример: `1`'
man: Для **теста** - 1 нода. <br/>Для **продуктива** - 3 ноды
sort: 230
- id: 615
code: ext_BACKUP_SCHEDULE
data_type: string
required: true
default: 0 0 * * *
regex: ^((((\d+,)+\d+|(\d+(\/|-|#)\d+)|(\d+L?)|(\*(\/\d+)?)|(L(-\d+)?)|(\?)|([A-Z]{3}(-[A-Z]{3})?)) ?){5,7})|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)$
descr: Принимает формат `CRON`
sort: 500
- id: 616
code: ext_BACKUP_NUM_TO_RETAIN
data_type: integer &gt; 0
required: true
maxvalue: 60
minvalue: 3
descr: 'Пример: `7`'
man: Кол-во **полных** резервных копий<br/>Кол-во инкрементов - неограничено<br/><br/>Полная резервная копия выполняется раз в неделю<br/>*Если изначально полной резервной копии нет* выполняется полный бекап<br/>В остальные дни по крону выполняются **инкременты**
sort: 510
- name: resume
id: 183
kind: instance
action: resume
params: []
- name: suspend
id: 182
kind: instance
action: suspend
man: Операция приводит к удалению всех подов<br/>Persistent Volume остаются нетронутыми
params: []