Kubernetes HPA (с настраиваемыми метриками) политики масштабирования

Начиная с Kubernetes v1.18, v2beta2 API позволяет настраивать поведение масштабирования с помощью поля поведения Horizontal Pod Autoscalar (HPA). Я планирую применить HPA с настраиваемыми метриками к StatefulSet.

Вариант использования, который я рассматриваю, - это масштабирование с использованием настраиваемой метрики (например, количество пользовательских сеансов в моем приложении), но HPA не будет уменьшаться вообще. Этот вариант использования также описан усовершенствованиями K8s SIG-Autoscaling - "Настраиваемая скорость масштабирования для HPA >> История 4: Масштабируйте как обычно, не уменьшайте масштаб".

behavior:
  scaleDown:
    policies:
    - type: pods
      value: 0

Пользовательские сеансы могут оставаться активными от минут до часов. Начиная с 1 реплики StatefulSet, когда количество пользовательских сеансов достигает верхнего предела (показанного с помощью сборщика Prometheus, а затем настроенного с использованием параметра настраиваемой метрики HPA), модули приложений будут масштабироваться. Новые модули начнут обслуживать новых пользователей.

Поскольку это StatefulSet, и он не может просто резко уменьшить масштаб, я ищу помощь в способах уменьшения масштаба, когда количество сеансов пользователей на новых репликах уменьшается до 0. Ссылка выше говорит о том, что уменьшение масштаба можно контролировать с помощью отдельного процесса. Не знаете, как это сделать? Ищем указатели.

Спасибо.

1 ответ

Вы можете использовать periodSeconds а также stabilizationWindowSeconds значения для управления временем, прошедшим между завершением работы модулей, например:

  behavior:
    scaleDown:
      stabilizationWindowSeconds: 10
      policies:
      - type: Pods
        value: 1
        periodSeconds: 20

Таким образом, он будет уменьшаться на 1 модуль каждые ~30 секунд (или любое другое значение, которое будет использоваться в periodSeconds а также stabilizationWindowSeconds). Время может меняться в зависимости отstabilizationWindowSeconds ценности с течением времени.

periodSeconds описывает, сколько времени пройдет между завершением работы каждого модуля, максимальное значение - 1800 секунд (30 минут).

stabilizationWindowSecondsкогда показатели указывают на то, что цель должна быть уменьшена, этот алгоритм анализирует ранее рассчитанные желаемые состояния и использует максимальное значение из указанного интервала. Для уменьшения по умолчанию значение 300, максимальное значение - 3600 (один час).

Другие вопросы по тегам