Может ли кто-нибудь объяснить такое поведение Kubernetes HPA? - PullRequest
2 голосов
/ 06 августа 2020

Так это происходит на EKS K8s v1.15. Вы можете увидеть версию api в описании вывода. Милликпу колеблется между 80 и 120 ... что совершенно не соответствует количеству реплик, исходящих из HPA ....

Вот YAML:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: sequencer
  namespace: djin-content
spec:
  minReplicas: 1
  maxReplicas: 10
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: sequencer
  metrics:
  - type: Pods
    pods:
      metricName: cpu_usage
      targetAverageValue: 500

Вот описание kubectl:

[root@ip-10-150-53-173 ~]# kubectl describe hpa -n djin-content
Name:                   sequencer
Namespace:              djin-content
Labels:                 <none>
Annotations:            kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"sequencer","namespace":"djin-con...
CreationTimestamp:      Wed, 05 Aug 2020 20:40:37 +0000
Reference:              Deployment/sequencer
Metrics:                ( current / target )
  "cpu_usage" on pods:  122m / 500
Min replicas:           1
Max replicas:           10
Deployment pods:        7 current / 7 desired
Conditions:
  Type            Status  Reason              Message
  ----            ------  ------              -------
  AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 4
  ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from pods metric cpu_usage
  ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
Events:
  Type    Reason             Age                  From                       Message
  ----    ------             ----                 ----                       -------
  Normal  SuccessfulRescale  34m                  horizontal-pod-autoscaler  New size: 10; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  15m (x2 over 34m)    horizontal-pod-autoscaler  New size: 6; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  10m                  horizontal-pod-autoscaler  New size: 5; reason: All metrics below target
  Normal  SuccessfulRescale  9m51s (x2 over 23m)  horizontal-pod-autoscaler  New size: 3; reason: All metrics below target
  Normal  SuccessfulRescale  5m (x2 over 16m)     horizontal-pod-autoscaler  New size: 4; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  4m45s (x2 over 15m)  horizontal-pod-autoscaler  New size: 5; reason: pods metric cpu_usage above target
  Normal  SuccessfulRescale  4m30s                horizontal-pod-autoscaler  New size: 7; reason: pods metric cpu_usage above target

Пользовательский API метри c заполняется правильно / часто и работает нормально. Таргетинг на развертывание работает отлично ... Я просмотрел всю базу кода k8s для этого API и расчета реплик, и это не имеет смысла ...

1 Ответ

1 голос
/ 06 августа 2020

Кажется, что метрики не совпадают, у вас есть 122 миллиона (milicores) против / 500 сырых данных.

  "cpu_usage" on pods:  122m / 500

Вы не указали, что вычисляет ваши собственные метрики, возможно, extra 0 добавляется к 122m, что делает его 1220 / 500 (я предполагаю, что cpu_usage - это настраиваемая метрика c, поскольку обычная метрика сервера метрик c равна cpu), но вы можете попробовать:

targetAverageValue: 500m

Более распространенный способ выполнения HPA по использованию ЦП - использовать процент использования ЦП с сервера метрик.

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50
...

Действиями масштабирования управляет kube-controlller-manager на уровне управления K8s, если у вас включены журналы уровня управления EKS, вы также можете посмотреть там дополнительную информацию. ?

✌️

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...