Deckhouse Development Portal (DDP, портал) устанавливается модулем development-platform в кластере Deckhouse Platform. Перед установкой проверьте требования к вычислительным ресурсам.
Для демо рекомендуется установка с managed-экземплярами, для production — с внешними экземплярами. Внутренние экземпляры доступны как отдельный вариант установки.
Режим managed, external или internal задаётся для PostgreSQL, Redis и ClickHouse отдельно: режимы можно сочетать.
Параметры postgres.mode, redis.mode и clickhouse.mode обязательны и не имеют значения по умолчанию. Без них установка и обновление модуля завершаются ошибкой проверки настроек.
ClickHouse хранит исторические данные портала. Чтобы работать без функциональности, которой нужен ClickHouse, явно укажите clickhouse.mode: external и оставьте clickhouse.host пустым, как описано ниже.
Установка с managed-экземплярами
В режиме managed модуль создаёт экземпляры PostgreSQL, Valkey (совместим с Redis) и ClickHouse. До установки DDP в кластере должны быть включены соответствующие модули Deckhouse для каждого сервиса, у которого выбран mode: managed:
| Параметр DDP | Модуль, который должен быть включён |
|---|---|
postgres.mode: managed | managed-postgres |
redis.mode: managed | managed-valkey |
clickhouse.mode: managed | managed-clickhouse |
Для redis.mode: managed нужен модуль managed-valkey версии 0.1.6 или новее. DDP подключается к Valkey от имени пользователя ddp; пароль модуль генерирует и хранит в Secret redis-credentials в неймспейсе d8-development-platform.
Для демо-конфигурации ниже включите все три модуля с помощью ModuleConfig:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: managed-postgres
spec:
enabled: true
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: managed-valkey
spec:
enabled: true
---
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: managed-clickhouse
spec:
enabled: trueЕсли модуль не включён, портал не установится, а в статусе модуля development-platform появится ошибка с названием модуля, который нужно включить.
Минимальная конфигурация портала для демо-установки:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
postgres:
mode: managed
redis:
mode: managed
clickhouse:
mode: managedВ режиме managed адрес и порт подключения определяются автоматически. Параметры host, port и image для этого режима не используются.
Ресурсы экземпляра задаются в instance.cpu, instance.memory и instance.persistentVolumeClaim. Класс выбирается параметром instance.className, по умолчанию default; он определяет допустимые размеры и размещение экземпляра. Размеры памяти и диска задавайте в формате Kubernetes Quantity, например 512Mi или 20Gi.
Пример настройки ресурсов PostgreSQL:
postgres:
mode: managed
instance:
className: default
cpu:
cores: 2
coreFraction: 50 # Для redis и clickhouse — строка, например "50%".
memory:
size: 2Gi
persistentVolumeClaim:
size: 20Gi
storageClassName: replicated # Необязательно, по умолчанию — StorageClass кластера.Размер диска можно только увеличить, и только если StorageClass поддерживает расширение томов.
Установка с внешними экземплярами
Для production подключите уже развёрнутые PostgreSQL, Redis и ClickHouse в режиме external. Секции независимы: для остальных сервисов можно явно выбрать internal или managed.
Подключение внешнего PostgreSQL
Для использования внешнего экземпляра PostgreSQL необходимо указать параметры подключения в секции postgres:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
postgres:
mode: external
host: postgres.example.com # Имя хоста или IP-адрес сервера PostgreSQL.
port: 5432 # Порт PostgreSQL (по умолчанию 5432).
database: ddp # Название базы данных.
username: ddp_user # Имя пользователя для подключения.
password: secure_password # Пароль для подключения.
redis:
mode: internal
clickhouse:
mode: internalРасширение pg_trgm
Порталу требуется расширение PostgreSQL pg_trgm. Если используется внешний PostgreSQL, включите его до запуска DDP — подключитесь к базе данных под пользователем с правами на создание расширений и выполните:
CREATE EXTENSION IF NOT EXISTS pg_trgm;При установке с внутренними и managed-экземплярами расширение создаётся автоматически.
Подключение внешнего Redis
Для использования внешнего экземпляра Redis необходимо указать параметры подключения в секции redis:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
redis:
mode: external
host: redis.example.com # Имя хоста или IP-адрес сервера Redis.
port: 6379 # Порт Redis (по умолчанию 6379).
database: "0" # Индекс базы данных Redis (по умолчанию "0").
password: redis_password # Пароль для подключения (необязательно; если Redis без пароля — оставить пустым).
postgres:
mode: internal
clickhouse:
mode: internalЕсли Redis использует ACL-пользователей, укажите имя пользователя в параметре redis.username. С пустым значением DDP подключается только по паролю.
Полный пример с внешними экземплярами
Пример конфигурации с подключением к внешним экземплярам PostgreSQL, Redis и ClickHouse:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
postgres:
mode: external
host: postgres.production.example.com
port: 5432
database: ddp
username: ddp_user
password: secure_postgres_password
redis:
mode: external
host: redis.production.example.com
port: 6379
database: "0"
password: secure_redis_password
clickhouse:
mode: external
host: clickhouse.production.example.com
port: 9000
database: ddp
username: ddp_user
password: secure_clickhouse_passwordУстановка с внутренними экземплярами
В режиме internal модуль разворачивает PostgreSQL, Redis и ClickHouse в кластере. Включите development-platform с помощью ModuleConfig, указав суперадминистратора, ключ шифрования и режим каждого сервиса:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io # Email суперадминистратора, который будет иметь полный доступ к конфигурации портала. Может быть изменён в любой момент.
security:
secretKey: "16charssecretkey" # Ключ шифрования: 16, 24 или 32 печатных ASCII-символа. Замените пример своим ключом.
postgres:
mode: internal
redis:
mode: internal
clickhouse:
mode: internalАдрес веб-интерфейса формируется из параметра кластера publicDomainTemplate и параметра модуля domain.prefix, по умолчанию ddp. Например, при publicDomainTemplate: "%s.example.com" веб-интерфейс доступен по адресу https://ddp.example.com. Для другого домена задайте domain.useCustomDomain и domain.customDomain. Все параметры приведены в настройках модуля.
Этот вариант разворачивает сервисы самим модулем, без managed-операторов.
Настройка внутренних экземпляров (опционально)
Чтобы загрузить образы внутренних PostgreSQL, Redis и ClickHouse из приватного хранилища, создайте Secret типа kubernetes.io/dockerconfigjson с учётными данными хранилища в неймспейсе d8-development-platform. Укажите образы в параметрах image, а название Secret в additionalImagePullSecrets:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
postgres:
mode: internal
image: registry.example.com/postgres:16.3 # Образ PostgreSQL из приватного хранилища образов контейнеров.
redis:
mode: internal
image: registry.example.com/redis:7.4.0 # Образ Redis из приватного хранилища образов контейнеров.
clickhouse:
mode: internal
image: registry.example.com/clickhouse/clickhouse-server:24.3
additionalImagePullSecrets:
- "custom-registry-secret" # (опционально) дополнительные секреты для доступа к приватному хранилищу образов контейнеров.ClickHouse
ClickHouse хранит исторические данные, например историю изменений параметров сущностей. Выберите internal для экземпляра в составе модуля, managed для создания через модуль managed-clickhouse или external для подключения существующего сервера. Для промышленной эксплуатации используйте внешний экземпляр.
Внутренний экземпляр ClickHouse
Чтобы развернуть ClickHouse в составе модуля, явно задайте clickhouse.mode: internal. В следующем примере образ загружается из приватного хранилища; предварительно создайте Secret custom-registry-secret с учётными данными хранилища в неймспейсе d8-development-platform. Параметр host в этом режиме не используется:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
clickhouse:
mode: internal
database: ddp # Название базы данных, создаётся при первом запуске сервера.
username: default # Имя пользователя для подключения.
password: clickhouse_password # Пароль, с которым создаётся сервер в кластере.
image: registry.example.com/clickhouse/clickhouse-server:24.3 # (опционально) образ из приватного хранилища образов контейнеров.
postgres:
mode: internal
redis:
mode: internal
additionalImagePullSecrets:
- custom-registry-secretВ этом режиме портал разворачивает один экземпляр ClickHouse с постоянным хранилищем размером 10Gi. База данных создаётся при первом запуске на пустом томе. После восстановления данных из резервной копии или изменения параметра database создайте базу данных вручную, как описано ниже.
Внешний экземпляр ClickHouse
Для использования внешнего экземпляра ClickHouse укажите mode: external и параметры подключения:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: development-platform
spec:
enabled: true
version: 2
settings:
rbac:
superAdminEmail: admin@deckhouse.io
security:
secretKey: "16charssecretkey"
clickhouse:
mode: external
host: clickhouse.example.com # Имя хоста или IP-адрес сервера ClickHouse.
port: 9000 # Порт нативного протокола ClickHouse (по умолчанию 9000).
database: ddp # Название базы данных.
username: ddp_user # Имя пользователя для подключения.
password: secure_password # Пароль для подключения.
postgres:
mode: internal
redis:
mode: internalСоздайте базу данных до подключения внешнего экземпляра: портал применяет миграции схемы, но саму базу данных не создаёт.
Создание базы данных ClickHouse
При mode: managed модуль создаёт базу данных автоматически.
При подключении внешнего экземпляра создайте базу данных до запуска DDP. Замените ddp значением параметра clickhouse.database:
CREATE DATABASE IF NOT EXISTS ddp;При mode: internal база создаётся при первом запуске на пустом томе. Если том уже содержит данные или изменён параметр database, создайте базу вручную. Замените ddp названием базы:
d8 k -n d8-development-platform exec clickhouse-0 -c clickhouse -- \
sh -c 'clickhouse-client --user "$CLICKHOUSE_USER" --password "$CLICKHOUSE_PASSWORD" --query "CREATE DATABASE IF NOT EXISTS ddp"'Работа без ClickHouse
Чтобы портал работал без ClickHouse, укажите mode: external и оставьте параметр host пустым:
clickhouse:
mode: external
host: ""В этом случае возможности, которые зависят от ClickHouse, недоступны: например, не сохраняется история изменений параметров сущностей.
Доставка данных в ClickHouse
Доставку данных из PostgreSQL в ClickHouse и последующую очистку выполняют воркеры портала, поэтому для переноса данных нужен хотя бы один запущенный воркер. Параметры доставки задаются в секции clickhouse.replication, срок хранения истории параметров и периодичность очистки — в секции clickhouse.propertyHistory. Подробнее о воркерах — в разделе «Воркеры».
Смена ключа шифрования
DDP шифрует сохранённые учётные данные ключом из параметра security.secretKey. Если заменить ключ без перешифрования, сохранённые данные станут недоступны.
Чтобы сменить ключ:
- В веб-интерфейсе DDP откройте «Администрирование» → «Учетные данные» и нажмите «Ротация ключа шифрования». Кнопка доступна пользователям с правом
rotate:encryption-key. - Введите текущий ключ в поле «Старый ключ шифрования», новый в поле «Новый ключ шифрования» и нажмите «Перешифровать».
- Проверьте, что в таблице результатов нет записей в столбце «Неуспешно».
- Укажите новый ключ в параметре
security.secretKeyв ModuleConfigdevelopment-platform. Поды DDP перезапустятся автоматически.
Между перешифрованием и перезапуском подов с новым ключом сохранённые учётные данные недоступны. Смена ключа делает текущие пользовательские сеансы недействительными. Подробный порядок и результаты операции описаны в руководстве по ротации ключа шифрования.