问题描述
问题设置。。假设我有两个Pod,A和B。我希望能够根据来自任意来源的任意数量动态缩放PodA。假设Pod B是这样的来源:例如,它可以具有一个HTTP服务器,该服务器的端点在请求时以Pod A的所需副本数响应。又或者它是ES服务器还是sql DB(无关紧要)。
问题。我需要定义哪些kubernetes对象(除HPA外)? HPA应该知道应该为当前度量标准查找B的哪种配置? B的API应该是什么样子(或有任何约束?)?
我进行的研究。不幸的是,除了宣称存在这种可能性之外,官方文档并没有对此多说。还有两个存储库,one带有一些我无法构建的go样板代码,而another则没有任何使用说明(尽管据称确实满足“ HTTP外部度量”的要求)。 / p>
通过查看这些存储库中的.yaml
配置,我得出一个结论,除了Deployment
和Service
之外,还需要定义一个APIService
对象在kubernetes API中注册外部或自定义指标,并将其与常规服务(您将在其中放置pod)以及少数ClusterRole
和ClusterRoleBinding
对象进行链接。但是对此没有任何解释。同样,我什至无法像其他对象一样列出我的本地集群(1.15版)中带有kubectl的现有APIServices。
解决方法
最简单的方法是将指标输入Prometheus(这是一个普遍解决的问题),然后设置基于Prometheus的HPA(也是一个普遍解决的问题)。
1。向Prometheus馈送自己的指标
- 从Prometheus-Operator开始以监视群集本身,并访问
ServiceMonitor
对象。 ServiceMonitor是指向群集中服务的指针。它们使您的Pod的/metrics
端点可以被Prometheus服务器发现并抓取。 - 编写一个pod,该pod从您的第三方API中读取指标,并在自己的
/metrics
端点中显示它们。这将是您的API和Prometheus格式之间的适配器。当然有客户:https://github.com/prometheus/client_python#exporting - 写一个
Service
类型的ClusterIP
来代表您的广告连播。 - 写一个指向服务的
ServiceMonitor
。 - 通过Prometheus仪表板查询自定义指标,以确保完成此阶段。
2。设置基于Prometheus的HPA
- 设置Prometheus-Adapter并遵循HPA演练。
- 或者按照指南https://github.com/stefanprodan/k8s-prom-hpa
要获得HPA,这似乎是一大堆工作。但是,在此,仅适配器盒是自定义部件。在大多数集群中,其他所有内容都是标准的堆栈设置,无论如何,您还将获得许多其他用例。