在Kubernetes中,如何根据队列的大小自动缩放?

时间:2016-05-22 17:01:06

标签: message-queue kubernetes autoscaling

假设我有一个RabbitMQ实例和一组从RabbitMQ中选择消息并处理它们的pod。当队列大小增加时,如何让Kubernetes增加pod的数量?

(我提到了RabbitMQ,但这仅仅是一个例子。如果你愿意,可以选择你最喜欢的消息队列软件或负载均衡器。)

5 个答案:

答案 0 :(得分:5)

对此的顶级解决方案非常简单:

设置一个连接到队列的单独容器,并使用Kubernetes API扩展部署。

这个问题已经存在一些解决方案,但它们看起来并不像是积极维护和生产就绪,但可能有所帮助:

答案 1 :(得分:1)

您可以使用KEDA

KEDA是基于Kubernetes的事件驱动自动缩放组件。它为Kubernetes中运行的任何容器提供了事件驱动的规模

它开箱即用地支持RabbitMQ。您可以按照tutorial的说明进行操作,其中介绍了如何根据RabbitMQ队列大小设置简单的自动缩放。

答案 2 :(得分:0)

您可以编写一个非常简单的控制器来监视特定应用程序的队列大小,然后更改复制控制器/副本集/部署所需的副本数。

内置的水平pod自动缩放很快就会获得对自定义指标的支持,但在此之前,编程/编写脚本非常简单。

答案 3 :(得分:0)

您可以使用此工具https://github.com/XciD/k8s-rmq-autoscaler

它将在集群上创建一个Pod,该Pod将监视您的部署并根据其配置对其进行扩展。

然后,您只需在部署中添加一些注释,自动缩放器就会对其进行监视

kubectl annotate deployment/your-deployment -n namespace \
    k8s-rmq-autoscaler/enable=true \ 
    k8s-rmq-autoscaler/max-workers=20 \ 
    k8s-rmq-autoscaler/min-workers=4 \ 
    k8s-rmq-autoscaler/queue=worker-queue \ 
    k8s-rmq-autoscaler/vhost=vhost

答案 4 :(得分:0)

您可以使用Worker Pod Autoscaler(WPA):

https://github.com/practo/k8s-worker-pod-autoscaler

RabbitMQ支持尚未确定。但是可以添加。