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 (один час).