значение внешних метрик странно в kubernetes hpa

#kubernetes

#kubernetes

Вопрос:

Я изучаю kubernetes и тестирую некоторый пример.

У меня возникла проблема с применением внешних метрик к hpa.

я создал внешние метрики с помощью адаптера prometheus.

поэтому я могу получить внешние показатели, используя

 kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/
  

команда.

результат приведен ниже.

 {"kind":"APIResourceList","apiVersion":"v1","groupVersion":"external.metrics.k8s.io/v1beta1","resources":[{"name":"redis_keys","singularName":"","namespaced":true,"kind":"ExternalMetricValueList","verbs":["get"]}]}
  

и я могу получить значение показателей, используя

 kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys
  

команда.

результат приведен ниже.

 {"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{"selfLink":"/apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_keys"},"items":[{"metricName":"redis_keys","metricLabels":{},"timestamp":"2020-10-28T08:39:09Z","value":"23"}]}
  

и я применил метрику к hpa.

ниже приведена конфигурация hpa.

 apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: taskqueue-autoscaler
spec:
  scaleTargetRef:
          #apiVersion: extensions/v1beta1
    apiVersion: apps/v1
    kind: Deployment
    name: taskqueue-consumer
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: External
    external:
      metricName: redis_keys
      targetAverageValue: 20
  

после изменения hpa,

я протестировал эту команду.

 kubectl get hpa
  

и результат странный.

 NAME                   REFERENCE                       TARGETS           MINPODS   MAXPODS   REPLICAS   AGE
taskqueue-autoscaler   Deployment/taskqueue-consumer   11500m/20 (avg)   1         10        2          63m
  

я думаю, что это значение (11500m) неверно, потому что результат значения запроса равен 23.

Где я должен видеть в этом случае?

Ответ №1:

На самом деле это правильно, но это также сложно, потому что это связано с несколькими разными вещами с ресурсом HPA, которые не сразу очевидны. Поэтому я буду объяснять это по одному.

Во-первых, единицы измерения. API Metrics попытается вернуть целые единицы, когда это возможно, но также возвращает миллионные единицы, что может привести к вышеуказанному. На самом деле, то, что вы видите, — это 11,5, преобразованное в 11500m, но это одно и то же. Проверьте эту ссылку на «Количествах» метрик HPA, которая охватывает его немного больше.

Далее, на данный момент вы видите две реплики со значением из Metrics API, равным 23. Поскольку вы установили метрику в качестве среднего значения внешней метрики, она делит значение метрики на количество реплик в кластере, что приводит к 11,5 или 11500 миллионам при просмотре ресурса HPA. Это объясняет, почему вы видите только 2 реплики, в то время как значение показателя «выше» вашего порога. Проверьте эту ссылку на автоматическое масштабирование с помощью нескольких и пользовательских метрик, в частности, раздел о «объектных» метриках. И ниже по странице они проскальзывают в этой строке относительно внешних показателей, подтверждая, почему вы видите выше.

Внешние метрики поддерживают как целевые типы Value, так и AverageValue, которые функционируют точно так же, как при использовании типа Object .

Надеюсь, это поможет, и несколько настроек должны улучшить соответствие вашим ожиданиям. Удачи там!