【问题标题】:How to get list of metrics available for HPA?如何获取可用于 HPA 的指标列表?
【发布时间】:2020-02-04 15:41:50
【问题描述】:

我有 GCP 集群,其中包含 GKE 应用程序:

我想使用 HPA 扩展应用程序

基于supporting for metrics

HPA 能够从

读取指标
  • metrics.k8s.io(资源指标)

  • custom.metrics.k8s.io(自定义指标)

  • external.metrics.k8s.io(外部指标)

如何查看可用的指标?我怎么能自己尝试这个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 的指标

【问题讨论】:

  • 您能建议您的步骤/配置吗?你有没有使用任何教程?您想获得什么类型的指标?

标签: kubernetes google-cloud-platform horizontal-scaling hpa


【解决方案1】:

指标服务器通过以下 API 公开指标。

  1. /nodes - 所有节点指标; type []NodeMetrics
  2. /nodes/{node} - 指定节点的指标; type NodeMetrics
  3. /namespaces/{namespace}/pods - 命名空间内的所有 pod 指标 支持所有命名空间; type []PodMetrics
  4. /namespaces/{namespace}/pods/{pod} - 指定 pod 的指标; type PodMetrics

例如,您可以查看以下可用指标

$ 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。

自定义指标

这些由供应商开发的适配器提供,可用的指标取决于适配器。知道指标名称后,您可以使用 API 访问它。

您可以查看如下可用指标并获取指标名称。

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

外部指标

这些由供应商开发的适配器提供,可用的指标取决于适配器。知道指标名称后,您可以使用 API 访问它。

您可以查看如下可用指标并获取指标名称。

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

编辑:

您已经拥有 Prometheus 适配器,但如果该指标未作为自定义指标公开以供 HPA 使用,那么您需要公开所需的指标。请参阅此guide

【讨论】:

  • 在哪里可以找到 KUBE-APISERVER-IP ?
  • 您有一个来自 GKE 的 kubernetes 集群...您曾经使用 kubectl 连接到它吗?运行此命令以获取 kubeconfig 文件 gcloud container clusters get-credentials 然后运行 ​​kubectl config view 以查看 apiserver 端点..for more details cloud.google.com/kubernetes-engine/docs/how-to/…
  • 我已经执行了你提到的查询,但我只看到 2 个指标 - CPU 和内存。你能解释一下这个输出吗?
  • CPU 和内存指标由指标服务器公开,可用于 HPA。对于自定义和外部指标,您需要咨询提供指标的供应商
【解决方案2】:

GKE 的情况有点不同。

默认Kubernetes 有一些内置指标(CPU 和内存)。如果你想根据这个指标使用HPA,你不会有任何问题。

GCP概念中:

  • 当您想要使用 Kubernetes 工作负载导出的指标或附加到 Kubernetes 对象(例如 PodNode)的指标时,使用 Custom Metrics
  • External Metrics- 以external.googleapis.com 开头的指标类型发送到工作区的指标称为external metrics。这些指标通常由开源项目和第三方提供商导出。更多详情请见hereStackdriver Monitoring 对待 external metricscustom metrics 相同,但有一个例外。对于外部指标,全局的 resource_type 无效,并导致指标数据被丢弃。

由于 GKE 与 Stackdriver 集成

Google Kubernetes Engine (GKE) 包括与 Stackdriver Monitoring 和 Stackdriver Logging 的原生集成。创建 GKE 集群时,Stackdriver Kubernetes Engine Monitoring 会默认启用,并提供专门为 Kubernetes 量身定制的监控仪表板。

使用Stackdriver Kubernetes Engine Monitoring,您可以控制 Stackdriver Logging 是否收集应用程序日志。您还可以选择完全禁用 Stackdriver Monitoring 和 Stackdriver Logging 集成。

检查可用指标

当您使用云环境 - GKE 时,您可以通过在适当的端口上 curiling localhost 来找到所有默认的可用指标。你必须 SSH to one of Nodes 然后 curl metric-server $ curl localhost:10255/metrics

第二种方法是检查available metrics documentation

重要

您可以查看可用的指标,但是要在 HPA 中使用它们,您需要部署 Adapters,例如 Stackdriver adapterPrometheus adapter。在默认(版本 1.13.11)GKE 集群中,您已经部署了 metrics-serverheapster(在较新版本中已弃用)和 prometheus-to-sd-XXX。如果你想使用Stackdriver,你应该已经应用了很多配置,但是如果你想使用Prometheus,你需要调整Prometheus operatorsadaptersdeployments。详情可见here

GKE 文档中,您可以找到一些使用HPA with Custom MetricsHPA with External Metrics 的教程。你也可以阅读GKE monitoring with Prometheus and Stackdriver,这取决于你的需要。

由于GKEStackdriver 集成,您可以阅读有关Enabling Monitoring 的文章。

【讨论】:

    猜你喜欢
    • 2020-07-22
    • 2019-08-09
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2020-07-03
    • 2021-02-12
    相关资源
    最近更新 更多