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