Уменьшение HPA не происходит должным образом - PullRequest
0 голосов
/ 24 октября 2019

Я создал HPA для своего развертывания, он отлично работает для масштабирования до максимального количества реплик (6 в моем случае), когда нагрузка уменьшает масштаб до 5, но должна прийти к исходному состоянию реплик (1 в моемслучай), так как нагрузка становится нормальной. Я подтвердил, что через 30-40 минут мое приложение имеет 5 реплик. Предполагается, что это 1 реплика.

[ec2-user@ip-192-168-x-x ~]$ kubectl describe hpa admin-dev -n dev

Name: admin-dev
Namespace: dev
Labels: <none>
Annotations: <none>
CreationTimestamp: Thu, 24 Oct 2019 07:36:32 +0000
Reference: Deployment/admin-dev
Metrics: ( current / target )
resource memory on pods (as a percentage of request): 49% (1285662037333m) / 60%
Min replicas: 1
Max replicas: 10
Deployment pods: 3 current / 3 desired
Conditions:
  Type           Status Reason             Message
  ----           ------ ------             -------
  AbleToScale    True   ReadyForNewScale   recommended size matches current size
  ScalingActive  True   ValidMetricFound   the HPA was able to successfully calculate a replica count from memory resource utilization (percentage of request)
  ScalingLimited False  DesiredWithinRange the desired count is within the acceptable range 

Events:
  Type   Reason            Age   From                      Message
  ----   ------            ----  ----                      -------
  Normal SuccessfulRescale 13m   horizontal-pod-autoscaler New size: 2; reason: memory resource utilization (percentage of request) above target
  Normal SuccessfulRescale 5m27s horizontal-pod-autoscaler New size: 3; reason: memory resource utilization (percentage of request) above target

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Когда нагрузка уменьшается, HPA намеренно ждет определенное время, прежде чем свернуть приложение. Это известно как задержка перезарядки и помогает слишком часто увеличивать и уменьшать приложение. Результатом этого является то, что в течение определенного времени приложение работает с предыдущим большим количеством реплик, даже если значение метрики намного ниже целевого значения. Это может выглядеть так, как будто HPA не реагирует на уменьшенную нагрузку, но в конечном итоге будет реагировать.

Однако продолжительность задержки восстановления по умолчанию составляет 5 минут. Так что, если через 30-40 минут приложение все еще не свернуто, это странно. Если задержка перезарядки не была установлена ​​на что-то другое с флагом --horizontal-pod-autoscaler-downscale-stabilization диспетчера контроллеров .

В выводе, который вы разместили, значение показателя составляет 49% с целью 60% и текущее количество реплик равно 3. Это на самом деле не так уж и плохо.

Возможно, проблема в том, что вы используете использование памяти в качестве метрики, а нехорошая метрика автомасштабирования.

Метрика автомасштабирования должна линейно реагировать на текущую нагрузку по репликам приложения. Если число реплик удваивается, значение метрики должно уменьшиться вдвое, а если число реплик уменьшится вдвое, значение метрики должно удвоиться. Использование памяти в большинстве случаев не показывает такое поведение. Например, если каждая реплика использует фиксированный объем памяти, то среднее использование памяти по репликам остается примерно одинаковым независимо от того, сколько реплик было добавлено или удалено. В этом отношении загрузка ЦП обычно работает намного лучше.

0 голосов
/ 25 октября 2019

В этом случае Horizontal Pod Autoscaler работает как задумано.

Autoscaler может быть настроен для использования одной или нескольких метрик.

  1. Автомасштабирование на основе одной метрики - суммирует значения метрик для всех модулей, делитпо целевому значению, установленному для ресурса HorizontalPodAutoscaler, а затем округляет его до следующего большего целого числа.

desired_replicas = sum(utilization) / desired_utilization.

Пример. Когда он настроен намасштаб с учетом процессора. Если целевое значение установлено на 30%, а загрузка процессора составляет 97%: 97% / 30% = 3,23, а HPA округляет его до 4 (следующее большее целое число).

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

Пример: если для достижения целевого использования ЦП требуется три модуля, и дваДля достижения целевого использования памяти требуется модуль, а Autoscaler масштабируется до трех модулей - наибольшее число, необходимое для достижения цели.

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

Надеюсь, это поможет.

...