Apache Airflow kubernetes pod 操作员如何在 DAG 中形成环境变量时在“value_from”中传递 configMap 值

Sha*_*nit 5 environment-variables airflow kubernetes-pod

我正在使用 Apache Airflow,在我们的 DAG 任务之一中,我们使用 Kubernetes Pod Operator。这样做是为了在 kubernetes pod 中执行我们的应用程序进程之一。Kubernetes pod 操作符工作得很好。通过 pod 操作符传递环境变量工作得很好。但是,我尝试从 Kubernetes ConfigMap 传递环境变量值,但它无法从 ConfigMap 获取值。

代码片段如下。在代码片段中,请重点关注该行'SPARK_CONFIG': '{"valueFrom": {"configMapKeyRef": {"key": "endpoint","name": "spark-config"}}}'

请在下面找到代码片段

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
    )
Run Code Online (Sandbox Code Playgroud)

然后在尝试从 pod 中打印变量时,我得到如下结果。请注意,除了我尝试引用 configMap 的值外,其他 ENV_VARIABLE 值均已填充。请在下面找到 K8-Pod 生成时我们看到的日志输出。[在下面的代码片段中,请重点关注参数'name': 'SPARK_CONFIG']。env_variables 的其余部分似乎填充了我在上面的代码片段中使用 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

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

Run Code Online (Sandbox Code Playgroud)

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

chr*_*non 1

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

因此,通过这种方式,您可以configmaps=["spark-config"]假设您的 configmap 名为spark-config