Модуль descheduler обеспечивает работу Descheduler в Deckhouse Kubernetes Platform (DKP).

Модуль периодически анализирует состояние кластера и вытесняет поды, соответствующие условиям активных стратегий. Вытесненные поды вновь проходят процесс планирования с учётом текущего состояния кластера. Это позволяет перераспределить рабочие нагрузки в соответствии с выбранной стратегией.

Если в кластере зарегистрирован сервис Metrics API, модуль использует его для получения информации о текущем потреблении ресурсов.

Параметры стратегий задаются при помощи кастомного ресурса Descheduler. Хук модуля обрабатывает эти ресурсы и пересоздаёт конфигурацию для Descheduler.

Архитектура модуля

Для упрощения схемы приняты следующие допущения:

  • На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
  • Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.

Архитектура модуля descheduler на уровне 2 модели C4 и его взаимодействие с другими компонентами DKP показаны на следующей диаграмме:

Архитектура модуля descheduler

Компоненты модуля

Модуль descheduler состоит из одного компонента descheduler, включающего следующие контейнеры:

  • descheduler — основной контейнер;
  • kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для защищенного доступа к метрикам descheduler.

Взаимодействия модуля

Модуль взаимодействует с компонентом kube-apiserver:

  • наблюдение за стандартными ресурсами Node и Pod;
  • получение текущего потребления ресурсов через Metrics API;
  • вытеснение работающих подов для соответствия активным стратегиям;
  • авторизация запросов на получение метрик.

С модулем взаимодействует компонент prometheus — собирает метрики модуля.

Дополнительные ресурсы