Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки

Системные требования

Чтобы начать пользоваться Deckhouse Commander, необходим кластер на базе Deckhouse Kubernetes Platform. Если у вас еще нет кластера, обратитесь к инструкции по установке.

Deckhouse Commander — это модуль Deckhouse Kubernetes Platform, поэтому отдельный кластер под него не нужен. Commander можно включить в любом кластере DKP — как в выделенном под Commander (где рядом обычно работают и другие системные модули платформы), так и в кластере вместе с прикладной нагрузкой. Во втором случае Commander по умолчанию запускается на выделенных под него или на системных узлах, чтобы не конкурировать за ресурсы с пользовательскими приложениями. Подробнее — в разделе Размещение компонентов и сетевое взаимодействие.

Мы рекомендуем создать отказоустойчивый управляющий кластер, в котором будут следующие наборы узлов (NodeGroup):

Группа узлов Кол-во узлов ЦП, ядер Память, Гб Диск, Гб
master 3 4 8 50
system 2 4 8 50
frontend 2 4 8 50
commander 3 8 12 50

Расчет узлов в группе commander основан на минимальных требованиях компонентов Deckhouse Commander:

  • PostgreSQL в режиме HighAvailability в двух репликах требует 1 ядро и 1Гб памяти на 2 отдельных узлах (если используете operator-postgres)
  • Сервер API в режиме HighAvailability в двух репликах требует 1 ядро и 1Гб памяти на 2 отдельных узлах
  • Служебные компоненты для рендеринга конфигурации и подключения к прикладным кластерам, требуют 0.5 ядра и 128 Мб памяти на кластер
  • Менеджер кластеров и сервер dhctl совместно требуют ресурсы в зависимости от количества обслуживаемых кластеров и одновременно обслуживаемых версий DKP
  • До 2 ядер на узле могут быть заняты служебными компонентами DKP (например: runtime-audit-engine, istio, cilium, log-shipper), дополнительно учтен запас памяти.

Системные требования к группе узлов commander, а также к конфигурации самих узлов (ядра ЦП и объем оперативной памяти) варьируются в зависимости от количества кластеров, которые будут обслуживаться в Deckhouse Commander:

Кол-во кластеров ЦП, ядер Память, Гб Кол-во узлов 8/8 Кол-во узлов 8/12
10 9 16 3 (=24/24) 2 (=16/24)
25 10 19 3 (=24/24) 3 (=24/36)
100 15 29 4 (=32/32) 4 (=32/48)

Подготовка СУБД

Deckhouse Commander работает с СУБД PostgreSQL. Для корректной работы Deckhouse Commander необходимы расширения plpgsql и pgcrypto. Поддерживаются версии PostgreSQL 12, 13, 14, 15, 16 и 17.

Вариант 1: выделенная СУБД

Это рекомендуемый способ использования Deckhouse Commander в производственных средах. Для использования Deckhouse Commander необходимо подготовить параметры подключения к БД.

Вариант 2: модуль operator-postgres

Это не рекомендуемый способ для использования в производственных средах. Однако использование operator-postgres удобно для более быстрого знакомства с Deckhouse Commander или для сред, где нет высоких требований к доступности и поддержке.

Модуль Deckhouse Commander важно включить после того, как в кластере появились CRD из модуля operator-postgres.

Модуль operator-postgres использует оператор PostgreSQL. Вы можете использовать собственную инсталляцию postgres-operator версии не ниже v1.10.0.

Шаг 1: включение operator-postgres

Сначала нужно включить модуль оператора postgres и дождаться его включения

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: operator-postgres
spec:
  enabled: true

Шаг 2: завершение установки

Чтобы удостовериться, что модуль включен, дождитесь, когда очередь задач Deckhouse станет пустой:

d8 system queue main

И проверьте наличие необходимых CRD в кластере:

d8 k get crd | grep postgresqls.acid.zalan.do

Включение Deckhouse Commander

Полный перечень параметров конфигурации приведен в разделе Настройка

Если используете свою инсталляцию СУБД PostgreSQL

Чтобы включить Deckhouse Commander, создайте ModuleConfig:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: commander
spec:
  enabled: true
  version: 1
  settings:
    postgres:
      mode: External
      external:
        host: "..."     # Обязательное поле
        port: "..."     # Обязательное поле
        user: "..."     # Обязательное поле
        password: "..." # Обязательное поле
        db: "..."       # Обязательное поле

Также можно хранить учетные данные в секрете и указывать postgres.external.credentials.secretName вместо user и password.

Укажите имя секрета в конфигурации модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: commander
spec:
  enabled: true
  version: 1
  settings:
    postgres:
      mode: External
      external:
        host: "..."   # Обязательное поле
        port: "..."   # Обязательное поле
        db: "..."     # Обязательное поле
        credentials:
          secretName: postgres-secret # Обязательное поле

Затем создайте секрет в неймспейсе d8-commander:

d8 k -n d8-commander create secret generic postgres-secret \
  --from-literal=username=postgres \
  --from-literal=password=postgres

Дождитесь, пока поды в неймспейсе d8-commander запустятся и будут готовы.

Если на сервере PostgreSQL вместо пароля используется аутентификация по сертификату, укажите в значении параметра ssl.secretName имя секрета в неймспейсе d8-commander, который содержит клиентский сертификат.

Пример создания секрета: d8 k -n d8-commander create secret generic postgres-ssl --from-file=tls.crt=client.crt --from-file=tls.key=client.key --from-file=ca.crt=ca.crt

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: commander
spec:
  enabled: true
  version: 1
  settings:
    postgres:
      mode: External
      external:
        host: "..." # Обязательное поле
        port: "..." # Обязательное поле
        user: "..." # Обязательное поле
        db: "..."   # Обязательное поле
        ssl:
          secretName: "postgres-ssl" # Обязательное поле

Если используете модуль operator-postgres

Достаточно включить модуль commander, в режиме подключения к СУБД Internal. Deckhouse Commander самостоятельно настроит БД в операторе PostgreSQL.

Обратите внимание, для БД будет использоваться класс хранилища (StorageClass) по умолчанию. Для Deckhouse Commander класс хранилища можно задать явно:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: commander
spec:
  enabled: true
  version: 1
  settings:
    postgres:
      mode: Internal
      internal:
        storageClass: my-storage-class   # необязательное поле

Первичная настройка прав доступа

Начиная с версии 1.13 управление правами доступа включено по умолчанию и не может быть отключено. Полномочия администратора назначаются в ходе первичной настройки прав доступа.

После установки, когда полномочия администратора ещё не назначены, Deckhouse Commander перенаправляет первого авторизовавшегося пользователя на страницу первичной настройки (/bootstrap). На ней нужно ввести токен первичной настройки — одноразовое значение с ограниченным сроком действия, которое генерируется при развёртывании и хранится в секрете bootstrap-token в неймспейсе d8-commander.

Чтобы прочитать значение токена, выполните:

$ d8 k -n d8-commander get secret bootstrap-token -o jsonpath='{.data.token}' | base64 -d

Введите значение на странице первичной настройки и нажмите «Получить доступ» — права администратора будут выданы немедленно, после чего токен станет недействительным.

Подробное описание процесса, поведение токена и сценарий восстановления утраченного доступа администратора приведены в разделе «Первичная настройка прав доступа».