我想在Minikube上本地部署Airflow,并為DAG的處理安裝一個本地檔案夾。
Airflow是這樣部署的:
helm install $AIRFLOW_NAME apache-airflow/airflow
--values values.yml
--set logs.persistence.enabled=true
--namespace $AIRFLOW_NAMESPACE
--kubeconfig ~/.kube/config
values.yml看起來像這樣:
executor: KubernetesExecutor
config:
核心:
dags_folder: dags
webserver: dags
extraVolumes:
- name: dags
主機路徑:
path: /path/dags
extraVolumeMounts:
- name: dags
mountPath: dags
kubectl describe pods airflow-webserver --kubeconfig ~/.kube/config --namespace airflow:
Volumes:
config:
型別。 ConfigMap (a volume populated by a ConfigMap)
Name: airflow-airflow-config
可選性: false
日志:
型別。 PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: airflow-logs
ReadOnly: false
Dags:
型別: HostPath (bare host directory volume)
路徑: /path/dags/
HostPathType:
airflow-webserver-token-xtq9h:
型別。 Secret (a volume populated by a Secret)
SecretName: airflow-webserver-*
Optional: false
QoS類: BestEffort
卷軸dags似乎被正確安裝,但仍然是空的。 什么會導致這種行為?
編輯。
kubectl describe pods airflow-scheduler-0 --kubeconfig ~/.kube/config --namespace airflow
Mounts:
/opt/airflow/airflow.cfg from config (ro,path="airflow.cfg")
/opt/airflow/dags from dags (rw)
/opt/airflow/logs from logs (rw)
/opt/airflow/pod_templates/pod_template_file.yaml from config (ro,path="pod_template_file.yaml")
/var/run/secrets/kubernetes.io/serviceaccount from airflow-scheduler-token-9zfpv (ro)
Volumes:
config:
型別。 ConfigMap (a volume populated by a ConfigMap)
Name: airflow-airflow-config
可選性: false
Dags:
型別: HostPath (bare host directory volume)
路徑: /path/dags
HostPathType:
日志:
型別。 PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: airflow-logs
ReadOnly: false
airflow-scheduler-token-9zfpv:
型別。 Secret (a volume populated by a Secret)
SecretName: airflow-scheduler-token-9zfpv
Optional: false
uj5u.com熱心網友回復:
假設你在/path/dags中已經有了一些dags,你應該把你的dags檔案夾掛載到scheduler而不是webserver(如果你使用的是Airflow 2)。調度器是決議dags的,webserver只是根據存盤在資料庫中的資訊來顯示它們,所以它實際上不需要DAG(它曾經需要Airflow 1.10的序列化)
。另外,如果你想從本地檔案夾中執行dag,我想你應該使用LocalExecutor而不是KubernetesExecutor--那么掛載到調度器的dag將被同一容器中從調度器中生成的行程使用。
如果你想運行Kubernetes Executor并想掛載host檔案夾,我相信你需要把它作為掛載添加到你的pod模板檔案中(你可以使用airflow CLI生成這樣的pod模板檔案
。參見https://airflow.apache.org/docs/apache-airflow/stable/executor/kubernetes.html#pod-template-file
uj5u.com熱心網友回復:
你的mount檔案夾是空的,因為我猜你在MaCOS上使用Docker Desktop(這是我的大膽猜測)
你的dags必須存在于主機上的/path/dags檔案夾中,但是在MacOS上的Docker Desktop(同樣在Windows上),你的主機是一個虛擬機而不是MacOS/Windows。
在這種情況下,你需要確保主機上的/path/dags也被映射到虛擬機上(默認情況下,只有這些檔案夾被映射到:
通過。https://docs.docker.com/desktop/mac/
默認情況下,/Users、/Volume、/private、/tmp和/var/folders目錄是共享的
。
你也可以從你的主機中添加新的檔案夾來共享(見上述檔案中的 "檔案共享 "章節)
uj5u.com熱心網友回復:
我完全搞錯了hostPath引數是指我的本地機器。
hostPath指的是運行pod的Minikube節點。
extraVolumes:
- name: dags[/span
主機路徑:
path:mnt/airflow/dags
型別: 目錄
extraVolumeMounts:
- name: dags
mountPath: /opt/airflow/dags
這將在Minikube主機節點和埠之間裝載一個卷。
路徑/mnt/airflow/dags 必須不存在于本地機器上。
然后,本地的DAGs檔案夾可以被掛載到Minikube節點中:
minikube mount ./dags/:/mnt/airflow/dags
參見。https://medium.com/@ipeluffo/running-apache-airflow-locally-on-kubernetes-minikube-31f308e3247a
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/319476.html
標籤:
