Я пытаюсь настроить систему автоматического масштабирования на основе пользовательских метрик в кластере EKS (v1.13.10-eks-5ac0f1), но похоже, что фильтр labelSelector для внешних меток не фильтрует.
Использование k8s-prometheus-adapter и сервер метрик (v0.3.6) Мне удалось экспортировать метрики из prometheus в виде внешних метрик kubernetes.
Метрика правильно экспортируется и отображаетсяна API kubernetes:
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/sqs_queue_messages"
{
"kind": "ExternalMetricValueList",
"apiVersion": "external.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/external.metrics.k8s.io/v1beta1/namespaces/%2A/sqs_queue_messages"
},
"items": [
{
"metricName": "sqs_queue_messages",
"metricLabels": {
"__name__": "sqs_queue_messages",
...
"queue_name": "temp-queue"
},
"timestamp": "2019-11-07T21:14:44Z",
"value": "0"
},
{
"metricName": "sqs_queue_messages",
"metricLabels": {
"__name__": "sqs_queue_messages",
...
"queue_name": "random-queue"
},
"timestamp": "2019-11-07T21:14:44Z",
"value": "0"
}
]
}
horizontal-pod-autoscaler.yml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: api
namespace: api
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api
minReplicas: 2
maxReplicas: 5
metrics:
- external:
metricName: sqs_queue_messages
metricSelector:
matchLabels:
queue_name: temp-queue
targetAverageValue: "100"
type: External
Проблема заключается в том, что HPA не выбирает только метрику ссоответствует метке, на самом деле, просматривая журналы. Я вижу, что выполняется следующий вызов
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/*/sqs_queue_messages?labelSelector=queue_name%3Dtemp-queue"
Ожидаемый результат - всего 1 элемент (один соответствует queue_name: temp-queue label) но вместо этого фильтр игнорируется и возвращаются все результаты.