0

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

该图像不使用任何宏。

有人有任何线索吗?我做错了什么?

4

1 回答 1

1

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

解决方案:

  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")

第二个选项:如果您不想渲染.json文件:

class MyKubernetesPodOperator(KubernetesPodOperator):
    template_ext = ('.yaml', '.yml',)
于 2021-10-03T18:19:20.700 回答