Kubernetes 使用curl检索自定义`custom.metrics.k8s.io`值

Kubernetes 使用curl检索自定义`custom.metrics.k8s.io`值,kubernetes,Kubernetes,我可以列出所有可用的custom.metrics,但我不知道如何查询单个值。例如,我尝试过: curl http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/ | jq . { "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "custom.metrics.k8s.io/v1beta1", "resources": [ {

我可以列出所有可用的
custom.metrics
,但我不知道如何查询单个值。例如,我尝试过:

curl http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/ | jq .

{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "custom.metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "deployments.apps/aws_sqs_approximate_number_of_messages_visible_average",
      "singularName": "",
      "namespaced": false,
      "kind": "MetricValueList",
      "verbs": [
        "get"
      ]
    }
  ]
}
但如果我尝试这样做:

curl http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/deployments.apps/aws_sqs_approximate_number_of_messages_visible_average | jq .

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "the server could not find the requested resource",
  "reason": "NotFound",
  "details": {

  },
  "code": 404
}

我有一个404。我已经看到了如何获取名称空间度量,但我的度量没有名称空间?有关于如何使用此API的定义吗?

因为我使用的是
DirectXMan12/k8s prometheus适配器
,有几件事需要知道:

    • 这是我真正的问题
  • 使用自定义度量API非常简单:

  • kubectl proxy
    打开kubernetes API的代理
  • curlhttp://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/
    列出所有可用的自定义指标
  • 例如,您可能会看到:

        {
          "name": "deployments.extensions/kube_deployment_status_replicas_available",
          "singularName": "",
          "namespaced": true,
          "kind": "MetricValueList",
          "verbs": [
            "get"
          ]
        }
    
    我们知道它是从
    namespaced:true
    命名的,在名称空间下面,我们可以通过部署从
    name
    字段中进行选择

    因此,我们将按如下方式构建查询:

    curl http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/namespace/$NAMESPACE/deployments.extensions/$DEPLOYMENT/kube_deployment_status_replicas_available
    
    
    
    至少我认为它应该是这样工作的,尽管如果您在没有部署的情况下执行相同的查询。扩展将显示名称空间的值:

    curl http://localhost:8001/apis/custom.metrics.k8s.io/v1beta1/namespace/$NAMESPACE/kube_deployment_status_replicas_available
    

    这可能是由于prometheus中查询的执行方式。

    与资源度量一样,自定义度量也绑定到Kubernetes对象。 URL中缺少的是希望度量与之相关的资源。 例如,与自定义度量相关的Pod,但部署也是如此

    尝试根据您的需要调整此url:

    kubectl get --raw \
    '/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pod/podinfo-67c9fd95d-fqk4g/http_requests_per_second' \
    | jq .
    
    以下是我们在2019年FOSDEM大会上关于普罗米修斯适配器的演讲幻灯片:


    一旦视频也可用,我将更新此答案。

    迫不及待地想看视频!我相信这真的会有帮助。