0

我有一个在 Google Kubernetes Engine 中运行的 Kubernetes 集群,我希望根据 GCP Pub/Sub 订阅未完成的消息数量来扩展部署。我找到并遵循了 Google 的指南,该指南准确涵盖了涉及部署custom-metrics-stackdriver-adapter 的场景

但是,因为我的订阅名称在运行时超过 63 个字符,所以kubectl describe hpa <MY_HPA_NAME>我收到以下事件。

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

如何使用超过 63 个字符的订阅名称作为触发 HPA 的指标?

额外问题

我确实尝试查看暴露的指标值,但是当我查询 Kubernetes Custom Metrics API 时,我无法通过执行以下操作看到该指标的任何实际值:

$ 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。这一次,Pod 实际上按照我的预期进行了扩展,但是当我像上面那样查询自定义指标 API 时,它仍然返回并且是空"items"列表。

我应该期望在该响应(及其标签)中看到值吗?如果没有 Pod,Kubernetes 是如何扩展 Pod"items"的?

4

1 回答 1

1

这是Kubernetes 的设计文档。除了缩短标签名称之外,没有其他方法可以避免这种限制。

rfc1035/rfc1123 标签 (DNS_LABEL):一个字母数字(az 和 0-9)字符串,最大长度为 63 个字符,除了第一个或最后一个字符之外的任何位置都允许使用“-”字符,适合用作主机名或域名中的分段。

为指标项检查外部指标 API 而不是自定义指标 API。

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

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

于 2020-03-14T12:29:46.500 回答