【问题标题】:How to autoscale a pod thats pulling tasks from a queue如何自动缩放从队列中拉出任务的 Pod
【发布时间】:2021-05-28 10:14:56
【问题描述】:

我尝试了几种方法,文档建议有一种方法可以自动缩放来处理队列(没有外部解决方案)https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/,但没有解释如何

我创建了一个部署,它部署从 redis 队列中提取的 pod(集群中有一个 redis 服务)。我想创建一个系统,其中 pod 水平缩放以处理从队列中拉出任务并执行它们。执行任务可能会花费不可预测且可变的时间。

如果 pod A 从队列中拉出一个任务并且很忙,我想启动 Pod B 来拉下一个任务。目前我正在使用轮询,因此如果队列为空,则相关 pod 将继续尝试从队列中拉出。

我使用了水平 pod 自动缩放,它至少在 pod1 工作时横向扩展,但因为 pod2 在运行时不会降低平均利用率,它只是不断地将新的 pod 旋转到最大。对于我的用例,这是半好的,因为如果队列是空的,任何获得空队列的 pod 都会导致利用率下降,理论上,当队列为空时,多余的 pod 都会减速。 . 但是感觉效率不是很高,问题是自动缩放器会缩小正在运行的作业中间的 pod。

我已经研究过使用较新的指标 api,但似乎不需要创建自定义指标 api 来实现这一点,这对于这样一个简单的用例来说似乎是极端的。

我也研究过使用 Jobs,但这似乎根本不支持自动缩放?

我真的希望能够根据即将缩减的特定 pod 的 CPU 利用率进行缩减,而不是所有 pod 的平均值。

【问题讨论】:

    标签: kubernetes redis


    【解决方案1】:

    HorizontalPodAutoscaler 将始终根据所有可用 pod 的平均利用率进行扩展。我想说Jobs 最适合您的用例。 Queue with pod per work item 是其官方文档中 Kubernetes Jobs 的示例用例之一。

    您还可以考虑使用Keda,它是一个事件驱动的自动缩放框架。

    KEDA 是基于 Kubernetes 的事件驱动自动扩缩器。借助 KEDA,您可以根据需要处理的事件数量来推动 Kubernetes 中任何容器的扩展。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2019-08-07
      相关资源
      最近更新 更多