Конфигурация самого Deckhouse и его модулей находится в одном месте — в ConfigMap’е deckhouse в namespace d8-system. Некоторые модули помимо своей конфигурации настраиваются с учетом специальных custom resource в кластере. Описание параметров конфигурации модуля и используемых модулем custom resource’ов можно найти в описании модуля или функций подсистемы.

Конфигурация deckhouse (ConfigMap deckhouse) состоит из глобальной секции и секции модулей.

Редактирование конфигурации Deckhouse:

kubectl -n d8-system edit cm/deckhouse

Пример ConfigMap deckhouse

Обратите внимание на символ | и не запутайтесь.

apiVersion: v1
metadata:
  name: deckhouse
  namespace: d8-system
data:
  global: |          # <--- очень важно, вертикальная черта!!!
    # Тут кусок YAML-файла с глобальными настройками
    modules:
      publicDomainTemplate: "%s.kube.company.my"
  nginxIngress: |
    # Тут кусок YAML-файла, касающийся модуля nginx-ingress
    config:
      hsts: true
  someModuleName: |  # <--- тут всегда camel case от названия модуля
    foo: bar
  dashboardEnabled: "false"   # <--- вот так можно отключить модуль

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

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

Модули могут быть включены или выключены по умолчанию, исходя из используемого варианта поставки.

Для включения/отключения модуля, необходимо добавить в configMap deckhouse параметр <moduleName>Enabled"true" или "false", где <moduleName> — название модуля в camelCase.

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

data:
  userAuthnEnabled: "true"

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

Для всех модулей принята единая стратегия:

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

Важно! Если модуль предполагает работу DaemonSet’a на всех узлах кластера (например, ping-exporter и node-problem-detector) или модуль должен работать на master-узлах (например, prometheus-metrics-adapter или некоторые компоненты vertical-pod-autoscaler) — то у таких модулей возможность настройки nodeSelector и tolerations отключена.

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

  • Модули 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 (исключительно nginx-ingress)
    • Порядок поиска узлов (для определения 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"}