Кастомные политики автоскейлинга - сочетание автоматизации управления ресурсами с возможностью кастомизации метрик масштабирования, обеспечивая максимальную эффективность эксплуатации сервисов в Kubernetes#

Контекст#

В Kubernetes существуют стандартные механизмы автоскейлинга (HPA), которые масштабируют поды на основе метрик CPU и memory. Однако для сложных приложений с нерегулярными паттернами нагрузки, или при необходимости масштабирования на основе кастомных метрик, стандартных механизмов недостаточно. Synapse Autoscaler (далее AUSC) расширяет возможности автоскейлинга, предоставляя гибкий механизм настройки политик масштабирования на основе различных триггеров и источников данных.

Проблема#

Когда стандартные механизмы автоскейлинга Kubernetes (CPU/memory) не обеспечивают оптимальное масштабирование, возникают следующие проблемы:

  • Недостаточная гибкость - HPA Kubernetes масштабирует только на основе CPU и memory, что не подходит для приложений с неравномерной нагрузкой.

  • Отсутствие контроля над ресурсами проекта - нет возможности задать лимиты использования ресурсов на уровне проекта и автоматически корректировать масштабирование в зависимости от этих лимитов.

  • Отсутствие кастомных метрик - нет возможности масштабирования на основе кастомных метрик (длина очереди, количество запросов в секунду, время отклика).

Решение#

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

Для применения паттерна кастомных политик автоскейлинга необходимо:

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

  2. Настроить дополнительные поля в ScaledObject под потребности:

  • pollingInterval - интервал опроса триггеров

  • cooldownPeriod - период ожидания перед масштабированием вниз до 0

  • initialCooldownPeriod - пауза после создания ScaledObject

  • idleReplicaCount - количество реплик при низкой нагрузке

  • fallback - настройки резервного режима при ошибках:

    • failureThreshold - количество ошибок, после которых активируется fallback.

    • replicas - количество реплик для fallback.

    • behavior - режим fallback.

  • advanced - расширенные настройки

    • restoreToOriginalReplicaCount - свойство указывающее, следует ли уменьшить целевой ресурс (Deployment, StatefulSet,…) до исходного количества реплик после удаления ScaledObject

    • usageLevels - уровни нагрузки с разными min/max репликами

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