Модуль распределения нагрузки узлов (Descheduler)
Descheduler - это инструмент, который помогает оптимизировать размещение подов в кластере.
Descheduler анализирует текущее состояние кластера и определяет поды, которые стоит переместить на другие узлы для достижения лучшей производительности, утилизации ресурсов или соответствия определенным правилам.
Для настройки Descheduler в интерфейсе клиентского кластера платформы “Штурвал”:
- в боковом меню откройте раздел Сервисы и репозитории;
- перейдите на страницу Установленные сервисы;
- найдите Модуль распределения нагрузки узлов.
Если модуль не отображается, перейдите в раздел Сервисы и репозитории и откройте страницу Доступные чарты, найдите чарт “shturval-descheduler” и нажмите “Установить”.
Перечень конфигурируемых параметров для сервиса
| Наименование параметра | Описание параметра | Значение параметра |
|---|---|---|
| resources.requests.cpu | Запрашиваемые ресурсы CPU | 500m |
| resources.requests.memory | Запрашиваемые ресурсы памяти | 256Mi |
| resources.limits.cpu | Ограничения CPU | 100m |
| resources.limits.memory | Ограничения памяти | 128Mi |
| deschedulingInterval | Интервал времени между запусками descheduler | 5m |
Параметры deschedulerPolicy.strategies
| Наименование параметра | Описание параметра | Значение параметра |
|---|---|---|
| RemoveDuplicates.enabled | Включение стратегии удаления дубликатов подов | true |
| RemovePodsHavingTooManyRestarts.enabled | Включение стратегии удаления подов с частыми перезапусками | true |
| RemovePodsHavingTooManyRestarts.params.podsHavingTooManyRestarts.podRestartThreshold | Порог перезапусков пода, при котором под будет удален | 100 |
| RemovePodsHavingTooManyRestarts.params.podsHavingTooManyRestarts.includingInitContainers | Учитывать init контейнеры при подсчете перезапусков | true |
| RemovePodsViolatingNodeTaints.enabled | Включение стратегии удаления подов, нарушающих запреты узлов | true |
| RemovePodsViolatingNodeAffinity.enabled | Включение стратегии удаления подов, нарушающих аффинити узлов | true |
| RemovePodsViolatingNodeAffinity.params.nodeAffinityType | Тип аффинити узлов | requiredDuringSchedulingIgnoredDuringExecution |
| RemovePodsViolatingInterPodAntiAffinity.enabled | Включение стратегии удаления подов, которые нарушают анти-аффинити между подами | true |
| RemovePodsViolatingTopologySpreadConstraint.enabled | Включение стратегии удаления подов, нарушающих ограничения распределения топологии | true |
| RemovePodsViolatingTopologySpreadConstraint.parapms.includeSoftConstraints | Учитывать мягкие ограничения во время принятия решений об удалении | false |
| LowNodeUtilization.enabled | Включение стратегии низкой утилизации узлов | true |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.cpu | Порог использования ресурсов CPU | 20 |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.memory | Порог использования ресурсов памяти | 20 |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.pods | Порог использования ресурсов подов | 20 |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.cpu | Целевой порог использования ресурсов CPU | 50 |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.memory | Целевой порог использования ресурсов памяти | 50 |
| LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.pods | Целевой порог использования ресурсов подов | 50 |
С дополнительной информацией можно ознакомиться на Kubernetes Scheduler и github.