我目前正在尝试为我在 Kubernetes 中运行的应用程序设置水平 pod 自动缩放器。 HPA 依赖于通过 Prometheus 适配器(https://github.com/kubernetes-sigs/prometheus-adapter)从 Prometheus 获取的外部指标。
指标由适配器获取并成功提供给 Kubernetes 指标 API,但 metricLabels 映射为空,使得 HPA 无法将正确的指标与正确的 pod 相关联。
例如。对指标 API 的查询
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/<namespace>/batchCommandsActive_totalCount/"
{"kind":"ExternalMetricValueList","apiVersion":"external.metrics.k8s.io/v1beta1","metadata":{},"items":[{"metricName":"batchCommandsActive_totalCount",**"metricLabels":{}**,"timestamp":"2023-02-10T11:38:48Z","value":"0"}]}
这些指标应该有三个与之关联的标签(主机名、本地节点和路径),以便正确的 pod 检索它们。
这里是 Prometheus 适配器配置映射的摘录,它定义了 Prometheus 适配器对 Prometheus 的查询
- seriesQuery: '{__name__="batchCommandsActive_totalCount",hostname!="",localnode!="",path!=""}'
metricsQuery: sum(<<.Series>>{<<.LabelMatchers>>}) by (name)
resources:
namespaced: false
感谢您的帮助!
到目前为止,StackOverflow 或教程(例如 https://github.com/kubernetes-sigs/prometheus-adapter/blob/master/docs/walkthrough.md)没有任何答案帮助解决了我的问题。
我找到了我自己问题的答案。这是给那些可能有同样问题的人的。
Prometheus 和 Kubernetes 指标 API 中的指标使用驼峰式大小写(例如 sessionTotal)。即使在 HorizontalPodAutoscaler 定义中使用了这些命名,HPA 在幕后将指标名称(sessionTotal -> sessiontotal)小写化,导致指标 API 产生 404 响应。
因此,如果您使用驼峰式大小写作为指标名称,请注意此问题