摘要:
如果您希望 KubernetesExecutor 或 KubernetesPodOperator(具有不同的 Executor)启动的所有 Pod 上的 Sidecar,您至少应该为 Scheduler 放置airflow_local_settings.py
文件,因为它们的 POD 都是由 Scheduler 启动的。PYTHONPATH
KubernetesPodOperator
但是,如果您还想要在使用时启动的 POD 上的边车,KubernetesExecutor
则需要设置(如在airflow_local_settings_configmap
https://github.com/astronomer/airflow-chart/blob/f3dddefe43c92d594cfcfe9c5b001680f45a986/templates/configmap.yaml#L72完成)当您将 KubernetesExecutor 与 Kubernetes 一起使用时,任务 pod(与 KubernetesPodOperator 一起)将由 worker POD 启动。airflow.cfg
请注意我们如何将相同的配置映射传递给调度程序部署(https://github.com/astronomer/airflow-chart/blob/f3dddefe43c92d594cfcfe9c5b001680f45a986/templates/scheduler/scheduler-deployment.yaml#L125-L135)和airflow.cfg
自身,因为我们希望所有 POD 通过 pod_mutation_hook 进行变异。
详情:
“airflow.cfg”和“airflow_local_settings.py”文件需要存在于调度器上(你的调度器是在虚拟机上还是在 POD 上与这里无关)。我们还添加了有关在何处输出此文件的文档:https ://airflow.apache.org/docs/stable/concepts.html#where-to-put-airflow-local-settings-py
pod_mutation_hook
每当您使用KubernetesExecutor
或时都会使用now KubernetePodOperator
。KubernetesExecutor 或 KubernetesExecutor 启动的 POD 将使用此突变挂钩。
现在,回到配置图。当您正在使用KubernetesExecutor
并有一个使用 KuberneretPodOperator 的任务时,您需要在 KubernetesExecutor 启动的工作 pod 上同时存在airflow.cfg
和文件。airflow_local_settings.py
KubernetesExecutor 会为此任务启动一个 Worker Pod。
Scheduler Pod ---> Worker Pod (Pod_1 -- 由 KubernetesExecuetor 启动) --> (Pod_2 -- 由 Pod_1 使用 KubernetePodOperator 启动的任务)
现在,airflow.cfg 中的整个[kubernetes]部分(https://github.com/apache/airflow/blob/master/airflow/config_templates/default_airflow.cfg#L870-L1028)仅用于 KubernetesExecutor 并影响挂载的内容在KubernetesExecutor 启动的Worker Pod 上。
如果您不指定airflow_local_settings
configmap,airflow_local_settings 文件将不会挂载到 worker pod(上例中的 Pod_1),并且只会挂载 airflow.cfg 文件。所以现在对于 Pod_2(由 Pod_1 启动)——(当您将 KubernetesPodOperator 与 KubernetesExecutor 一起使用时的特殊情况),因为 Pod_1(工作 POD)没有airflow_local_settings.py
文件,即使调度程序有它,Pod_2 也不会发生变异,因为文件没有那里不存在。
认为它与airflow.cfg 相同——为什么要将airflow.cfg
文件同时挂载到Scheduler POD 和worker POD。同样,对于这种边缘情况,您需要airflow_local_settings.py
在两个地方都有文件。
https://github.com/apache/airflow/blob/ba2d6408e64f219e8f53a20a5a149e3d8109db31/airflow/kubernetes/worker_configuration.py#L279-L305 --> 此代码用于决定在 Worker Pod 上挂载的内容(REF_1)
https://github.com/apache/airflow/blob/ba2d6408e64f219e8f53a20a5a149e3d8109db31/airflow/executors/kubernetes_executor.py#L462-L481 --> 为 KubernetesExecutor 运行的每个任务创建的 Pod ( REF_2 ) -- 变异应用于此 POD因为这是由调度程序启动的并且它有airflow_local_settings.py
文件
https://github.com/apache/airflow/blob/ba2d6408e64f219e8f53a20a5a149e3d8109db31/airflow/providers/cncf/kubernetes/operators/kubernetes_pod.py#L383 --> 此代码用于在使用KubernetesPod Operator时创建新的POD(REF_3) -- 由于airflow_local_settings.py
未安装在REF_2中生成的 POD 上,因此未将突变应用于此 POD。