Airflow2.0升级后KubernetesPodOperator运行报错如何修复?
问题修复方案
报错明确指出KubernetesPodOperator不支持传入email_on_success参数,这是Airflow 2.0版本升级后两个核心变更导致的:
- 原
contrib包下的KubernetesPodOperator已被废弃,迁移到了CNCF providers独立包,参数定义发生了调整- Airflow 2.x中,邮件通知类全局参数不再作为Operator的构造参数直接接收,需要统一放到DAG的默认参数中配置
具体修改步骤
第一步:修改KubernetesPodOperator的导入路径
原来的导入from airflow.contrib.operators import kubernetes_pod_operator替换为:from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator若环境未安装对应provider包,可先执行安装命令
pip install apache-airflow-providers-cncf-kubernetes第二步:调整邮件相关参数的位置
将email、email_on_failure、email_on_success三个参数从KubernetesPodOperator的构造参数中移除,添加到default_dag_args字典里:default_dag_args = { 'start_date': datetime.datetime(2021, 6, 26), 'depends_on_past': False, 'max_active_runs': 1, 'email': ["xxx@gmail.com"], 'email_on_failure': True, 'email_on_success': True }第三步(可选优化):调整task_id的写法
原有代码用datetime.datetime.now()生成动态task_id,会导致每次DAG解析都生成新的任务ID,无法关联历史运行记录,建议改成固定task_id,或者使用Airflow内置的模板变量获取执行时间。
修改后完整代码
import datetime from airflow import models from airflow.providers.cncf.kubernetes.operators.kubernetes_pod import KubernetesPodOperator from kubernetes.client import models as k8s # DEFINE VARS HERE: dag_name = "daily_data_pipeline" schedule_interval = '@daily' email = ["xxx@gmail.com"] # get this from Gitlab docker_image = "registry.gitlab.com/xxxx:dev" default_dag_args = { 'start_date': datetime.datetime(2021, 6, 26), 'depends_on_past': False, 'max_active_runs': 1, 'email': email, 'email_on_failure': True, 'email_on_success': True } with models.DAG( dag_name, schedule_interval=schedule_interval, default_args=default_dag_args, catchup=False) as dag: kubernetes_min_pod = KubernetesPodOperator( task_id=dag_name, name=dag_name, namespace='default', image=docker_image, image_pull_secrets='gitlab', image_pull_policy='Always', startup_timeout_seconds=600)
内容的提问来源于stack exchange,提问作者slashie
相关产品推荐
相关产品推荐

