Kubernetes:使用HPA和其他pod的度量



我有:

  1. 在k8s中部署服务A和B
  2. 普罗米修斯烟囱

当服务B的度量m1更改时,我想缩放服务A。我发现的或多或少不适合的解决方案:

  1. 我可以用规范的以下部分为服务A定义HPA:
- type: Object
object:
metric:
name: m1
describedObject:
apiVersion: api/v1
kind: Pod
name: certain-pod-of-service-B
current:
value: 10k

从技术上讲,这是可行的。但它不适合k8s的动态性质。此外,我不能在HPA中使用pods metric(metrics:-type:pods-pods:(,因为它会为服务A的pods请求m1 metric(显然没有这个(

  1. 在prometheus适配器中定义自定义度量,该适配器从服务B的pod中查询m1度量。这更合适,但看起来像是解决方法,因为我已经有了度量m1

  2. 外部指标也是如此

我觉得我错过了一些东西,因为这似乎不是一个不现实的情况:(所以,请告诉我如何在k8s中按度量来缩放一个服务?

我决定提供一个社区Wiki答案,它可能会帮助其他面临类似问题的人。

Horizontal Pod Autoscaler是Kubernetes的一项功能,允许基于一个或多个监控指标扩展应用程序
如我们在Horizontal Pod Autoscaler文档中所见:

Horizontal Pod Autoscaler根据观察到的CPU利用率(或者,在支持自定义指标的情况下,根据其他一些应用程序提供的指标(,自动缩放复制控制器、部署、副本集或有状态集中的Pod数量。

我们可以使用Horizontal Pod Autoscaler的三组指标:

  • 资源度量:预定义的资源使用度量(CPU和存储器(
  • 自定义度量:与Kubernetes关联的自定义度量对象
  • 外部度量:与不关联的自定义度量Kubernetes对象

任何HPA目标都可以根据缩放目标中pod(或容器(的资源使用情况进行缩放。CPU利用率指标是resource metric,您可以指定除CPU之外的其他资源指标(例如内存(。这似乎是最简单、最基本的缩放方法,但我们可以通过使用custom metricsexternal metrics来使用更具体的度量。

custom metricsexternal metrics之间有一个主要区别(请参阅:自动缩放工作负载的自定义和外部指标(:

自定义度量和外部度量彼此不同:

在Kubernetes中运行的应用程序会报告自定义度量。外部度量来自未在集群上运行但其性能影响Kubernetes应用程序的应用程序或服务。

总之,在我看来,在上述情况下使用custom metrics是可以的,我没有找到任何其他合适的方法来完成这项任务。

相关内容

  • 没有找到相关文章

最新更新