【问题标题】:In Kubernetes, how do I autoscale based on the size of a queue?在 Kubernetes 中,如何根据队列的大小进行自动缩放?
【发布时间】:2016-09-19 12:21:55
【问题描述】:

假设我有一个 RabbitMQ 实例和一组从 RabbitMQ 挑选消息并处理它们的 pod。如何让 Kubernetes 随着队列大小的增加而增加 Pod 的数量?

(我提到的是 RabbitMQ,但这只是一个示例。如果您愿意,请选择您最喜欢的消息队列软件或负载均衡器。)

【问题讨论】:

    标签: message-queue kubernetes autoscaling


    【解决方案1】:

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

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

    已经有一些解决方案可以解决这个问题,但它们看起来并没有得到积极维护和生产准备,但可能会有所帮助:

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
    • 感谢您的评论,现已更正!
    • 我有同样的问题,阅读这篇文章,我能够在 AKS 上使用 onfido,效果很好。 (虽然没有开箱即用,但不难调试,RBAC 缺少补丁声明,并且由于某种原因它不喜欢从秘密加载 RMQ 用户名和密码。)
    【解决方案2】:

    您可以使用KEDA

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

    它支持开箱即用的 RabbitMQ。您可以关注tutorial,它解释了如何根据 RabbitMQ 队列大小设置简单的自动缩放。

    【讨论】:

      【解决方案3】:

      你可以使用这个工具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】:

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

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

        【讨论】:

        • 任何示例、链接或资源都会非常有帮助
        【解决方案5】:

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

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

        RabbitMQ 支持正在等待中。但可以添加。

        【讨论】:

          猜你喜欢
          • 2016-05-14
          • 2015-12-14
          • 2021-04-17
          • 2018-11-12
          • 2020-10-23
          • 1970-01-01
          • 2020-05-12
          • 2023-03-20
          • 1970-01-01
          相关资源
          最近更新 更多