我正在使用 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 …