假设我有一个RabbitMQ实例和一组从RabbitMQ中选择消息并处理它们的pod。当队列大小增加时,如何让Kubernetes增加pod的数量?
(我提到了RabbitMQ,但这仅仅是一个例子。如果你愿意,可以选择你最喜欢的消息队列软件或负载均衡器。)
答案 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支持尚未确定。但是可以添加。