对于指标"more than 63 characters",通过自定义衡量指标堆栈驱动程序适配器进行水平容器自动缩放失败



我有一个运行在Google Kubernetes Engine中的Kubernete集群,我希望根据GCP Pub/Sub订阅未完成的消息数量来扩展部署。我发现并遵循了谷歌的一份指南,该指南正好涵盖了这个场景,其中涉及部署自定义度量stackdriver适配器。

但是,当我运行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

如何使用超过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。这一次,pods实际上按照我的预期缩放了,但当我如上查询Custom Metric API时,它仍然返回空的"items"列表。

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

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

rfc1035/rfc1123-label(DNS_label(:一个字母数字(a-z和0-9(字符串,最大长度为63个字符,除第一个或最后一个字符外,任何地方都允许使用"-"字符,适合用作域名中的主机名或段。

检查度量项目的外部度量API而不是自定义度量API。

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

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

相关内容

  • 没有找到相关文章

最新更新