簡體   English   中英

kube.netes 排隊工作人員自動縮放

[英]kubernetes queued worker with autoscaling

  • 我在 sqs/rabbitMQ 中有一個作業隊列,消息很少到達

  • 每次消息到達隊列時,我都想在我的 kube.netes 集群中啟動一個新的 pod

  • 所有 Pod 都將具有完全相同的配置,它們只是根據從隊列中提取的信息對不同的數據執行操作

  • 當一個 pod 啟動時,它需要運行幾個小時然后才能退出。

  • 如果 pod 失敗,它將需要重新啟動並理想地從它最初讀取的隊列中讀取相同的消息

  • 有時消息隊列完全為空並且所有 pod 都已完成。 但是當新消息到達隊列時,它仍然需要生成一個新的 pod

  • 誰能告訴我這種東西有沒有設計模式? 或者我應該編寫一個腳本來以編程方式管理我的 pod?

  • 我願意接受任何版本的 kube.netes 的任何建議,包括 aws eks

  • 我已經閱讀了這里的一些設計模式,但它們似乎不適合我的用例,因為

    一種。 每個工作項使用 Pod 排隊

     1. Doesn't seem to support jobs that don't complete after a pre-determined number of job completions

    b. 具有可變 Pod 計數的隊列

     2. Will not spawn new jobs after the first job completes. So it's not long running

在我看來,當前的 Job 缺乏這種用法。 但是,如果您的消息(在隊列中)具有可靠的 ID,則可以輕松構建 controller。

這個想法基本上是:

#!/bin/bash
while true
tasks=$(get list of messages ID)
do
for task in tasks
do
   kubectl apply -f task-consumer-def.yaml -l task_id=$task
done
sleep 60
done

task-consumer-def.yaml中,您將使用Downward API (它允許您將 Pod 信息公開給其中的容器)來公開此 worker 需要操作的任務 ID。

task-consumer-def中使用Job可能是一個更好的主意,它將為您處理重啟部分。

這就是運算符模式。 基本上,您確保每條消息都有一個分配給它的工作人員。 我認為你可以讓 Kube.netes 處理已完成項目的垃圾收集。 如果消息已經分配了 pod,則不會更改。

您可能會更有效地做到這一點,或者增加一個最大值,但概念基本保持不變。

一種變體是使用Indexed Jobs ,每個 Job 有多個工作項,但會稍微復雜一些。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM