HPA labelSelector не фильтрует внешние показатели - PullRequest
0 голосов
/ 08 ноября 2019

Я пытаюсь настроить систему автоматического масштабирования на основе пользовательских метрик в кластере 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) но вместо этого фильтр игнорируется и возвращаются все результаты.

...