Kubernetes 如何自动缩放从队列中提取任务的pod

Kubernetes 如何自动缩放从队列中提取任务的pod,kubernetes,redis,Kubernetes,Redis,我尝试过几种方法,文档建议有一种方法可以让自动缩放来处理队列(没有外部解决方案),但没有解释如何进行 我创建了一个部署,该部署部署了从redis队列(集群中有一个redis服务)中提取的吊舱。我想创建一个系统,在这个系统中,pod被水平缩放,以处理从队列中提取任务并执行它们。执行任务时,可能需要不可预测且可变的时间 如果pod A从队列中拖出一个任务,并且很忙,我想启动pod B来拖出下一个任务。目前我正在使用轮询,这样,如果队列是空的,有问题的pod将继续尝试从队列中拉出 我使用了水平吊舱自动

我尝试过几种方法,文档建议有一种方法可以让自动缩放来处理队列(没有外部解决方案),但没有解释如何进行

我创建了一个部署,该部署部署了从redis队列(集群中有一个redis服务)中提取的吊舱。我想创建一个系统,在这个系统中,pod被水平缩放,以处理从队列中提取任务并执行它们。执行任务时,可能需要不可预测且可变的时间

如果pod A从队列中拖出一个任务,并且很忙,我想启动pod B来拖出下一个任务。目前我正在使用轮询,这样,如果队列是空的,有问题的pod将继续尝试从队列中拉出

我使用了水平吊舱自动缩放,它至少在吊舱1工作时会向外扩展,但因为吊舱2在运行时不会降低平均利用率,它只是不断地将新吊舱旋转到最大值。对于我的用例来说,这是半好的,因为如果队列是空的,任何获得空队列的吊舱都将有助于降低利用率,理论上,当队列是空的时,多余的吊舱将全部降速。。。但感觉不太有效,问题是自动缩放器会缩小正在运行的作业中的吊舱。< / P> 我已经考虑过使用较新的metrics api,但是似乎需要创建一个定制的metrics api来实现这一点,这对于这样一个简单的用例来说似乎是极端的

我也研究过如何使用作业,但这似乎根本不适合自动缩放


我真的希望能够根据即将缩小的特定pod的CPU利用率而不是所有pod的平均值来进行缩放。

HorizontalPodAutoscaler
将始终根据所有可用pod的平均利用率进行缩放。我认为
作业
最适合您的用例。是Kubernetes Jobs在其官方文档中的示例用例之一

您还可以查看use,它是一个用于事件驱动自动缩放的框架

KEDA是一个基于Kubernetes的事件驱动自动缩放器。通过KEDA,您可以根据需要处理的事件数量,驱动Kubernetes中任何容器的缩放