Deckhouse состоит из оператора Deckhouse и модулей. Модуль — набор helm-чартов, хуков, файлов и правил сборки компонентов модуля (компонентов Deckhouse).

Поведение Deckhouse настраивается с помощью:

Конфигурация Deckhouse

Конфигурация Deckhouse хранится в ConfigMap deckhouse в пространстве имен d8-system и может содержать следующие параметры (ключи):

Чтобы посмотреть конфигурацию Deckhouse выполните следующую команду:

kubectl -n d8-system get cm/deckhouse -o yaml

Пример ConfigMap deckhouse:

apiVersion: v1
metadata:
  name: deckhouse
  namespace: d8-system
data:
  global: |          # Вертикальная черта.
    # Глобальные настройки в формате YAML.
    modules:
      publicDomainTemplate: "%s.kube.company.my"
  # Настройки модуля monitoring-ping в формате YAML.
  monitoringPing: |
    externalTargets:
    - host: 8.8.8.8
  # Отключение модуля dashboard.
  dashboardEnabled: "false"

Обратите внимание на несколько важных нюансов в конфигурации:

  • Символ | (вертикальная черта) обязательно должен быть указан в параметрах настройки, т.к. передаваемое значение — многострочная строка (multi-line string), а не объект.
  • Наименование модулей пишется в стиле camelCase.

Чтобы изменить конфигурацию Deckhouse отредактируйте ConfigMap deckhouse, например, следующим способом:

kubectl -n d8-system edit cm/deckhouse

После сохранения конфигурации Deckhouse изменения применяются автоматически.

Настройка модуля

При работе с модулями Deckhouse использует проект addon-operator. Ознакомьтесь с его документацией, если хотите понять как Deckhouse работает с модулями, хуками модулей и параметрами модулей. Будем признательны, если поставите проекту звезду.

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

Модуль настраивается в конфигурации Deckhouse в параметре с названием модуля в camelCase. Значением параметра передается multi-line-строка в формате YAML с настройками модуля.

Некоторые модули дополнительно настраиваются с помощью custom resource’ов. Воспользуйтесь поиском (наверху страницы) или найдите модуль в меню слева, чтобы получить документацию по его настройкам и используемым custom resource’ам.

Пример настройки параметров модуля kube-dns:

data:
  kubeDns: |
    stubZones:
    - upstreamNameservers:
      - 192.168.121.55
      - 10.2.7.80
      zone: directory.company.my
    upstreamNameservers:
    - 10.2.100.55
    - 10.2.200.55

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

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

Для включения или отключения модуля необходимо добавить в ConfigMap deckhouse параметр <moduleName>Enabled, который может принимать одно из двух значений: "true" или "false" (кавычки обязательны), где <moduleName> — название модуля в camelCase.

Пример включения модуля user-authn:

data:
  userAuthnEnabled: "true"

Наборы модулей

В зависимости от используемого набора модулей (bundle) модули могут быть включены или выключены по умолчанию.

Набор модулей (bundle)Список включенных по умолчанию модулей
Default
  • cert-manager
  • chrony
  • control-plane-manager
  • dashboard
  • deckhouse
  • deckhouse-web
  • descheduler
  • ingress-nginx
  • kube-dns
  • kube-proxy
  • local-path-provisioner
  • log-shipper
  • monitoring-custom
  • monitoring-kubernetes-control-plane
  • monitoring-kubernetes
  • monitoring-ping
  • node-manager
  • pod-reloader
  • priority-class
  • prometheus
  • prometheus-metrics-adapter
  • smoke-mini
  • terraform-manager
  • upmeter
  • user-authn
  • user-authz
  • vertical-pod-autoscaler
Managed
  • cert-manager
  • chrony
  • dashboard
  • deckhouse
  • deckhouse-web
  • descheduler
  • ingress-nginx
  • local-path-provisioner
  • log-shipper
  • monitoring-custom
  • monitoring-kubernetes
  • monitoring-ping
  • pod-reloader
  • priority-class
  • prometheus
  • prometheus-metrics-adapter
  • upmeter
  • user-authz
  • vertical-pod-autoscaler
Minimal
  • deckhouse

Управление размещением компонентов Deckhouse

Выделение узлов под определенный вид нагрузки

Если в параметрах модуля не указаны явные значения nodeSelector/tolerations, то для всех модулей используется следующая стратегия:

  1. Если параметр nodeSelector модуля не указан, то Deckhouse попытается вычислить nodeSelector автоматически. В этом случае, если в кластере присутствуют узлы с лейблами из списка или лейблами определенного формата, Deckhouse укажет их в качестве nodeSelector ресурсам модуля.
  2. Если параметр tolerations модуля не указан, то Pod’ам модуля автоматически устанавливаются все возможные toleration’ы (подробнее).
  3. Отключить автоматическое вычисление параметров nodeSelector или tolerations можно, указав значение false.

Возможность настройки nodeSelector и tolerations отключена для модулей:

  • которые работают на всех узлах кластера (например, cni-flannel, monitoring-ping);
  • которые работают на всех master-узлах (например, prometheus-metrics-adapter, vertical-pod-autoscaler).

Особенности автоматики, зависящие от типа модуля

  • Модули monitoring (operator-prometheus, prometheus и vertical-pod-autoscaler):
    • Порядок поиска узлов (для определения nodeSelector):
      • Наличие узла с лейблом node-role.deckhouse.io/MODULE_NAME.
      • Наличие узла с лейблом node-role.deckhouse.io/monitoring.
      • Наличие узла с лейблом node-role.deckhouse.io/system.
    • Добавляемые toleration’ы (добавляются одновременно все):
      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"MODULE_NAME"};

        Например: {"key":"dedicated.deckhouse.io","operator":"Equal","value":"operator-prometheus"};

      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"monitoring"};
      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"system"};
  • Модули frontend (исключительно модуль ingress-nginx):
    • Порядок поиска узлов (для определения nodeSelector):
      • Наличие узла с лейблом node-role.deckhouse.io/MODULE_NAME.
      • Наличие узла с лейблом node-role.deckhouse.io/frontend.
    • Добавляемые toleration’ы (добавляются одновременно все):
      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"MODULE_NAME"};
      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"frontend"};
  • Все остальные модули:
    • Порядок поиска узлов (для определения nodeSelector):
      • Наличие узла с лейблом node-role.deckhouse.io/MODULE_NAME.

        Например: node-role.deckhouse.io/cert-manager.

      • Наличие узла с лейблом node-role.deckhouse.io/system.

    • Добавляемые toleration’ы (добавляются одновременно все):
      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"MODULE_NAME"};

        Например: {"key":"dedicated.deckhouse.io","operator":"Equal","value":"network-gateway"};

      • {"key":"dedicated.deckhouse.io","operator":"Equal","value":"system"}.