我有一个在Google Kubernetes Engine中运行的Kubernetes集群,我希望根据GCP Pub/Sub订阅未完成的消息数量来扩展部署。我找到并遵循了Google的指南,该指南涵盖了这种情况,其中涉及部署自定义指标堆栈驱动程序适配器。
然而,因为当我运行kubectl describe hpa时,我的订阅名长度超过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的指标?
我确实尝试过查看暴露的指标值,但当我查询库伯内特斯自定义指标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": []
}
但是,正如您所看到的,这返回了一个空的< code >“items”列表,表明没有记录任何值。我认为这是因为我所有的订阅名称都超过了63个字符。为了测试这一点,我用一个非常短的名称创建了一个新的订阅,并重新创建了由这个新订阅触发的HPA。这一次,pod实际上按照我的预期进行了扩展,但是当我如上查询自定义指标API时,它仍然返回空的< code >“items”列表。
我是否应该期望在响应(及其标签)中看到值?如果没有“items”
,Kubernetes是如何缩放pod的?
这是kubernetes的设计留档。除了缩短标签名称之外,没有其他方法可以避免限制。
RFC1035/RFC1123 标签 (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