Kubernetes 如何获取HPA可用的指标列表?

Kubernetes 如何获取HPA可用的指标列表?,kubernetes,google-cloud-platform,horizontal-scaling,hpa,Kubernetes,Google Cloud Platform,Horizontal Scaling,Hpa,我有包含GKE应用程序的GCP群集: 我想使用 基于 能够从中读取度量 metrics.k8s.io资源指标 custom.metrics.k8s.iocustom metrics external.metrics.k8s.ioexternal metrics 我如何检查可用的指标?我怎么能自己尝试这个API呢?有可能吗 附笔。 根据建议的答案,我执行了以下命令: kubectl get --raw https://MY-KUBE-APISERVER-IP:6443/apis/metrics

我有包含GKE应用程序的GCP群集:

我想使用

基于

能够从中读取度量

metrics.k8s.io资源指标

custom.metrics.k8s.iocustom metrics

external.metrics.k8s.ioexternal metrics

我如何检查可用的指标?我怎么能自己尝试这个API呢?有可能吗

附笔。 根据建议的答案,我执行了以下命令:

 kubectl get --raw https://MY-KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods
答复是:

{
  "items": [
    {
      "metadata": {
        "name": "prometheus-adapter-69fcdd56bc-2plh7",
        "namespace": "default",
        "selfLink": "/\r\napis/metrics.k8s.io/v1beta1/namespaces/default/pods/prometheus-adapter-69fcdd56bc-2plh7",
        "creationTimestamp": "2020-02-05T10:56:02Z"
      },
      "timestamp": "2020-02-05T10:55:22Z",
      "window": "30s",
      "containers": [
        {
          "name": "prometheus-adapter",
          "usage": {
            "cpu": "15\r\n31939n",
            "memory": "10408Ki"
          }
        }
      ]
    },
    {
      "metadata": {
        "name": "stackdriver-exporter-76fdbc9d8f-c285l",
        "namespace": "default",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/stackdriver-exporter-76fdbc9d8f-c285l",
        "creationTimestamp": "2020-0\r\n2-05T10:56:02Z"
      },
      "timestamp": "2020-02-05T10:55:22Z",
      "window": "30s",
      "containers": [
        {
          "name": "stackdriver-exporter",
          "usage": {
            "cpu": "79340n",
            "memory": "2000Ki"
          }
        }
      ]
    }
  ],
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
  }
}


$ kubectl top pods
NAME                                    CPU(cores)   MEMORY(bytes)
prometheus-adapter-69fcdd56bc-2plh7     2m           10Mi
stackdriver-exporter-76fdbc9d8f-c285l   1m           1Mi

但我仍然看不到HPA的所有可用指标。metrics server通过以下API公开指标

/节点-所有节点度量;类型[]节点矩阵 /nodes/{node}-指定节点的度量;类型节点矩阵 /namespaces/{namespace}/pods-命名空间中的所有pod度量 支持所有名称空间;类型[]PodMetrics /namespaces/{namespace}/pods/{pod}-指定pod的度量; 类型度量 例如,您可以查看以下可用指标

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "nodes",
      "singularName": "",
      "namespaced": false,
      "kind": "NodeMetrics",
      "verbs": [
        "get",
        "list"
      ]
    },
    {
      "name": "pods",
      "singularName": "",
      "namespaced": true,
      "kind": "PodMetrics",
      "verbs": [
        "get",
        "list"
      ]
    }
  ]
}

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods
{
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
  },
  "items": []
}

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods
{
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods"
  },
  "items": [
    {
      "metadata": {
        "name": "coredns-bcccf59f-jfl6x",
        "namespace": "kube-system",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-jfl6x",
        "creationTimestamp": "2021-02-17T20:31:29Z"
      },
      "timestamp": "2021-02-17T20:30:27Z",
      "window": "30s",
      "containers": [
        {
          "name": "coredns",
          "usage": {
            "cpu": "1891053n",
            "memory": "8036Ki"
          }
        }
      ]
    },
    {
      "metadata": {
        "name": "coredns-bcccf59f-vmfvv",
        "namespace": "kube-system",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-vmfvv",
        "creationTimestamp": "2021-02-17T20:31:29Z"
      },
      "timestamp": "2021-02-17T20:30:25Z",
      "window": "30s",
      "containers": [
        {
          "name": "coredns",
          "usage": {
            "cpu": "1869226n",
            "memory": "8096Ki"
          }
        }
      ]
    }
  ]
}
您还可以使用命令kubectl top pods,该命令在内部调用上述API

