Какие показатели описывают в Kubernetes HorizontalPodAutoscaler в GKE? - PullRequest
1 голос
/ 26 мая 2020

Я настроил свой HorizontalPodAutoscaler, как описано здесь. https://cloud.google.com/kubernetes-engine/docs/tutorials/external-metrics-autoscaling, чтобы прослушивать масштаб в соответствии с количеством распакованных сообщений из моего Pub / Sub. Я хочу, чтобы поды масштабировались, если имеется более одного неподтвержденного сообщения. Когда я запускаю k describe hpa, я получаю:

Namespace:                                                                               default
Labels:                                                                                  <none>
Annotations:                                                                             kubectl.kubernetes.io/last-applied-configuration:
                                                                                           {"apiVersion":"autoscaling/v2beta1","kind":"HorizontalPodAutoscaler","metadata":{"annotations":{},"name":"foobar-gke-prod","namespace":"defau...
CreationTimestamp:                                                                       Mon, 25 May 2020 18:01:33 -0700
Reference:                                                                               Deployment/foobar-gke-prod
Metrics:                                                                                 ( current / target )
  "pubsub.googleapis.com|subscription|num_undelivered_messages" (target average value):  200m / 1
Min replicas:                                                                            3
Max replicas:                                                                            9
Deployment pods:                                                                         5 current / 5 desired

Возвращаемые данные метрик сбивают меня с толку. Когда я запустил эту команду, количество незапакованных сообщений знаний было около 4 в соответствии с показателями консоли. Итак, я не понимаю, что означает 200m? Почему бы не сказать 4?

Вот моя конфигурация для HPA

# Template from https://cloud.google.com/kubernetes-engine/docs/tutorials/external-metrics-autoscaling
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: foobar-gke-prod
spec:
  minReplicas: 3
  maxReplicas: 9
  metrics:
  - external:
      metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
      metricSelector:
        matchLabels:
          resource.labels.subscription_id: prod_foobar_subscription
      targetAverageValue: "1"
    type: External
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: foobar-gke-prod

1 Ответ

1 голос
/ 26 мая 2020

Справочный пример:

Name:                                                                                    pubsub
...
Metrics:                                                                                 ( current / target )
"pubsub.googleapis.com|subscription|num_undelivered_messages" (target average value):  2250m / 2
Min replicas:                                                                            1
Max replicas:                                                                            4
Conditions:
Type            Status  Reason            Message
----            ------  ------            -------
AbleToScale     True    SucceededRescale  the HPA controller was able to update the target scale to 4
ScalingLimited  True    TooManyReplicas   the desired replica count is more than the maximum replica count
Events:
Type    Reason             Age   From                       Message
----    ------             ----  ----                       -------
Normal  SuccessfulRescale  7s    horizontal-pod-autoscaler  New size: 4; reason: external metric pubsub.googleapis.com|subscription|num_undelivered_messages(&LabelSelector{MatchLabels:map[string]string{resource.labels.subscription_id: echo-read,},MatchExpressions:[],}) above target
  • В разделе «Метрики» отображается последнее значение метри c, наблюдаемое HPA. Дробные значения представлены в миллиединицах . Например, в приведенных выше выходных данных имеется 4 реплики приложения, а текущее количество неподтвержденных сообщений в подписке Pub / Sub - 9. Итак, среднее количество сообщений на реплику составляет 2,25, или 2250 м .

Возвращаемые данные метрик сбивают меня с толку. Когда я запустил эту команду, количество незапакованных сообщений знаний было около 4 в соответствии с показателями консоли. Так что я не понимаю, что значит 200 м? Почему бы не сказать 4?

  • Это означает, что в вашем случае 200m/1 означает, что на данный момент среднее количество недоставленных сообщений на одну запущенную реплику составляет 0,2 (20%) на момент измерения HPA.

Соображения:

  • Убедитесь, что вы делаете показания на консоли показателей и HPA примерно на в то же время, чтобы избежать расхождений из-за масштабирования, выполняемого во время чтения.
  • чтение 4 сообщений для 5 модулей приведет к нагрузке 800 м, но в этот момент HPA может уже выполнять другое масштабирование событие.

  • Я рекомендую вам одновременно считывать показания консоли метрик и HPA и проверять снова.

Если вы все еще думаю, что результаты не соответствуют сообщению здесь с обновленным описанием hpa, и мы можем взглянуть еще раз.


EDIT:

Есть ли все же чтобы показатели c не были средними по модулям? Т.е. если есть 5 распакованных сообщений, данные метрики будут равны 5000 м?

Из справочника по API Kubernetes ExternalMetricSource v2beta1 Autoscaling :

  • targetAverageValue - это целевое значение глобального показателя c для каждого пакета (в виде количества).

  • targetValue - это целевое значение метри c (как количество).

Обратите внимание, что targetAverageValue и targetValue являются взаимоисключающими.

Поэтому, если вам нужна общая сумма вместо среднего, просто поменяйте их местами на HPA.

...