我正在尝试将在kubernetes中运行的气流部署从CeleryExecutor
迁移到KubernetesExecutor
。在本地开发环境中运行一切正常(在minikube上运行),但是我需要在生产环境中加载sidecar容器以运行允许我连接到sql数据库的代理。经过一番谷歌搜索,似乎在pod_mutation_hook上某个地方的airflow_local_settings.py
文件中定义$PYTHONPATH
函数是应该如何完成此工作的。
[首先,我尝试根据this示例在配置映射中定义它。例如
apiVersion: v1
kind: ConfigMap
metadata:
name: airflow-config
namespace: dev
data:
...
AIRFLOW__KUBERNETES__LOGS_VOLUME_CLAIM: "airflow-logs"
AIRFLOW__KUBERNETES__AIRFLOW_LOCAL_SETTINGS_CONFIGMAP: "airflow-config"
...
airflow_local_settings.py: |
from airflow.contrib.kubernetes.pod import Pod
def pod_mutation_hook(pod: Pod):
extra_labels = {
"test-label": "True",
}
pod.labels.update(extra_labels)
我在airflow.cfg
文件中指定了此configmap,并对其进行了拾取和安装,所有其他env变量均正常工作,但是pod_mutation_hook
似乎没有运行,因为没有标签被添加到由启动的结果pod中kubernetes执行程序(请注意,此处还指定了日志卷声明,并且可以正常工作)。
接下来,我尝试根据注释airflow_local_settings.py
中的建议在$AIRFLOW_HOME/configs/airflow_local_settings.py
下为该作业启动气流的图像中定义here文件。我还从上面的airflow-config
configmap中删除了相关部分。由于它也缺少指定的标签,因此这似乎对为该作业创建的结果窗格没有影响。
所以,我不确定在这一点上如何进行,因为我不知道如何指定airflow_local_settings.py
文件和pod_mutation_hook
函数,以便它们在运行之前实际上对pod进行了突变。任何帮助将不胜感激。谢谢。
我有同样的问题,请确保可以从调度程序中导入airflow_local_settings
。您必须将这些更改烘焙到图像中。
WORKDIR ${AIRFLOW_USER_HOME}
ENV PYTHONPATH $PYTHONPATH:$AIRFLOW_HOME/config/
COPY airflow_local_settings.py $AIRFLOW_HOME/config/airflow_local_settings.py
使用上面突出显示的configmap会将它们带入执行程序,但此时不需要,因此也是一种无用的设置。随时阅读源代码:
https://github.com/apache/airflow/blob/8465d66f05baeb73dd4479b019515c069444616e/airflow/settings.py