假设我有一个RabbitMQ实例和一组从RabbitMQ中选择消息并处理它们的pod。当队列大小增加时,如何使Kubernetes增加pod的数量?
(我提到了RabbitMQ,但这只是一个例子。如果你愿意,可以选择你最喜欢的消息队列软件或负载均衡器。)
对此的顶级解决方案非常简单:
设置一个连接到队列的单独容器,并使用Kubernetes API扩展部署。
这个问题已经存在一些解决方案,但它们看起来并不像是积极维护和生产就绪,但可能有所帮助:
您可以编写一个非常简单的控制器来监视特定应用程序的队列大小,然后更改复制控制器/副本集/部署所需的副本数。
内置的水平pod自动缩放很快就获得了对自定义指标的支持,但在此之前,编写/编写脚本非常简单。
你可以使用这个工具https://github.com/XciD/k8s-rmq-autoscaler
它将在您的群集上创建一个pod,用于监视您的部署并根据其配置进行扩展。
然后,您只需要在部署中添加一些注释,并由autoscaler监视
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