Оптимизация использования вычислительных ресурсов кластеров - масштабирование ресурсов в реальном времени за счет точного соответствия количества реплик текущей нагрузке для исключения избыточного выделения ресурсов#

Контекст#

В современных облачных и распределенных системах вычислительные ресурсы (CPU, Memory) являются ключевыми активами. Ресурсы распределяются между репликами сервисов, но статическое распределение часто приводит к неэффективному использованию (реплик может быть поднято больше на текущий момент, чем необходимо).

Проблема#

В современных Kubernetes-кластерах статическое распределение ресурсов приводит к следующим проблемам:

  • Ресурсы выделяются с «запасом» для пиковых нагрузок

  • Большинство времени ресурсы используются неполностью

  • Некоторые сервисы недополучают ресурсов во время пиков

  • Избыточные ресурсы приводят к затратам на инфраструктуру

Решение#

Для решения данных проблем в Synapse Autoscaler (далее AUSC) используется механизм обработки пользовательских конфигураций ScaledObject для управления вычислительными ресурсами кластеров с помощью различных триггеров.

Для применения паттерна оптимизации использования вычислительных ресурсов с AUSC необходимо:

  1. Создать ScaledObject в namespace.

  2. Настроить триггеры под потребности:

  • cron - для осуществления масштабирования по расписанию. Полезен для сервисов с предсказуемой запланированной нагрузкой (дневные пики, выходные, специальные периоды). Ключевая идея: соответствие реплик предсказуемой запланированной нагрузке.

  • kubernetes-workload - масштабирование ресурса на основе числа реплик других деплойментов. Полезен для сценариев, где необходимо масштабировать один сервис в зависимости от нагрузки на другой (коэффициент зависимости всегда постоянный). Ключевая идея: соответствие реплик на основе смежных сервисов.

  • cpu - масштабирование ресурса на основе использования CPU. Это стандартный триггер для автоматического масштабирования на основе нагрузки на процессор. Ключевая идея: точное соответствие реплик текущей нагрузке на CPU.

  • memory - масштабирование ресурса на основе использования оперативной памяти. Ключевая идея: точное соответствие реплик текущему потреблению оперативной памяти.

  • utilization - масштабирование на основе процентного использования ресурсов (CPU или памяти) с возможностью настройки порогов увеличения и уменьшения. Подходит для стандартного автоматического масштабирования Kubernetes. Ключевая идея: точное соответствие с раздельными порогами для стабильности масштабирования.

  • prometheus - масштабирование на основе Prometheus запросов. Это самый гибкий триггер, позволяющий использовать любые кастомные метрики (длина очереди, время отклика, количество соединений, бизнес-метрики) для масштабирования. Ключевая идея: использование Prometheus запросов для скалирования.

  • predictive - масштабирование на основе прогнозируемых метрик. Используется в сочетании с компонентом Metrics Predictor (PREM) для предиктивного масштабирования на основе исторических данных и сезонных паттернов, позволяет прогнозировать применение для реальной нагрузки. Ключевая идея: предиктивное соответствие реплик будущей нагрузке.

Примечание: использование триггеров опционально. Подробнее ознакомиться с инструкцией по настройке данных триггеров можно в документе «Autoscaler (AUSC) API Reference» в разделе Спецификация ScaledObject.