【问题标题】:Apache Airflow kubernetes pod operator how do we pass configMap value in `value_from` while forming the environment variable in DAGApache Airflow kubernetes pod operator 我们如何在`value_from`中传递configMap值,同时在DAG中形成环境变量
【发布时间】:2020-05-15 04:14:46
【问题描述】:

我正在使用 Apache Airflow,在 DAG 的一项任务中,我们正在使用 Kubernetes Pod Operator。这样做是为了在 kubernetes pod 中执行我们的一个应用程序进程。 Kubernetes pod operator 运行良好。通过 pod operator 传递环境变量运行良好。但是我试图从 Kubernetes ConfigMap 传递一个环境变量值,它无法从 ConfigMap 获取值。

代码 sn-p 如下。代码中sn -p 请关注'SPARK_CONFIG': '{"valueFrom": {"configMapKeyRef": {"key": "endpoint","name": "spark-config"}}}'这一行

请在下面找到代码sn-p

pod_process_task = KubernetesPodOperator(
        namespace=cons.K8_NAMESPACE,
        image=cons.UNCOMPRESS_IMAGE_NAME,
        config_file=cons.K8_CONFIG_FILE,
        env_vars={
            'FRT_ID': '{{ dag_run.conf["transaction_id"] }}',
            'FILE_NAME': '{{ dag_run.conf["filename"]}}',
            'FILE_PATH': '{{dag_run.conf["filepath"]}}' + "/" + '{{ dag_run.conf["filename"]}}',
            'LOG_FILE': '{{ ti.xcom_pull(key="process_log_dict")["loglocation"] }}',
            'SPARK_CONFIG': '{"valueFrom": {"configMapKeyRef": {"key": "endpoint","name": "spark-config"}}}'
        },
        name=create_pod_name(),
        # name= 'integrator',
        task_id="decrypt-951",
        retries=3,
        retry_delay=timedelta(seconds=60),
        is_delete_operator_pod=True,
        volumes=[volume-a,volume_for_configuration],
        volume_mounts=[volume_mount_a,volume_mount_config],
        resources=pod_resource_specification,
        startup_timeout_seconds=cons.K8_POD_TIMEOUT,
        get_logs=True,
        on_failure_callback=log_failure_unzip_decrypt,
        dag=dag
    )

然后尝试从我得到的 pod 打印变量,如下所示。请注意,其他 ENV_VARIABLE 值已被填充,除了我试图引用 configMap 的那个值。请在下面找到我们在生成 K8-Pod 时看到的日志输出。 [在下面的sn-p中,请关注参数'name': 'SPARK_CONFIG']。 env_variables 的其余部分似乎填充了我在上面的代码 sn-p 中使用 Jinga 模板提供的值。

'containers': [{'args': None,
                          'command': None,
                          'env': [{'name': 'FRT_ID',
                                   'value': '20180902_01605',
                                   'value_from': None},
                                  {'name': 'FILE_NAME',
                                   'value': 'transact_2018-09-02_0321_file_MAR.zip',
                                   'value_from': None},
                                  {'name': 'FILE_PATH',
                                   'value': '/etc/data/app/trk0057.zip',
                                   'value_from': None},                                  
                                  {'name': 'LOG_FILE',
                                   'value': 'log-0057_2018-09.log',
                                   'value_from': None},
                                  {'name': 'SPARK_CONFIG',
                                   'value': '{"valueFrom": {"configMapKeyRef": '
                                            '{"key": "endpoint","name": '
                                            '"spark-config"}}}',
                                   'value_from': None}],
                          'env_from': None

...
...
...
...

重点是我们如何在 Apache Airflow kubernetes pod 操作符中形成环境变量时像 value_from 一样传递 ConfigMap 值

【问题讨论】:

  • @Grant T :希望您能在此查询上提供任何帮助。

标签: environment-variables kubernetes-pod airflow


【解决方案1】:

您应该能够通过使用 KubernetesPodOperator configmaps 参数来完成此操作。您可以在此处查看文档字符串:https://github.com/apache/airflow/blob/v1-10-stable/airflow/contrib/operators/kubernetes_pod_operator.py#L104

因此,如果您的 configmap 名为 spark-config,您将通过这种方式传递 configmaps=["spark-config"]

【讨论】:

  • @chris.mclennon :非常感谢克里斯。我正在使用 Airflow 1.10.2 ,所以想知道这是从哪个版本考虑的。以防万一。
  • OhHiMark / @OhHiMark :虽然看起来信息量很大,但事实上我使用的是 Airflow 1.10.2 版本......这似乎没有帮助。我正在使用的版本,KubernetesPodOperator 对 Secret 和 Configmap 有基本的支持,主要是通过将它们安装在文件中或在环境变量中安装特定的键。在 DAG 中创建 K8PodOperator 时,只需通过整个 k8s Configmap 或 Secret 将环境变量直接挂载到卷挂载位置即可。
  • @Shanit 根据阅读 Airflow 更改日志,它看起来确实是在 1.10.3 中添加了 configmap,所以很遗憾,在您进行更新之前,它在 1.10.2 中对您不可用airflow.apache.org/docs/stable/…跨度>
  • @chris.mclennon :非常感谢您的回复和信息。
  • 对我不起作用,我添加了带有 configmap 名称的 configmap,但 env_var 仍然无法正确解析(与原始问题中的示例完全相同)。
猜你喜欢
  • 2022-08-18
  • 1970-01-01
  • 2021-09-21
  • 2021-01-29
  • 2020-01-25
  • 1970-01-01
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多