【问题标题】:In Airflow, how do we pass environment variables to Kubernetes Executor worker pods?在 Airflow 中,我们如何将环境变量传递给 Kubernetes Executor worker pod?
【发布时间】:2022-08-18 14:45:16
【问题描述】:

我正在使用气流1.0.15。它使用 Airflow 官方 helm 图表部署在 Kubernetes 集群上。而且我无法将环境变量传递给工作人员 pod。

在 helm 图表中添加的 extraEnv 已添加到调度程序和 Web pod,但未添加到使用 Kubernetes Executor 的工作程序 pod。

我能够使用 executor_config 参数将 configmap 安装到 worker pod 中。但是我们如何将环境变量传递给 worker pod?

    标签: kubernetes environment-variables airflow airflow-scheduler


    【解决方案1】:

    我在尝试使用 airflow-helm community chart 将环境变量传递给 KubernetesExecutor pod 时遇到了同样的问题。

    在尝试通过配置映射并按照airflow variables docairflow config doc 设置变量之后,例如:

    airflow:
      config:
        AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: "30"
        my_env_var: "hello this is your env var"
        AIRFLOW__my_env_var: "hello this is your env var"
        AIRFLOW__VAR__my_env_var: "hello this is your env var"
    

    我发现在 helm values.yaml 中的以下 extraEnv: 块内设置环境变量可以工作 following the documentation in the faq。设置extaEnv 会导致值从 helper pods.tpl 映射到k8 pod template file

    airflow:
      extraEnv:
        - name: my_env_var
          value: "hello this is your env var"
        - name: my_other_env_var
          valueFrom:
            secretKeyRef:
              name: my-kubectl-secret
              key: value
    

    就我而言,我使用 kubectl 创建秘密或将值替换为部署管道的一部分。缺点是我的掌舵图需要为每个新的秘密/环境变量更新。

    最后,这些是不是设置为气流变量。它们是 kubernetes pod os 上的标准环境变量。在您的 DAG 和任务中,您可以访问它们,例如

    def task():
        import os
        var = os.getenv('my_env_var')
        return {
            'message': var
        }
    

    这个SO answer 建议使用配置映射的另一种方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 2013-12-29
      • 2020-01-25
      • 2016-07-08
      相关资源
      最近更新 更多