airflow2.0 with KubernetesPodOperator: TemplateNotFound



我使用的是Airflow2.0与KubernetesPodOperator想要运行一个命令,从操作员运行的图像内部使用一个文件作为参数。这是我使用的:

KubernetesPodOperator(
namespace=commons.kubernetes_namespace,
labels=commons.labels,
image=f"myregistry.io/myimage:{config['IMAGE_TAG']}",
arguments=[
"python",
"run_module.py ",
"-i",
f'args/{config["INPUT_DIR"]}/{task_id}.json'
],
name=dag_name + task_id,
task_id=task_id,
secrets=[secret_volume]
)

但是这给了我错误:

raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: args/airflow2test/processing-pipeline.json

图像不使用任何宏。

有人知道吗?我做错了什么?

这是一个从PR在apache-airflow-providers-cncf-kubernetes2.0.0版本中发布开始的bug。更改的目标是允许对.json文件进行模板化。关于它所产生的问题,GitHub上有一个问题。PR最终解决了这个错误,并在2.0.2版中发布了该提供程序。

解决方案:

  1. 升级到最新的apache-airflow-providers-cncf-kubernetes(目前为2.0.2)
  2. 如果升级不是一个选项,使用自定义KubernetesPodOperator

有两种方法可以解决这个问题一个是改变template_fields另一个是改变template_ext:

第一个选项:正如raphaelauv发布的问题,不允许渲染arguments字段:

class MyKubernetesPodOperator(KubernetesPodOperator):
template_fields = tuple(x for x in KubernetesPodOperator.template_fields if x != "arguments")

第2个选项:如果你不喜欢渲染.json文件:

class MyKubernetesPodOperator(KubernetesPodOperator):
template_ext = ('.yaml', '.yml',)

相关内容

  • 没有找到相关文章

最新更新