Перейти к содержимому

Descheduler ​

О descheduler ​

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

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

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

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

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

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

Заметка

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

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

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

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

yaml
...
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 будет перемещать один из них.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

yaml
...
        RemovePodsViolatingNodeTaints:
          enabled: true
          enableIncludedTaints: true
          includedTaints:
            - key_example=value_example
            - key_example
          enableExcludedTaints: false
          excludedTaints:
            - key_example=value_example
            - key_example
...
ПараметрОписаниеКомментарий
enabledВключение политикиПринимает значение true или false
enableIncludedTaintsВключение поиска узлов по выбранным TaintsПринимает значение true или false
includedTaintsСписок TaintsМожет принимать как ключи, так и связки ключей с значениями
enableExcludedTaintsВключение поиска по всем узлам исключая выбранные TaintsПринимает значение true или false
excludedTaintsСписок TaintsМожет принимать как ключи, так и связки ключей с значениями

Нарушение распределение топологии (RemovePodsViolatingTopologySpreadConstraint) ​

Поддерживает состояние описанное в TopologySpreadConstraint

yaml
...
        RemovePodsViolatingTopologySpreadConstraint:
          enabled: true
          constraints:
            - DoNotSchedule
            - ScheduleAnyway
          topologyBalanceNodeFit: true
...
ПараметрОписаниеКомментарий
enabledВключение политикиПринимает значение true или false
constraintsСписок ограничений
topologyBalanceNodeFitПроверка о наличии узла, куда можно перенести под, перед выселениемПринимает значение true или false

Много перезапусков (RemovePodsHavingTooManyRestarts) ​

Обеспечивает перемещение подов, которые имеют слишком много перезапусков

yaml
...
        RemovePodsHavingTooManyRestarts:
          enabled: true
          podRestartThreshold: 100
          includingInitContainers: true
...
ПараметрОписаниеКомментарий
enabledВключение политикиПринимает значение true или false
podRestartThresholdЧисло перезапусков до перемещения
includingInitContainersУчитывать перезапуски init контейнеровПринимает значение true или false

Команда Боцман