[英]Airflow kubernetes executor: Run 2 jobs on the same pod
我正在使用帶有Kubernetes執行器和KubernetesPodOperator
。 我有兩個工作:
為了能夠在作業之間共享數據,我想在同一個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.