Стадия жизненного цикла модуля: Общедоступная версия

У модуля есть требования для установки

На этой странице описаны минимальная конфигурация для запуска Deckhouse Development Portal (DDP) и способы подключения PostgreSQL, Redis и ClickHouse. Перед началом проверьте, что кластер соответствует системным требованиям модуля.

Для демо рекомендуется установка с managed-экземплярами, для production — с внешними экземплярами. Внутренние экземпляры доступны как отдельный вариант установки.

Параметры postgres.mode, redis.mode и clickhouse.mode обязательны и не имеют значения по умолчанию. Без них установка и обновление модуля завершаются ошибкой проверки настроек.

Установка с 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

Для демо-конфигурации ниже включите все три модуля с помощью 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

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

Включение модуля

Чтобы установить DDP, включите модуль development-platform в ModuleConfig. В минимальной конфигурации задаются суперадминистратор, ключ шифрования и режим развёртывания PostgreSQL, Redis и ClickHouse:

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: managed # Режим развёртывания: managed, external или internal. Обязателен для postgres, redis и clickhouse.
    redis:
      mode: managed
    clickhouse:
      mode: managed

Адрес веб-интерфейса формируется из параметра кластера publicDomainTemplate и параметра модуля domain.prefix, по умолчанию ddp. Например, при publicDomainTemplate: "%s.example.com" веб-интерфейс открывается по адресу https://ddp.example.com. Чтобы использовать другой домен, задайте параметры domain.useCustomDomain и domain.customDomain. Все параметры перечислены в разделе настроек модуля.

Настройка ресурсов экземпляров

В режиме 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 поддерживает расширение томов.

Установка с внешними экземплярами

Секции postgres, redis и clickhouse переключают компонент на внешний экземпляр при mode: external. Секции независимы: можно подключить только часть компонентов, а для остальных указать mode: internal или mode: 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.
      database: ddp               # Название базы данных.
      username: ddp_user          # Имя пользователя для подключения.
      password: secure_password   # Пароль для подключения.
    redis:
      mode: internal
    clickhouse:
      mode: internal

Расширение pg_trgm

DDP требуется расширение PostgreSQL pg_trgm. Для PostgreSQL, развёрнутого в кластере, модуль создаёт расширение автоматически. Для внешнего PostgreSQL создайте его до запуска DDP: подключитесь к базе данных от имени пользователя с правом на создание расширений и выполните команду:

CREATE EXTENSION IF NOT EXISTS pg_trgm;

Подключение внешнего 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"
    postgres:
      mode: internal
    redis:
      mode: external
      host: redis.example.com       # Имя хоста или IP-адрес сервера Redis.
      port: 6379                    # Порт Redis.
      database: "0"                 # Индекс базы данных Redis.
      password: redis_password      # Пароль для подключения. Оставьте пустым, если у Redis нет пароля.
    clickhouse:
      mode: internal

Подключение внешнего ClickHouse

В ClickHouse хранятся исторические данные платформы, например история изменений свойств сущностей. Чтобы работать без функциональности, которой нужен ClickHouse, укажите mode: external и оставьте host пустым. Остальная часть платформы работает без изменений.

Чтобы использовать внешний экземпляр ClickHouse, укажите параметры подключения в секции 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: internal
    redis:
      mode: internal
    clickhouse:
      mode: external
      host: clickhouse.example.com  # Имя хоста или IP-адрес сервера ClickHouse.
      port: 9000                    # Порт нативного протокола ClickHouse.
      database: ddp                 # Название базы данных.
      username: ddp_user            # Имя пользователя для подключения.
      password: secure_password     # Пароль для подключения.

Создание базы данных ClickHouse

DDP применяет миграции схемы к базе данных из параметра database, но саму базу данных не создаёт.

При mode: managed модуль создаёт базу данных автоматически.

При mode: external создайте базу данных до запуска DDP:

CREATE DATABASE IF NOT EXISTS ddp;

При mode: internal модуль создаёт базу данных при первом запуске на пустом томе ClickHouse. Если на томе уже есть данные, например после восстановления из резервной копии, или если вы изменили параметр database, создайте базу данных вручную. Замените ddp значением параметра database:

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"'

Полный пример с внешними экземплярами

Пример конфигурации с подключением к внешним экземплярам 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 в кластере. Явно укажите этот режим для каждого сервиса:

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 # Режим развёртывания: internal, external или managed. Обязателен для postgres, redis и clickhouse.
    redis:
      mode: internal
    clickhouse:
      mode: internal

Установка PostgreSQL, Redis и ClickHouse из приватного хранилища образов

При mode: internal модуль разворачивает PostgreSQL, Redis и ClickHouse в кластере из публичных образов. Чтобы загружать образы из приватного хранилища образов контейнеров:

  1. Создайте в неймспейсе d8-development-platform секрет типа kubernetes.io/dockerconfigjson с учётными данными хранилища.

  2. Укажите образы в параметрах image, а имя секрета — в параметре 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
        redis:
          mode: internal
          image: registry.example.com/redis:7.4.0
        clickhouse:
          mode: internal
          image: registry.example.com/clickhouse/clickhouse-server:24.3
        additionalImagePullSecrets:
          - custom-registry-secret

Смена ключа шифрования

DDP шифрует сохранённые учётные данные ключом из параметра security.secretKey. Если заменить ключ в ModuleConfig без перешифрования, DDP не сможет расшифровать сохранённые учётные данные.

Чтобы сменить ключ:

  1. В веб-интерфейсе DDP откройте «Администрирование» → «Учетные данные» и нажмите «Ротация ключа шифрования». Кнопка доступна пользователям с правом на ротацию ключа шифрования.
  2. Введите текущий ключ в поле «Старый ключ шифрования», новый — в поле «Новый ключ шифрования» и нажмите «Перешифровать».
  3. Проверьте, что в таблице результатов нет записей в столбце «Неуспешно».
  4. Укажите новый ключ в параметре security.secretKey в ModuleConfig development-platform. Поды DDP перезапустятся автоматически.

Между перешифрованием и перезапуском подов с новым ключом сохранённые учётные данные недоступны. Смена ключа делает текущие пользовательские сеансы недействительными.