自定义指标

这些由供应商开发的适配器提供,可用的度量标准取决于适配器。一旦知道度量名称,就可以使用它来访问它

您可以按如下所示查看可用指标并获取指标名称

kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/custom.metrics.k8s.io/v1beta1
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/external.metrics.k8s.io/v1beta1
外部指标

这些由供应商开发的适配器提供,可用的度量标准取决于适配器。一旦知道度量名称,就可以使用它来访问它

您可以按如下所示查看可用指标并获取指标名称

kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/custom.metrics.k8s.io/v1beta1
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/external.metrics.k8s.io/v1beta1
编辑:


您已经有了Prometheus适配器,但是如果度量没有作为HPA可使用的自定义度量公开,那么您需要公开所需的度量。请参阅此说明。

度量服务器通过以下API公开度量

/节点-所有节点度量;类型[]节点矩阵 /nodes/{node}-指定节点的度量;类型节点矩阵 /namespaces/{namespace}/pods-命名空间中的所有pod度量 支持所有名称空间;类型[]PodMetrics /namespaces/{namespace}/pods/{pod}-指定pod的度量; 类型度量 例如,您可以查看以下可用指标

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1
{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "nodes",
      "singularName": "",
      "namespaced": false,
      "kind": "NodeMetrics",
      "verbs": [
        "get",
        "list"
      ]
    },
    {
      "name": "pods",
      "singularName": "",
      "namespaced": true,
      "kind": "PodMetrics",
      "verbs": [
        "get",
        "list"
      ]
    }
  ]
}

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/default/pods
{
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/default/pods"
  },
  "items": []
}

$ kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods
{
  "kind": "PodMetricsList",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods"
  },
  "items": [
    {
      "metadata": {
        "name": "coredns-bcccf59f-jfl6x",
        "namespace": "kube-system",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-jfl6x",
        "creationTimestamp": "2021-02-17T20:31:29Z"
      },
      "timestamp": "2021-02-17T20:30:27Z",
      "window": "30s",
      "containers": [
        {
          "name": "coredns",
          "usage": {
            "cpu": "1891053n",
            "memory": "8036Ki"
          }
        }
      ]
    },
    {
      "metadata": {
        "name": "coredns-bcccf59f-vmfvv",
        "namespace": "kube-system",
        "selfLink": "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/coredns-bcccf59f-vmfvv",
        "creationTimestamp": "2021-02-17T20:31:29Z"
      },
      "timestamp": "2021-02-17T20:30:25Z",
      "window": "30s",
      "containers": [
        {
          "name": "coredns",
          "usage": {
            "cpu": "1869226n",
            "memory": "8096Ki"
          }
        }
      ]
    }
  ]
}
您还可以使用命令kubectl top pods,该命令在内部调用上述API

自定义指标

这些由供应商开发的适配器提供,可用的度量标准取决于适配器。一旦知道度量名称,就可以使用它来访问它

您可以按如下所示查看可用指标并获取指标名称

kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/custom.metrics.k8s.io/v1beta1
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/external.metrics.k8s.io/v1beta1
外部指标

这些由供应商开发的适配器提供,可用的度量标准取决于适配器。一旦知道度量名称,就可以使用它来访问它

您可以按如下所示查看可用指标并获取指标名称

kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/custom.metrics.k8s.io/v1beta1
kubectl get --raw https://KUBE-APISERVER-IP:6443/apis/external.metrics.k8s.io/v1beta1
编辑:

您已经有了Prometheus适配器,但是如果度量没有作为HPA可使用的自定义度量公开,那么您需要公开所需的度量。请参考此说明。

关于GKE的情况有点不同

默认情况下,Kubernetes具有一些内置的CPU和内存指标。如果您希望使用基于此指标的HPA,则不会有任何问题

在GCP概念中:

当您希望使用Kubernetes工作负载导出的度量或附加到Kubernetes对象(如Pod或节点)的度量时,将使用自定义度量。 外部度量-发送到度量类型以External.googleapis.com开头的工作区的度量称为外部度量。这些指标通常由开源项目和第三方提供商导出。可以找到更多细节。 Stackdriver监控将外部度量与自定义度量相同,但有一个例外。对于外部度量,全局的资源类型无效,并导致度量数据被丢弃。 由于GKE与

Google Kubernetes引擎GKE包括与Stackdriver监控和Stackdriver日志的本机集成。创建GKE集群时,默认情况下会启用Stackdriver Kubernetes引擎监控,并提供专门为Kubernetes定制的监控仪表板

