Почему Kubernetes HPA не уменьшает масштабирование (память)?

Резюме

в нашем Kubernetes-кластере мы ввели HPA с ограничениями памяти и процессора. Прямо сейчас мы не понимаем, почему у нас 2 реплики одного сервиса.

Рассматриваемая служба использует 57% / 85% памяти и имеет 2 реплики вместо одной. Мы думаем, что это потому, что когда вы суммируете память обоих модулей, она составляет более 85%, но этого не было бы, если бы был только один модуль. Так не мешает ли это уменьшению масштаба? Что мы можем здесь сделать?

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

Шлем

гпа:

{{- $fullName := include "app.fullname" . -}}
{{- $ := include "app.fullname" . -}}

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: {{ $fullName }}-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: {{ include "app.name" . }}
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 50
    - type: Resource
      resource:
        name: memory
        targetAverageUtilization: 85

и в развертывании:

# Horizontal-Pod-Auto-Scaler
          resources:
            requests:
              memory: {{ $requestedMemory }}
              cpu: {{ $requesteCpu }}
            limits:
              memory: {{ $limitMemory }}
              cpu: {{ $limitCpu }}

с настройками службы по умолчанию:

hpa:
  resources:
    request:
      memory: 500Mi
      cpu: 300m
    limits:
      memory: 1000Mi
      cpu: 999m

kubectl get hpa -n dev

NAME                            REFERENCE                              TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
xxxxxxxx-load-for-cluster-hpa   Deployment/xxxxxxxx-load-for-cluster   34%/85%, 0%/50%   1         10        1          4d7h
xxx5-ccg-hpa                    Deployment/xxx5-ccg                    58%/85%, 0%/50%   1         10        1          4d12h
iotbootstrapping-service-hpa    Deployment/iotbootstrapping-service    54%/85%, 0%/50%   1         10        1          4d12h
mocks-hpa                       Deployment/mocks                       41%/85%, 0%/50%   1         10        1          4d12h
user-pairing-service-hpa        Deployment/user-pairing-service        41%/85%, 0%/50%   1         10        1          4d12h
aaa-registration-service-hpa    Deployment/aaa-registration-service    57%/85%, 0%/50%   1         10        2          4d12h
webshop-purchase-service-hpa    Deployment/webshop-purchase-service    41%/85%, 0%/50%   1         10        1          4d12h

kubectl описать hpa -n dev

Name:                                                     xxx-registration-service-hpa
Namespace:                                                dev
Labels:                                                   app.kubernetes.io/managed-by=Helm
Annotations:                                              meta.helm.sh/release-name: vwg-registration-service
                                                          meta.helm.sh/release-namespace: dev
CreationTimestamp:                                        Thu, 18 Jun 2020 22:50:27 +0200
Reference:                                                Deployment/xxx-registration-service
Metrics:                                                  ( current / target )
  resource memory on pods  (as a percentage of request):  57% (303589376) / 85%
  resource cpu on pods  (as a percentage of request):     0% (1m) / 50%
Min replicas:                                             1
Max replicas:                                             10
Deployment pods:                                          2 current / 2 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:           <none>

Если необходима дополнительная информация, пожалуйста, спрашивайте!

Большое спасибо, что нашли время!

Ура Робин

1 ответ

Решение

Формула для определения желаемого количества реплик:

desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]

Важной частью вашего вопроса является ceil[...]обертка функции: всегда округляется до следующей ближайшей реплики. ЕслиcurrentReplicas равно 2 и desiredMetricValue составляет 85%, то currentMetricValue должно быть 42,5% или ниже для запуска уменьшения масштаба.

В вашем примере currentMetricValue составляет 57%, поэтому вы получаете

desiredReplicas = ceil[2 * (57 / 85)]
                = ceil[2 * 0.671]
                = ceil[1.341]
                = 2

Вы правы, если currentReplicasбыли бы 1, HPA также не чувствовал бы необходимости в расширении; фактическое использование должно подняться выше 85%, чтобы вызвать это.

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