我想在 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:
core:
dags_folder: /dags
webserver:
extraVolumes:
- name: dags
hostPath:
path: /path/dags
extraVolumeMounts:
- name: dags
mountPath: /dags
kubectl describe pods airflow-webserver --kubeconfig ~/.kube/config --namespace airflow
:
Volumes:
config:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: airflow-airflow-config
Optional: false
logs:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: airflow-logs
ReadOnly: false
dags:
Type: HostPath (bare host directory volume)
Path: /path/dags/
HostPathType:
airflow-webserver-token-xtq9h:
Type: Secret (a volume populated by a Secret)
SecretName: airflow-webserver-*
Optional: false
QoS Class: 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:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: airflow-airflow-config
Optional: false
dags:
Type: HostPath (bare host directory volume)
Path: /path/dags
HostPathType:
logs:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: airflow-logs
ReadOnly: false
airflow-scheduler-token-9zfpv:
Type: Secret (a volume populated by a Secret)
SecretName: airflow-scheduler-token-9zfpv
Optional: false
最佳答案
假设/path/dags 中已经有一些 dags,您应该将 dags 文件夹挂载到调度程序而不是网络服务器(如果您使用的是 Airflow 2)。 Scheduler 是解析 dags 的一个,网络服务器仅根据数据库中存储的信息显示它们,因此它实际上不需要 DAG(以前需要它,Airflow 1.10 没有序列化)
此外,我想如果您想从本地文件夹执行 dags,您应该使用 LocalExecutor 而不是 KubernetesExecutor - 那么安装到调度程序的 dags
将可用于从同一容器中的调度程序生成的进程.
如果你想运行 Kubernetes Executor 并想挂载主机文件夹,我相信你需要将其添加为挂载到你的 pod 模板文件中(你可以使用 Airflow CLI 生成这样的 pod 模板文件
参见https://airflow.apache.org/docs/apache-airflow/stable/executor/kubernetes.html#pod-template-file
关于Kubernetes (Minikube) 卷已安装(来自 Airflow Helm 值)但仍为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69210449/