#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 .
Надеюсь, это поможет, и несколько настроек должны улучшить соответствие вашим ожиданиям. Удачи там!