Системные требования
Чтобы начать пользоваться 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 # необязательное поле