【问题标题】:How to supply external metrics into HPA?如何将外部指标提供给 HPA?
【发布时间】:2020-12-21 21:14:05
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: kubernetes hpa


    【解决方案1】:

    最简单的方法是将指标输入 Prometheus(这是一个常见问题),然后设置基于 Prometheus 的 HPA(也是一个常见问题)。

    1.将自己的指标提供给 Prometheus

    • Prometheus-Operator 开始监控集群本身,并访问ServiceMonitor 对象。 ServiceMonitors 是指向集群中服务的指针。他们让 prometheus 服务器发现并抓取您的 pod 的 /metrics 端点。
    • 编写一个从您的 3rd 方 API 读取指标的 pod,并将它们显示在自己的 /metrics 端点中。这将是您的 API 和 Prometheus 格式之间的适配器。当然还有客户:https://github.com/prometheus/client_python#exporting
    • 写一个 ClusterIP 类型的 Service 代表您的 pod。
    • 写一个指向服务的ServiceMonitor
    • 通过 Prometheus 仪表板查询您的自定义指标,以确保完成此阶段。

    2。设置基于 Prometheus 的 HPA

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

    【讨论】:

    • 感谢您写下这篇文章。然而,虽然这个答案提供了一个可行的解决方法,但这并不是我想要的。我的问题是如何理解自己在 Kubernetes 中从头开始构建它的难点。尽管如此,再次感谢
    • 请注意,如果您想要一个响应所需副本数量的服务,您需要一个自定义控制器(或操作员),而不是自定义指标服务器。在 HPA 表示法中,我看不到一种查询指标并将结果值直接放入所需副本的方法。
    • 查看github.com/operator-framework/operator-sdk。 operator 实例可以从外部获取 num 个副本并进行相应的控制。这与编写一个可以修改其他部署的 pod 基本相同,无需 HPA。
    猜你喜欢
    • 2021-07-12
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多