Горизонтальное автоматическое масштабирование с помощью адаптера custom-metrics-stackdriver не работает для метрик «более 63 символов» - PullRequest
0 голосов
/ 14 марта 2020

У меня есть кластер Kubernetes, работающий в Google Kubernetes Engine, где я буду sh, чтобы масштабировать развертывание в зависимости от количества сообщений, находящихся в подписке GCP Pub / Sub. Я нашел и последовал руководство от Google, которое описывает именно этот сценарий , которое включает в себя развертывание custom-metrics-stackdriver-adapter .

Однако, поскольку имя моей подписки закончилось Когда я запускаю kubectl describe hpa <MY_HPA_NAME> длиной 63 символа, я получаю следующие события.

Events:
  Type     Reason                        Age                From                       Message
  ----     ------                        ----               ----                       -------
  Warning  FailedGetExternalMetric       12s (x2 over 27s)  horizontal-pod-autoscaler  invalid label value: "<MY_VERBOSE_SUBSCRIPTION_NAME>": must be no more than 63 characters
  Warning  FailedComputeMetricsReplicas  12s (x2 over 27s)  horizontal-pod-autoscaler  failed to get pubsub.googleapis.com|subscription|num_undelivered_messages external metric: invalid label value: "<MY_VERBOSE_SUBSCRIPTION_NAME>": must be no more than 63 characters

Как мне go использовать имя подписки, которое превышает 63 символа в качестве метри c для запуска HPA ?

Дополнительные вопросы

Я пытался посмотреть, какие значения метри c выставлены, но когда я запрашивал API пользовательских метрик Kubernetes, я не вижу никаких фактических значений для этого метри c выполнив следующее:

$ kubectl get --raw "http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/namespaces/*/pods/*/pubsub.googleapis.com|subscription|num_undelivered_messages" | jq .

{
  "kind": "MetricValueList",
  "apiVersion": "custom.metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/%2A/pods/%2A/pubsub.googleapis.com%7Csubscription%7Cnum_undelivered_messages"
  },
  "items": []
}

Однако, как вы можете видеть, это вернуло пустые списки "items", указывающие на то, что значения не были записаны. Я предположил, что это произошло из-за того, что все мои подписные имена были длиной более 63 символов. Чтобы проверить это, я сделал новую подписку с очень коротким именем и воссоздал HPA, который будет вызван этой новой подпиской. На этот раз модули действительно масштабировались так, как я ожидал , но , когда я запрашивал пользовательский API-интерфейс Metri c, как указано выше, он все еще возвращался и пустой список "items".

Должен ли я ожидать увидеть значения в этом ответе (и их ярлыки)? Как Кубернетес мог масштабировать стручки, если не было "items"?

1 Ответ

1 голос
/ 14 марта 2020

Вот проектная документация кубернетов. Нет никакого способа избежать ограничения, кроме сокращения имени метки.

метка rfc1035 / rfc1123 (DNS_LABEL): строка alphanumeri c (az и 0-9), с максимальной длиной 63 символы с разрешенным символом «-» в любом месте, кроме первого или последнего символа, подходящие для использования в качестве имени хоста или сегмента в имени домена.

Проверьте API внешних метрик вместо элементов пользовательских метрик для элементов метрик.

$ kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1" | jq

https://itnext.io/google-kubernetes-engine-horizontalpodautoscaler-with-external-metrics-from-pubsub-28780c300305

...