如何将可用Prometheus查询转为Prometheus Adapter规则并适配HPA
解决Prometheus Adapter自定义指标暴露问题
核心配置规则
要让Prometheus Adapter正确将你的请求速率指标暴露给K8s自定义Metrics API,直接将以下配置片段放到prometheus-adapter的Helm values.yaml中:
config: rules: - seriesQuery: 'starlette_requests_total{method="POST", path_template="/predict", pod!=""}' resources: overrides: kubernetes_namespace: {resource: "namespace"} kubernetes_pod_name: {resource: "pod"} name: matches: '^starlette_requests_total$' as: 'starlette_predict_post_requests_per_second' metricsQuery: 'rate(<<.Series>>[1m])'
配置说明
- seriesQuery:筛选符合条件的Prometheus时间序列,必须包含
pod标签(确保能关联到K8s Pod资源,避免无关联指标被过滤) - resources:映射Prometheus标签到K8s资源,这里适配kube-prometheus-stack默认采集的指标标签;如果你的指标用的是
namespace/pod这类简化标签,直接替换对应字段即可 - name:给暴露的自定义指标指定易识别名称,这里命名为
starlette_predict_post_requests_per_second - metricsQuery:复用你的速率计算逻辑,
<<.Series>>会自动替换为seriesQuery匹配到的序列
适配你的标签环境
如果你的starlette指标携带的K8s元标签是简化版(比如直接用namespace和pod),修改resources部分:
resources: overrides: namespace: {resource: "namespace"} pod: {resource: "pod"}
应用配置并验证
- 升级prometheus-adapter的Helm部署:
helm upgrade prometheus-adapter prometheus-community/prometheus-adapter -f your-custom-values.yaml -n <你的命名空间>
- 等待Pod重启后,检查自定义Metrics API是否返回指标:
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq .
也可以直接查询特定资源的指标(替换<你的命名空间>):
kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/<你的命名空间>/pods/*/starlette_predict_post_requests_per_second | jq .
HPA配置示例
指标正常暴露后,即可用它配置HPA实现自动扩缩容:
apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata: name: predict-service-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: <你的Deployment名称> minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: starlette_predict_post_requests_per_second target: type: AverageValue averageValue: 100m # 每个Pod每秒平均处理100个请求时触发扩容
内容的提问来源于stack exchange,提问作者Mysterio
相关产品推荐
相关产品推荐

