簡體   English   中英

Kubernetes cronjob 同時運行多個進程而不創建多個作業

[英]Kubernetes cronjob run multiple processes at the same time without creating multiple jobs

我有一個 Python 進程,我想在 Kubernetes cronjob 中每n分鍾啟動一次,並從隊列中讀取一些消息(比如 5 條),然后處理/轉換一些文件並根據這些隊列消息對結果進行分析。 如果n分鍾后進程仍在運行,我不想啟動新進程。 總的來說,我希望其中一些(比如 3 個)能夠同時運行,但是,同時運行的進程永遠不能超過 3 個。 為了嘗試實現這一點,我嘗試了以下(簡化):

apiVersion: batch/v1
kind: CronJob
metadata:
  name: some-job
  namespace: some-namespace
spec:
  schedule: "*/5 * * * *"
  concurrencyPolicy: "Forbid"
  jobTemplate:
    spec:
      parallelism: 3
      template:
        spec:
          containers:
          - name: job
            image: myimage:tag
            imagePullPolicy: Always
            command: ['python', 'src/run_job.py']

現在這相當於最多同時運行三個進程,因為“並行度”為 3,並且 concurrencyPolicy 為“禁止”,即使進程 go 超過 5 分鍾標記也是如此。

我特別遇到的問題是一個吊艙(例如吊艙 1)可能比其他兩個吊艙需要更長的時間才能完成,這意味着吊艙 2 和 3 可能會在一分鍾后完成,而吊艙 1 僅在 10 分鍾后完成,因為處理更大隊列中的文件。

我認為parallelism: 3會導致 pod 2 和 3 在完成后被刪除和替換(當新的 cron 間隔命中時),它們不是並且必須等待 pod 1 完成,然后才能在 cron 間隔命中時啟動三個新的 pod再次。

當我考慮它時,考慮到 cronjob 的規范和含義,這個功能是有意義的。 但是,我想知道是否能夠讓這些 pod/進程不相互依賴以重新啟動,而不必定義重復的 cronjob,所有這些都運行一個進程。

否則,也許我想知道是否可以輕松啟動更多重復的 cronjobs 而無需將它們復制到多個清單中。

重復的 cronjobs 似乎是實現您正在尋找的方法。 一次生成 3 個副本,單個作業。 您可以將作業清單模板化並生成多個,如下例所示。 該示例不在您的問題上下文中,但您可以理解。 http://kubernetes.io/docs/tasks/job/parallel-processing-expansion

暫無
暫無

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

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