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

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

Мы рекомендуем создать отказоустойчивый управляющий кластер, в котором будут следующие наборы узлов (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.

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

Если вы используете свою СУБД PostgreSQL, то подготовьте параметры подключения к базе данных. Особых требований к БД нет.

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

СУБД PostgreSQL может быть развернута в кластере с помощью оператора PostgreSQL, который можно установить в кластере, включив модуль operator-postgres. В этом случае необходимо в начале включить модуль operator-postgres и проследить, что CRD из этого модуля появились в кластере. После этого можно включить Deckhouse Commander.

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

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

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

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

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

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

kubectl -n d8-system exec svc/deckhouse-leader -c deckhouse -- deckhouse-controller queue main

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

kubectl 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: "..."       # Обязательное поле

Если используете модуль 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:
    nodeSelector:
      node.deckhouse.io/group: commander
    postgres:
      mode: Internal
      internal:
        storageClass: my-storage-class   # необязательное поле