kubernetes - Kubernetes Autoscaling 额外的自定义指标
问题描述
我想将自定义指标添加到我现有的 cpu 指标中,所以我需要两个指标。我的第二个指标必须是自定义指标/外部指标,它向网络服务器发出请求并获得一个值,这可能吗?
目前它看起来像这样,但我想添加第二个指标,但如何?
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
正如我在文档中读到的那样,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_metric
从External Metrics API查询指标。这意味着,此 API 必须存在于您的集群中,此配置才能正常工作。
如果指标与 Kubernetes 对象相关联,您将使用 a type: Object
,如果指标来自您尝试自动缩放的 pod 控制器(例如部署)的 pod,您将使用type: Pods
. 在这两种情况下,HPA 都会尝试从Custom Metrics API获取指标。
注意(因为您似乎正在尝试使用 Kubernetes 中尚未使用的指标):
HPA 只能与指标 API 对话:Resource Metrics API、Custom Metrics API、External Metrics API。
如果您的指标不是由这些 API 之一提供服务,那么您必须创建一个指标管道,将指标带到这些 API 之一。
例如,使用Prometheus和Prometheus 适配器:
- 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 公开的指标。您可以通过在集群中安装“指标管道”来做到这一点。
您可以自己为指标管道选择组件。唯一的要求是指标管道能够:
- 收集指标
- 实施自定义指标 API
指标管道的一个流行选择是使用Prometheus和Prometheus Adapter:
- Prometheus 收集指标(您想要的任何指标)
- Prometheus Adapter 实现 Custom Metrics API 并通过 Custom Metrics API 暴露 Prometheus 收集的指标
外部指标 API
提供与 Kubernetes 对象无关的自定义指标。
外部指标 API 的工作方式与自定义指标 API 相同。唯一的区别是它有不同的 API 路径(不包括对象,但只有指标名称)。
要提供外部指标 API,在大多数情况下,您可以使用与自定义指标 API 相同的指标管道(例如 Prometheus 和 Prometheus 适配器)。
推荐阅读
- html - 基于类而不是 id 连接到链接的锚标记
- javascript - 如何避免跳过第二个数组中的数组索引?
- python - Django Rest Framework - 一对多关系不起作用
- spring - Spring Boot、Elasticsearch 6.2.4、Gradle 依赖问题
- reactjs - 如何测试 React 道具中的 html 按钮?
- adobe-xd - Adobe XD Apple UI 资源
- python - 如何在我的 pybuilder 脚本中使用源代码方法?
- excel - 基于当前工作簿中单元格(日期)的 Excel 外部引用
- python - Python中文本文件的排行榜
- java - 为什么我不能在 java 中同时使用 STDdraw 和 STDAudio 类?