首页 > 解决方案 > 将自定义 volumeMount 添加到 Airflow 工作 pod(使用 k8s Executor)

问题描述

在airflow.conf 部分下有一个为dag 和日志安装volumeMount 的选项,kubernetes例如

[kubernetes]
airflow_configmap = airflow_config
worker_container_repository = airflow
worker_container_tag = runner2
worker_container_image_pull_policy = IfNotPresent
delete_worker_pods = true
dags_volume_claim = airflow-dags-pvc
dags_volume_subpath = airflow/development/dags
logs_volume_claim = airflow-logs-pvc
logs_volume_subpath = airflow/development/logs
namespace = development

这按预期工作。意味着我可以看到工作 pod 成功地在容器内安装了这两个卷及其相关的 volumeMounts。

   "volumeMounts": [
      {
        "name": "airflow-dags",
        "readOnly": true,
        "mountPath": "/usr/local/airflow/dags",
        "subPath": "airflow/development/dags"
      },
      {
        "name": "airflow-logs",
        "mountPath": "/usr/local/airflow/logs",
        "subPath": "airflow/development/logs"
      },

但是,我的工作 pod 依赖于从目录airflow/development/pluginsairflow/development/libs. 因此,我需要使用来自 NFS 服务器的相关子路径将更多 volumeMount 添加到工作 pod 中。我怎样才能做到这一点?我尝试搜索任何相关的配置值,但找不到。

更新:executor_config作为 .dags 传感器任务之一传入executor_config={"KubernetesExecutor": {"image": "airflow:runner2"}}。通过查看代码airflow/contrib/kubernetes/worker_configuration.py,似乎如果我将volumes和volumeMounts作为此配置的一部分传递,它应该可以工作。我会试试这个并在这里更新。

标签: kubernetesairflowairflow-scheduler

解决方案


对不起,我会回答我自己的问题。也许会帮助某人。在我定义任务的 dag 文件中,我只需添加 executor_config 如下;

        IngestionStatusSensor(
            task_id=...,
            executor_config={"KubernetesExecutor": {
                                  "image": "airflow:runner2",
                                  "volume_mounts": [
                                      {
                                          "name": "airflow-dags",
                                          "mountPath": "/usr/local/airflow/libs",
                                          "subPath": "airflow/development/libs"
                                      },
                                      {
                                          "name": "airflow-dags",
                                          "mountPath": "/usr/local/airflow/plugins",
                                          "subPath": "airflow/development/plugins"
                                      }],
                                  }
                             },
            dag=dag,
            ingestion_feed=table,
            poke_interval=60 * 30,
            offset=0,
            start_date=start_date
        )

其中airflow-dagsvolume已经由pod创建者定义,该pod创建者声称在kubernetesairflow.conf部分下的configs中定义的PVC,例如dags_volume_claim = airflow-pvc


推荐阅读