Descheduler
О descheduler
descheduler - опциональный компонент Kubernetes, который выполняет функции анализа текущего состояния кластера и внутренних политик для формирования решения о перемещении ресурсов на другие узлы.
Это может быть полезным в случаях:
-
Недонагружены или перегружены узлы.
-
Исходные требования к размещению не актуальны.
-
Выход из строя узлов и последующее перемещение подов.
-
Добавление новых узлов.
Заметка
Ознакомьтесь с управлением модулями Bootsman
Настройки модуля
После добавления вы увидете шаблон конфигурации(Для читабельности, настройки политик были свернуты)

Далее каждая из политик будет рассмотрена отдельно. Базовые настройки:
...
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
...