Оптимизация использования вычислительных ресурсов кластеров - масштабирование ресурсов в реальном времени за счет точного соответствия количества реплик текущей нагрузке для исключения избыточного выделения ресурсов#
Контекст#
В современных облачных и распределенных системах вычислительные ресурсы (CPU, Memory) являются ключевыми активами. Ресурсы распределяются между репликами сервисов, но статическое распределение часто приводит к неэффективному использованию (реплик может быть поднято больше на текущий момент, чем необходимо).
Проблема#
В современных Kubernetes-кластерах статическое распределение ресурсов приводит к следующим проблемам:
Ресурсы выделяются с «запасом» для пиковых нагрузок
Большинство времени ресурсы используются неполностью
Некоторые сервисы недополучают ресурсов во время пиков
Избыточные ресурсы приводят к затратам на инфраструктуру
Решение#
Для решения данных проблем в Synapse Autoscaler (далее AUSC) используется механизм обработки пользовательских конфигураций ScaledObject для управления вычислительными ресурсами кластеров с помощью различных триггеров.
Для применения паттерна оптимизации использования вычислительных ресурсов с AUSC необходимо:
Создать ScaledObject в namespace.
Настроить триггеры под потребности:
cron - для осуществления масштабирования по расписанию. Полезен для сервисов с предсказуемой запланированной нагрузкой (дневные пики, выходные, специальные периоды). Ключевая идея: соответствие реплик предсказуемой запланированной нагрузке.
kubernetes-workload - масштабирование ресурса на основе числа реплик других деплойментов. Полезен для сценариев, где необходимо масштабировать один сервис в зависимости от нагрузки на другой (коэффициент зависимости всегда постоянный). Ключевая идея: соответствие реплик на основе смежных сервисов.
cpu - масштабирование ресурса на основе использования CPU. Это стандартный триггер для автоматического масштабирования на основе нагрузки на процессор. Ключевая идея: точное соответствие реплик текущей нагрузке на CPU.
memory - масштабирование ресурса на основе использования оперативной памяти. Ключевая идея: точное соответствие реплик текущему потреблению оперативной памяти.
utilization - масштабирование на основе процентного использования ресурсов (CPU или памяти) с возможностью настройки порогов увеличения и уменьшения. Подходит для стандартного автоматического масштабирования Kubernetes. Ключевая идея: точное соответствие с раздельными порогами для стабильности масштабирования.
prometheus - масштабирование на основе Prometheus запросов. Это самый гибкий триггер, позволяющий использовать любые кастомные метрики (длина очереди, время отклика, количество соединений, бизнес-метрики) для масштабирования. Ключевая идея: использование Prometheus запросов для скалирования.
predictive - масштабирование на основе прогнозируемых метрик. Используется в сочетании с компонентом Metrics Predictor (PREM) для предиктивного масштабирования на основе исторических данных и сезонных паттернов, позволяет прогнозировать применение для реальной нагрузки. Ключевая идея: предиктивное соответствие реплик будущей нагрузке.
Примечание: использование триггеров опционально. Подробнее ознакомиться с инструкцией по настройке данных триггеров можно в документе «Autoscaler (AUSC) API Reference» в разделе Спецификация ScaledObject.