Модуль descheduler обеспечивает работу Descheduler в Deckhouse Kubernetes Platform (DKP).
Модуль периодически анализирует состояние кластера и вытесняет поды, соответствующие условиям активных стратегий. Вытесненные поды вновь проходят процесс планирования с учётом текущего состояния кластера. Это позволяет перераспределить рабочие нагрузки в соответствии с выбранной стратегией.
Если в кластере зарегистрирован сервис Metrics API, модуль использует его для получения информации о текущем потреблении ресурсов.
Параметры стратегий задаются при помощи кастомного ресурса Descheduler. Хук модуля обрабатывает эти ресурсы и пересоздаёт конфигурацию для Descheduler.
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля descheduler на уровне 2 модели C4 и его взаимодействие с другими компонентами DKP показаны на следующей диаграмме:
Компоненты модуля
Модуль descheduler состоит из одного компонента descheduler, включающего следующие контейнеры:
- descheduler — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для защищенного доступа к метрикам descheduler.
Взаимодействия модуля
Модуль взаимодействует с компонентом kube-apiserver:
- наблюдение за стандартными ресурсами Node и Pod;
- получение текущего потребления ресурсов через Metrics API;
- вытеснение работающих подов для соответствия активным стратегиям;
- авторизация запросов на получение метрик.
С модулем взаимодействует компонент prometheus — собирает метрики модуля.