kubernetes - 如何将外部指标提供给 HPA?
问题描述
问题设置。假设我有 2 个 pod,A 和 B。我希望能够根据来自任意来源的任意数量动态扩展 pod A。假设 pod B 是这样一个源:例如,它可以有一个带有端点的 HTTP 服务器,该端点在请求时以 pod A 的所需副本数量进行响应。或者它可能是一个 ES 服务器或一个 SQL DB(没关系)。
问题。我需要定义哪些 kubernetes 对象来实现这一点(除了 HPA)?HPA 应该知道什么配置需要查找 B 以获取当前指标?B 的 API 应该是什么样子(或者有什么限制?)?
我做过的研究。不幸的是,官方文档并没有说太多,除了声明有这种可能性。还有两个存储库,一个包含一些我无法构建的 go 样板代码,另一个没有任何使用说明(尽管据称确实满足“HTTP 上的外部指标”要求)。
通过查看.yaml
这些存储库中的配置,我得出一个结论,除了需要定义一个对象之外,Deployment
还Service
需要定义一个APIService
对象,该对象在 kubernetes API 中注册外部或自定义指标并将其与普通服务链接(您将在其中拥有您的pod) 和一些ClusterRole
和ClusterRoleBinding
对象。但是没有任何解释。此外,我什至无法像其他对象一样在本地集群(1.15 版本)中使用 kubectl 列出现有的 APIServices。
解决方案
最简单的方法是将指标输入 Prometheus(这是一个常见问题),然后设置一个基于 Prometheus 的 HPA(也是一个常见问题)。
1. 将自己的指标提供给 Prometheus
- 从Prometheus-Operator开始监控集群本身,并访问
ServiceMonitor
对象。ServiceMonitors 是指向集群中服务的指针。他们让你的 pod 的/metrics
端点被 prometheus 服务器发现和抓取。 /metrics
编写一个从您的 3rd 方 API 读取指标并在自己的端点中显示它们的 pod 。这将是您的 API 和 Prometheus 格式之间的适配器。当然还有客户端:https ://github.com/prometheus/client_python#exporting- 写一个代表你的 pod
Service
的类型ClusterIP
。 - 写一个
ServiceMonitor
指向服务的。 - 通过 Prometheus 仪表板查询您的自定义指标,以确保完成此阶段。
2. 设置基于 Prometheus 的 HPA
- 设置Prometheus-Adapter并遵循 HPA 演练。
- 或按照指南https://github.com/stefanprodan/k8s-prom-hpa
这看起来像是获得 HPA 的大量工作。但是,这里只有适配器 pod 是自定义部件。其他一切都是大多数集群中的标准堆栈设置,无论如何您都会获得许多其他用例。
推荐阅读
- excel - Excel VBA - 多个正则表达式模式删除
- php - 尝试将图像从 JSON 文件加载到 php 时出错
- fltk - 如何更改 fltk 中 FL_HOR_NICE_SLIDER 的条形颜色?
- c# - 天蓝色聊天机器人不工作。从视觉工作室发布后(2017)
- csv - 在 python 中读取 CSV 文件但有问题
- angular - 如何在 Angular 6 中调用 http get 服务之前从 JSON 文件中读取 url
- python - Matlab findpeaks算法到Python
- kotlin - kotlin 检查数据 json 字符串是否为空
- angular - 如何在 Linux 服务计划上的 Azure Web App 中为 Angular 设置“默认页面”
- mongodb - Mongo 聚合对象与 $lookup 使用不匹配的值