通过Stackdriver Kubernetes引擎监控,您可以控制Stackdriver日志记录是否收集应用程序日志。您还可以选择禁用Stackdriver监控和Stackdriver日志记录集成

检查可用指标

当您使用CloudEnvironment-GKE时,您可以通过在适当的端口上查询localhost来找到所有默认可用的度量。您必须使用SSH连接到其中一个节点,然后使用curl metric服务器$curl localhost:10255/metrics

第二种方法是检查

重要的

您可以看到可用的指标,但是要在HPA中使用它们,您需要部署诸如Stackdriver适配器或Prometheus适配器之类的适配器。在默认版本1.13.11的GKE集群中,您已经部署了metrics server,heapsterdeprecated在较新的版本和中。 如果您想使用Stackdriver,您可能已经应用了许多配置,但是如果您想使用Prometheus,您需要调整Prometheus操作符、适配器和部署。详情请参阅

在GKE文档中,您可以找到一些教程供您使用或使用。你也可以阅读,这取决于你的需要

由于GKE与Stackdriver集成在一起,所以您可以阅读关于GKE的文章。

关于GKE的案例有点不同

默认情况下,Kubernetes具有一些内置的CPU和内存指标。如果您希望使用基于此指标的HPA,则不会有任何问题

在GCP概念中:

当您希望使用Kubernetes工作负载导出的度量或附加到Kubernetes对象(如Pod或节点)的度量时,将使用自定义度量。 外部度量-发送到度量类型以External.googleapis.com开头的工作区的度量称为外部度量。这些指标通常由开源项目和第三方提供商导出。可以找到更多细节。 Stackdriver监控将外部度量与自定义度量相同,但有一个例外。对于外部度量,全局的资源类型无效,并导致度量数据被丢弃。 由于GKE与

Google Kubernetes引擎GKE包括与Stackdriver监控和Stackdriver日志的本机集成。创建GKE集群时,默认情况下会启用Stackdriver Kubernetes引擎监控,并提供专门为Kubernetes定制的监控仪表板

通过Stackdriver Kubernetes引擎监控,您可以控制Stackdriver日志记录是否收集应用程序日志。您还可以选择禁用Stackdriver监控和Stackdriver日志记录集成

检查可用指标

当您使用CloudEnvironment-GKE时,您可以通过在适当的端口上查询localhost来找到所有默认可用的度量。您必须使用SSH连接到其中一个节点,然后使用curl metric服务器$curl localhost:10255/metrics

第二种方法是检查

重要的

您可以看到可用的指标,但是要在HPA中使用它们,您需要部署诸如Stackdriver适配器或Prometheus适配器之类的适配器。在默认版本1.13.11的GKE集群中,您已经部署了metrics server,heapsterdeprecated在较新的版本和中。如果您想使用Stackdriver,您可能已经应用了许多配置,但是如果您想使用Prometheus,您需要调整Prometheus操作符、适配器和部署。详情请参阅

在GKE文档中,您可以找到一些教程供您使用或使用。你也可以阅读,这取决于你的需要


由于GKE与Stackdriver集成在一起,您可以阅读有关的文章。

我在哪里可以找到KUBE-APISERVER-IP?有这样的snth吗?您有一个kubernetes群集om GKE…您是否使用kubectl连接到它?运行此命令获取kubeconfig文件gcloud container clusters get credentials,然后运行kubectl config view查看apiserver端点..有关更多详细信息,我已经执行了您提到的查询,但我只看到了两个指标-CPU和内存。您能解释一下这个输出吗?CPU和内存度量由度量服务器公开,HPA可以使用。对于自定义和外部指标,您需要咨询提供指标的供应商我在哪里可以找到KUBE-APISERVER-IP?有这样的snth吗?您有一个kubernetes群集om GKE…您是否使用kubectl连接到它?运行此命令获取kubeconfig文件gcloud container clusters get credentials,然后运行kubectl config view查看apiserver端点..有关更多详细信息,我已经执行了您提到的查询,但我只看到了两个指标-CPU和内存。您能解释一下这个输出吗?CPU和内存度量由度量服务器公开,HPA可以使用。对于自定义和外部指标,您需要咨询提供指标的供应商。您可以建议您的步骤/配置吗?你用过任何教程吗?您希望获得什么类型的指标?您能建议您的步骤/配置吗?你用过任何教程吗?您希望获得什么类型的度量?