【发布时间】:2016-09-19 12:21:55
【问题描述】:
假设我有一个 RabbitMQ 实例和一组从 RabbitMQ 挑选消息并处理它们的 pod。如何让 Kubernetes 随着队列大小的增加而增加 Pod 的数量?
(我提到的是 RabbitMQ,但这只是一个示例。如果您愿意,请选择您最喜欢的消息队列软件或负载均衡器。)
【问题讨论】:
标签: message-queue kubernetes autoscaling
假设我有一个 RabbitMQ 实例和一组从 RabbitMQ 挑选消息并处理它们的 pod。如何让 Kubernetes 随着队列大小的增加而增加 Pod 的数量?
(我提到的是 RabbitMQ,但这只是一个示例。如果您愿意,请选择您最喜欢的消息队列软件或负载均衡器。)
【问题讨论】:
标签: message-queue kubernetes autoscaling
对此的顶级解决方案非常简单:
设置一个连接到您的队列的单独容器,并使用 Kubernetes API 来扩展部署。
已经有一些解决方案可以解决这个问题,但它们看起来并没有得到积极维护和生产准备,但可能会有所帮助:
【讨论】:
你可以使用这个工具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
【讨论】:
您可以编写一个非常简单的控制器来监视特定应用程序的队列大小,然后更改复制控制器/副本集/部署所需的副本数。
内置的水平 pod 自动缩放很快就会获得对自定义指标的支持,但在此之前,您自己编写/编写脚本非常简单。
【讨论】:
您可以使用 Worker Pod Autoscaler (WPA):
https://github.com/practo/k8s-worker-pod-autoscaler
RabbitMQ 支持正在等待中。但可以添加。
【讨论】: