Предоставление пользовательских метрик, необходимых для масштабирования посредством HPA#

Контекст#

В Kubernetes-ориентированных системах автоматическое масштабирование играет ключевую роль в обеспечении устойчивости и эффективности работы приложений. Для корректной работы механизма Horizontal Pod Autoscaler (HPA) необходимы точные и актуальные метрики использования ресурсов, такие как CPU и память.

Однако стандартные источники метрик могут быть недостаточны или не соответствовать специфическим требованиям проекта. В таких случаях возникает необходимость предоставления пользовательских метрик, которые будут использоваться HPA для принятия решений о масштабировании.

Эта задача становится особенно важной в средах, где требуется гибкая настройка масштабирования под конкретные бизнес-условия и где используются собственные инструменты сбора метрик или сторонние системы мониторинга.

Проблема#

Отсутствие механизма предоставления метрик количества ресурсов для HorizontalPodAutoscaler (HPA) приводит к следующим проблемам:

  • Несоответствие метрик требованиям проекта — стандартные метрики могут не отражать реальную нагрузку или быть недоступны.

  • Сложности интеграции с внешними системами мониторинга — требуется ручная настройка и адаптация метрик.

Решение#

Для решения вышеуказанных проблем используется паттерн предоставления пользовательских метрик, чтобы HPA принял решение о масштабировании, реализуемый с участием AUSC. Взаимодействие происходит по следующей цепочке:

  1. HPA запрашивает метрику у Kubernetes API: HPA отправляет запрос на получение значения кастомной метрики через Kubernetes API.

  2. Kubernetes API перенаправляет запрос в адаптер.

  3. Адаптер запрашивает значение метрики у контроллера.

  4. AUSC собирает или рассчитывает метрику и возвращает ее адаптеру:

    • Получает запрос от адаптера.

    • Собирает данные из внутренних источников (Kubernetes) или внешних систем (Prometheus).

    • Рассчитывает значение.

    • Возвращает числовое значение метрики адаптеру.

  5. Адаптер возвращает значение метрики обратно в Kubernetes API: адаптер передает полученное значение и оно становится доступно HPA.

  6. HPA принимает решение о масштабировании.