簡體   English   中英

氣流kubernetes執行器:在同一Pod上運行2個作業

[英]Airflow kubernetes executor: Run 2 jobs on the same pod

我正在使用帶有Kubernetes執行器和KubernetesPodOperator 我有兩個工作:

  • 答:從某些來源檢索數據,最大可達100MB
  • B:分析來自A的數據。

為了能夠在作業之間共享數據,我想在同一個Pod上運行它們,然后A將數據寫入卷,而B將從該卷讀取數據。

文檔指出:

Kubernetes執行器將為每個任務實例創建一個新的pod。

有什么辦法可以做到這一點? 如果不是,那么在作業之間傳遞數據的推薦方法是什么?

抱歉,這不可能-每個吊艙只能完成一項工作。

最好使用任務1將數據放在眾所周知的位置(例如,在雲桶中),然后從第二個任務中獲取數據。 或者只是將兩個任務結合在一起。

是的,您可以使用作業內部的初始化容器來執行此操作,因此在同一容器中,作業不會在初始化容器完成其任務之前觸發

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

這是pod的示例,您可以將其應用於同類工作

您絕對可以使用subdags和SubDag運算符來完成此操作。 當您開始子數據發布時,kubernetes執行程序會在子數據層次上創建一個Pod,所有子任務都在該Pod上運行。

似乎沒有記錄此行為。 我們最近在對流程進行故障排除時發現了這一點。

您可以有2個單獨的任務A和B,可以將數據從A傳遞到B。K8S對此類卷具有開箱即用的支持。 例如https://kubernetes.io/docs/concepts/storage/volumes/#awselasticblockstore 在這里,將由一個容器生成的數據將是持久的,因此當容器被刪除時,數據不會丟失。 相同的卷可以由另一個容器掛載,並且可以訪問數據。

暫無
暫無

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

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