首页 > 解决方案 > Kubernetes Autoscaling 额外的自定义指标

问题描述

我想将自定义指标添加到我现有的 cpu 指标中,所以我需要两个指标。我的第二个指标必须是自定义指标/外部指标,它向网络服务器发出请求并获得一个值,这可能吗?

目前它看起来像这样,但我想添加第二个指标,但如何?

  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80

正如我在文档中读到的那样,kubernetes 将使用更高的指标来扩展那没关系。有人可以举例说明如何在我的情况下应用此自定义指标吗?

标签: kubernetes

解决方案


如果是外部指标(即与 Kubernetes 对象无关的自定义指标)

 metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 80
  - type: External
    external:
      metric:
        name: your_metric
      target:
        type: Value
        value: "100"

请注意,在这种情况下,HPA 将尝试your_metricExternal Metrics API查询指标。这意味着,此 API 必须存在于您的集群中,此配置才能正常工作。

如果指标与 Kubernetes 对象相关联,您将使用 a type: Object,如果指标来自您尝试自动缩放的 pod 控制器(例如部署)的 pod,您将使用type: Pods. 在这两种情况下,HPA 都会尝试从Custom Metrics API获取指标。


注意(因为您似乎正在尝试使用 Kubernetes 中尚未使用的指标):

HPA 只能与指标 API 对话:Resource Metrics APICustom Metrics APIExternal Metrics API

如果您的指标不是由这些 API 之一提供服务,那么您必须创建一个指标管道,将指标带到这些 API 之一。

例如,使用PrometheusPrometheus 适配器

  • Prometheus 定期从您的外部 Web 服务器中抓取指标
  • Prometheus Adapter 通过 External Metrics API 公开指标

编辑:解释指标 API。

在下图中,绿色组件是您需要安装以提供相应指标 API 的组件。

资源指标 API

提供集群中所有 Pod 和节点的 CPU 和内存使用指标。这些是预定义的指标(与其他两个 API 的自定义指标相反)。

指标的原始数据由cAdvisor收集,cAdvisor作为每个节点上 kubelet 的一部分运行。指标由Metrics Server公开。

Metrics Server 实现了 Resource Metrics API。Kubernetes 中默认不安装它。这意味着,要在集群中启用 Resource Metrics API,您必须安装 Metrics Server。

在此处输入图像描述

自定义指标 API

提供与 Kubernetes 对象关联的自定义指标。指标可以是任何你想要的。

您自己负责收集要通过自定义指标 API 公开的指标。您可以通过在集群中安装“指标管道”来做到这一点。

您可以自己为指标管道选择组件。唯一的要求是指标管道能够:

  1. 收集指标
  2. 实施自定义指标 API

指标管道的一个流行选择是使用PrometheusPrometheus Adapter

  • Prometheus 收集指标(您想要的任何指标)
  • Prometheus Adapter 实现 Custom Metrics API 并通过 Custom Metrics API 暴露 Prometheus 收集的指标

在此处输入图像描述

外部指标 API

提供与 Kubernetes 对象无关的自定义指标。

外部指标 API 的工作方式与自定义指标 API 相同。唯一的区别是它有不同的 API 路径(不包括对象,但只有指标名称)。

要提供外部指标 API,在大多数情况下,您可以使用与自定义指标 API 相同的指标管道(例如 Prometheus 和 Prometheus 适配器)。

在此处输入图像描述


推荐阅读