Kubernetes (Minikube) 卷已安装(来自 Airflow Helm 值)但仍为空

标签 kubernetes airflow minikube docker-volume

我想在 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/

相关文章:

azure - 访问 Azure 文件时出现问题 - Pod 日志中未找到文件错误

python - Apache Airflow : Pass variable in jinja include

python - 使用 Apache Airflow 执行包含 PySpark 代码的 Databricks Notebook

jinja2 - 在 Airflow 的运算符参数中将 jinja 模板格式化为 INT

kubernetes - kubernetes (minikube) 中的 Fabric v2.0 - 错误对等 channel 加入 - 由于 pod 名称导致的 TLS 问题

kubernetes - 带有选择器的 headless 服务没有获得端点

kubernetes - Knative Serving 的 Activator 如何拦截缩小修订的请求?

go - 如何在没有kubeconfig文件的情况下使用golang api对kubernetes进行外部认证?

docker - 尽管作为 VM 运行,Minikube Kubernetes 不允许在 Mac 上进入

java - Kubernetes (minikube) pod OOMKilled,节点中明显剩余大量内存