Перейти к содержанию

Descheduler

О descheduler

descheduler - опциональный компонент Kubernetes, который выполняет функции анализа текущего состояния кластера и внутренних политик для формирования решения о перемещении ресурсов на другие узлы.

Это может быть полезным в случаях:

  1. Недонагружены или перегружены узлы.

  2. Исходные требования к размещению не актуальны.

  3. Выход из строя узлов и последующее перемещение подов.

  4. Добавление новых узлов.

Заметка

Ознакомьтесь с управлением модулями Bootsman

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

После добавления вы увидете шаблон конфигурации(Для читабельности, настройки политик были свернуты) Installed Addon

Далее каждая из политик будет рассмотрена отдельно. Базовые настройки:

...
deschedulingInterval: 5m
deschedulerPolicy:
  evictLocalStoragePods: true
  nodeSelector: node-role.kubernetes.io/controlplane!=true
...
Параметр Описание Комментарий
deschedulingInterval Интервал запуска проверки descheduler
evictLocalStoragePods Разрешение на выселение подов с локальным хранилищем
nodeSelector Глобальный выбор списка подверженных дейстиям политик нод Ноды с постоянным Taint NoShedule должны быть обязательно исключены

Политики descheduler

Удаление дубликатов (RemoveDuplicates)

Обеспечивает распределение Pods принадлежащим ReplicaSet (RS), ReplicationController (RC), StatefulSet, или Job по узлам.

Например, если два одинаковых пода находятся на одном узле, Descheduler будет перемещать один из них.

...
        RemoveDuplicates:
          enabled: true
          excludeOwnerKinds:
            - ReplicaSet

...

Параметр Описание Комментарий
enabled Включение политики Принимает значение true или false
excludeOwnerKinds Список типов объектов не подлежащих перемещению

Низкая нагрузка узлов (LowNodeUtilization)

Обеспечивает перемещение подов с наиболее нагруженных узлов на менее нагруженные.

Перемещение будет происходит до тех пор, пока недозагруженных или перегруженных узлов не будет равно 0

...
        LowNodeUtilization:
          enabled: true
          thresholds:
            cpu: 20
            memory: 20
            pods: 20
          targetThresholds:
            cpu: 50
            memory: 50
            pods: 50
...
Параметр Описание Комментарий
enabled Включение политики Принимает значение true или false
thresholds Пороговые значения для недозагруженного узла Пороговые значение указываются в процентах
targetThresholds Пороговые значения для перегруженного узла Пороговые значение указываются в процентах

Нарушение правил привязки к узлам (RemovePodsViolatingNodeAffinity)

Обеспечивает перемещение подов при нарушении правил привязки к узлам.

Например, при размещении пода на ноде с определенным label, который в последствии был удален, изменен или перемещен.

...
        RemovePodsViolatingNodeAffinity:
          enabled: true
          nodeAffinityType:
            - requiredDuringSchedulingIgnoredDuringExecution
            - preferredDuringSchedulingIgnoredDuringExecution

...
Параметр Описание Комментарий
enabled Включение политики Принимает значение true или false
nodeAffinityType Список типов правил привязки, на который реагирует descheduler Можно задать один или оба

Перемещение на основе Taint (RemovePodsViolatingNodeTaints)

Обеспечивает перемещение подов на основании Taint на узлах.

Например, при размещении пода на ноде с определенным label, который в последствии исчбыл удален, изменен или перемещен.

...
        RemovePodsViolatingNodeTaints:
          enabled: true
          enableIncludedTaints: true
          includedTaints:
            - key_example=value_example
            - key_example
          enableExcludedTaints: false
          excludedTaints:
            - key_example=value_example
            - key_example
...