4

问题设置。假设我有 2 个 pod,A 和 B。我希望能够根据来自任意来源的任意数量动态扩展 pod A。假设 pod B 是这样一个源:例如,它可以有一个带有端点的 HTTP 服务器,该端点在请求时以 pod A 的所需副本数量进行响应。或者它可能是一个 ES 服务器或一个 SQL DB(没关系)。

问题。我需要定义哪些 kubernetes 对象来实现这一点(除了 HPA)?HPA 应该知道什么配置需要查找 B 以获取当前指标?B 的 API 应该是什么样子(或者有什么限制?)?

我做过的研究。不幸的是,官方文档并没有说太多,除了声明有这种可能性。还有两个存储库,一个包含一些我无法构建的 go 样板代码,另一个没有任何使用说明(尽管据称确实满足“HTTP 上的外部指标”要求)。

通过查看.yaml这些存储库中的配置,我得出一个结论,除了需要定义一个对象之外,DeploymentService需要定义一个APIService对象,该对象在 kubernetes API 中注册外部或自定义指标并将其与普通服务链接(您将在其中拥有您的pod) 和一些ClusterRoleClusterRoleBinding对象。但是没有任何解释。此外,我什至无法像其他对象一样在本地集群(1.15 版本)中使用 kubectl 列出现有的 APIServices。

4

1 回答 1

2

最简单的方法是将指标输入 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
  • 写一个代表你的 podService的类型ClusterIP
  • 写一个ServiceMonitor指向服务的。
  • 通过 Prometheus 仪表板查询您的自定义指标,以确保完成此阶段。

2. 设置基于 Prometheus 的 HPA

这看起来像是获得 HPA 的大量工作。但是,这里只有适配器 pod 是自定义部件。其他一切都是大多数集群中的标准堆栈设置,无论如何您都会获得许多其他用例。

于 2020-09-02T17:56:45.093 回答