1

我正在使用DirectXMan12/k8s-prometheus-adapte将外部指标从 Prometheus 推送到 Kubernetes。

推送外部指标后,如何验证数据是 k8s?

当我点击kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | jq我得到了以下结果,但在那之后,我不知道如何获取实际的指标值

{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "external.metrics.k8s.io/v1beta1",
  "resources": [
   {
     "name": "subscription_back_log",
     "singularName": "",
     "namespaced": true,
     "kind": "ExternalMetricValueList",
     "verbs": [
       "get"
     ]
  }]
}
4

2 回答 2

1

该指标是命名空间的,因此您需要将命名空间添加到 URL 中。与其他答案的建议相反,我相信您不需要在 URL 中包含 pod。这是一个外部指标。外部指标不与任何 kubernetes 对象相关联,因此只有命名空间就足够了:

  • /apis/external.metrics.k8s.io/v1beta1/namespaces/<namespace>/<metric_name>

这是一个适用于我的示例,在我的设置中使用外部指标:

$ kubectl get --raw /apis/external.metrics.k8s.io/v1beta1 | jq                                               
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "external.metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "redis_key_size",
      "singularName": "",
      "namespaced": true,
      "kind": "ExternalMetricValueList",
      "verbs": [
        "get"
      ]
    }
  ]
}
$ kubectl get --raw /apis/external.metrics.k8s.io/v1beta1/namespaces/default/redis_key_size

{
  "kind": "ExternalMetricValueList",
  "apiVersion": "external.metrics.k8s.io/v1beta1",
  "metadata": {},
  "items": [
    {
      "metricName": "redis_key_size",
      "metricLabels": {
        "key": "..."
      },
      "timestamp": "2021-10-07T09:00:01Z",
      "value": "0"
    },
    ...
  ]
}
于 2021-10-07T09:21:03.420 回答
1

每个实例获取实际指标值,例如,您附加的指标是namespaced: true,假设该指标是针对 pod 的,您可以在

kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/wanted_namepsace/pods/*/subscription_back_log" | jq '.'

(或指定 pod 名称而不是 *)

如果您希望 HPA 读取您的指标,则配置为(例如)

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: your-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: your-pod
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - pods:
      metricName: subscription_back_log
      targetAverageValue: 10000
    type: Pods
于 2020-02-29T22:35:29.937 回答