apache-airflow-providers-cncf-kubernetes

更新日志

10.4.3

Bug 修复

  • 移除 CLI 命令中的 'subdir' 参数 (#49317)

杂项

  • 使用 contextlib.suppress(exception) 替代 try-except-pass 并添加 SIM105 ruff 规则 (#49251)

  • 移除多余的 else (#49199)

  • 移除 k8s provider 中未使用的 db 方法 (#49186)

10.4.2

杂项

  • airflow.sdk 导入 '@task' (#48896)

  • 更新 ECS executor 以支持 Task SDK (#48513)

10.4.1

Bug 修复

  • 处理 pod_manager.get_container_status 中缺失的 container_statuses (#47936)

杂项

  • 从基础 executor 中移除 change_sensor_mode_to_reschedule (#48649)

  • 无需专门为 KE 排除 executor_config (#48826)

10.4.0

新特性

  • KubernetesPodOperator: base_container_name 添加到模板化字段中 (#47864)

Bug 修复

  • cncf.kubernetes: 使基础容器状态检查轮询间隔可配置 (#47774)

  • 切换到禁用 stdin 的非交互模式 (#47568)

  • 'KubernetesPodTrigger' 中重试 k8s API 请求 (#47187)

杂项

  • 移除用于获取异步 hook 的额外方法 (#47313)

10.3.1

杂项

  • 移除 google-re2 作为依赖项 (#47493)

  • AIP-72: 使用 task sdk 时,为 K8sExecutor 移植 executor_config (#46926)

  • 更新 KPO 文档字符串中的模板化字段 + 用语 (#46970)

  • flit 升级到 3.11.0 (#46938)

10.3.0

注意

此版本没有代码更改。发布此版本是因为之前版本因打包问题而被撤回。

10.2.0

新特性

  • KubernetesPodOperator 新的 callback 并允许使用多个 callback (#44357)

Bug 修复

  • (fix): 如果传递给 executor,则使用 pod_template_file 覆盖渲染 pod 规范 (#46374)

  • fix: kpo 异步 kube_config_path (#45571)

  • 允许在 spark kubernetes 驱动配置中传递空标签 (#45864)

  • fix: spark operator 标签 (#45353)

  • 在待处理的 k8s pod 被删除时允许内部重试 (#45184)

  • fix: 在作业完成后正确关闭 xcom (#45455)

  • 修复 kubernetes executor watcher kube_client_request_args 阴影问题 (#45528)

杂项

  • 修复 @task.kubernetes 文档字符串中错误的 operator 名称 (#46873)

  • AIP-83 修正案:在 logical date None 时添加生成 run_id 的逻辑 (#46616)

  • 移除被忽略的 'pod_generator_deprecated.py'  (#46587)

  • 使 '@task.kubernetes' pod 命名更具意义 (#46535)

  • chore(kubernetes): 减少冗余代码 (#46574)

  • TaskSDK 运行时中添加动态任务映射 (#46032)

  • 扩展 KPO 模板字段,修复 Spark k8s operator 测试 (#46268)

  • CeleryExecutor 切换为使用 TaskSDK 进行执行 (#46265)

  • Pod*Exceptions 移动到单独的模块 (#45759)

  • Context 类型提示添加其他实例 (#45657)

  • AIP-72: SDK 中为 Context 字典提供更好的类型提示支持  (#45583)

  • AIP-72: KubernetesExecutor 切换为使用 taskSDK 进行执行 (#46860)

10.1.0

注意

根据 Apache Airflow provider 支持策略 中的说明,此版本的 provider 仅适用于 Airflow 2.9+。

新特性

  • KubernetesPodOperator 中为 init container 添加日志记录支持 (#42498) (#43853)

  • 实现 KubernetesInstallKueueOperator + (#44568)

  • 支持对 KubernetesPodOperator 的日志行进行分组 (#44428)

Bug 修复

  • 对比 k8s executor 时使用别名而非完整的 ExecutorName repr (#44967)

  • 修复失败的 KubernetesExecutor (#44931)

杂项

  • 移除对 AIRFLOW_V_2_9_PLUS 的引用 (#44987)

  • providers 中支持的最低 Airflow 版本提升至 Airflow 2.9.0 (#44956)

  • providers 中检查 Airflow 版本的一致性方法 (#44686)

  • 修复 yoda-conditions (#44466)

10.0.1

Bug 修复

  • 通过从 k8s job client 方法 'delete_namespaced_job' 调用中移除意外的 'job' 参数来修复 KubernetesJobOperator.on_kill() (#44131)

  • 当任务卡在 queued 状态时重新排队 (#43520)

杂项

  • 在整个 codebase 中将 execution_date 重命名为 logical_date (#43902)

10.0.0

重大变更

警告

所有已弃用的类、参数和功能已从 Kubernetes provider 包中移除。引入了以下重大变更:

  • 辅助函数
    • kubernetes_helper_functions.py 中移除 add_pod_suffix 方法。请改用 add_unique_suffix

    • PodGenerator 中移除 make_unique_pod_id 方法。请改用 kubernetes_helper_functions 中的 add_unique_suffix

    • kubernetes_helper_functions.py 中移除 create_pod_id 方法。请改用 create_unique_id

    • PodGenerator 中移除 gen_pod 方法。

    • PodGenerator 中移除 add_xcom_sidecar 方法。请改用 airflow.providers.cncf.kubernetes.utils.xcom_sidecar.add_xcom_sidecar

    • 移除在 PodGeneratorfrom_obj 函数中使用字典作为 executor_config 的选项。请改用带有“pod_override”键的 kubernetes.client.models.V1Pod 类。

    • PodGenerator 中移除 from_legacy_obj 方法。

    • 移除 airflow.providers.cncf.kubernetes.pod_launcher_deprecated 模块。请改用 airflow.providers.cncf.kubernetes.utils.pod_manager

  • Operator
    • 移除 airflow.providers.cncf.kubernetes.operators.kubernetes_pod。请改用 airflow.providers.cncf.kubernetes.operators.pod

    • KubernetesPodOperator 中移除 is_delete_operator_pod 参数。请改用 on_finish_action

    • KubernetesPodOperator 中移除 progress_callback 参数。请改用 callbacks

    • KubernetesPodOperator 中移除 execute_complete 方法。请改用 trigger_reentry

    • SparkKubernetesOperator 中移除 xcom_push 参数。请改用 do_xcom_push

  • Trigger
    • KubernetesPodTrigger 中移除 should_delete_pod 参数。请改用 on_finish_action

  • 工具类
    • PodManager 中移除 progress_callback 参数。

    • PodManager 中移除 follow_container_logs 方法。请改用 fetch_container_logs

警告

@task.kubernetesnamespace 的默认值设置为 None,以便在 in_cluster 为 True 时使用集群命名空间。使用此装饰器时务必指定命名空间。要保留以前的行为,请设置 namespace="default"

  • 移除 cncf.kubernetes 中的弃用项 (#43689)

  • 'task.kubernetes' 'namespace' 的默认值更改为 None (#43402)

Bug 修复

  • SparkKubernetesOperator 添加 random_name_suffix (#43847)

  • 在未知错误情况下终止 kubernetes watch (#43645)

  • 更新 'find_pod' 函数的 'namespace' 优先级 (#43762)

杂项

  • AIP-72: 移除 DAG pickling (#43667)

9.0.1

Bug 修复

  • (fix): kubernetes executor 中重新调度其他 executor HybridExecutor 任务 (#43003)

  • (fix): trigger_reentry 时使用实例的 base_container_name 来获取日志 (#42960)

杂项

  • kubernetes_conn_id 添加到模板化字段 (#42786)

  • 允许在 KPO 中进行 node_selector 模板化 (#43051)

  • Kubernetes Python SDK 的最大版本提升到 31.0.0 (#42907)

9.0.0

重大变更

警告

在从 Airflow 1 升级到 2 期间,通过 execution_date 识别 pod 的支持已被移除。这可能导致为最初由 Airflow 1 启动的任务启动重复的 pod,但只有一个任务 pod 会成功。

  • kubernetes executor cleanup_stuck_queued_tasks 优化 (#41220)

Bug 修复

  • 所有 executor 都应继承自 BaseExecutor (#41904)

  • 修复在获取日志时 pod 失败的情况下标记为成功的问题 (#42815)

  • 修复 SparkKubernetesOperator spark 名称 (#42427)

  • 如果凭据刷新, KubernetesPodOperator 不会停止 (#42361)

  • 重构了 'await_xcom_sidecar_container_start' 方法 (#42504)

  • KubernetesHook kube_config extra 可以接受字典 (#41413)

杂项

  • 核心和 providers 放弃对 python3.8 的支持 (#42766)

  • k8s executor pod selector 中移除 airflow_version (#42751)

8.4.2

杂项

  • 移除弃用的配置 (#42129)

  • 更新 AsyncKubernetesHook 中的 docstring (#41929)

  • Kubernetes Provider 中移除对 Airflow 2.7 的支持 (#41746)

  • providers 中移除弃用的 soft_fail (#41710)

8.4.1

Bug 修复

  • fix: 修复当 watcher 收到 reason ProviderFailed 的事件时, 'KubernetesExecutor' 导致任务失败的问题 (#41186)

  • fix: 修复 KubernetesJobOperator 'do_xcom_push' 'get_logs' 功能 (#40814)

  • fix: 修复当 '_is_in_cluster' 设置为 False 时, 'KubernetesHook' 加载配置文件的问题 (#41464)

  • fix: 'CeleryKubernetesExecutor' 'LocalKubernetesExecutor' 中缺失 'slots_occupied' (#41602)

8.4.0

注意

根据 Apache Airflow provider 支持策略 中的说明,此版本的 provider 仅适用于 Airflow 2.8+。

杂项

  • providers 中支持的最低 Airflow 版本提升至 Airflow 2.8.0 (#41396)

  • docstring 中正确描述行为 (#41458)

  • 移除弃用的 SubDags (#41390)

  • 重新排序 'SparkKubernetesOperator' docstring (#41372)

8.3.4

Bug 修复

  • kube/config 文件的内容作为字典传递给 triggerer (#41178)

  • 修复 kubernetes executor 中令人困惑的日志消息 (#41035)

  • 修复收养已完成 pod ApiException 的处理问题 (#41109)

8.3.3

Bug 修复

  • 解决使用 task decorator 和导入的 typing 元素时 KPO 任务失败的问题 (#40642)

杂项

8.3.2

Bug 修复

  • 修复由于集群中已完成 pod 过多导致 Scheduler 重启的问题 (#40183)

杂项

  • 将最低支持的 kubernetes lib 版本提升到 kubernetes 29.0.0 (#40253)

8.3.1

Bug 修复

  • 修复 KubernetesPodTrigger 因超时导致正在运行的 pod 失败的问题 (#40019)

  • token 过期时刷新 KubernetesPodOperator 的属性,包括在记录日志时 (#39789)

  • 修复同步模式下 reattach_on_restart 参数的问题 (#39329)

  • 避免在 kubernetes executor 重试时重置已收养的任务实例 (#39406)

杂项

  • pod pending 事件包含 fatal reason (#39924)

8.3.0

新特性

  • k8s executor 监视 pod 事件时添加超时 (#39551)

  • KubernetesCreateResourceOperator KubernetesJobOperator 添加重试逻辑 (#39201)

Bug 修复

  • 修复 'cncf.kubernetes' provider 中的弃用调用 (#39381)

  • 处理 pod 成功完成时获取日志的异常 (#39296)

  • 修复 read_namespaced_pod_log 调用中错误的参数 (#39874)

杂项

  • Kubernetes cli 移动到 provider (#39587)

  • 移除 2.7.0 compat 代码 - 它现在是最小 Airflow 版本 (#39591)

  • 简化 'airflow_version' 导入 (#39497)

  • KubernetesPodOperator._write_logs 中用 client.read_namespaced_pod_log 替换 pod_manager.read_pod_logs (#39112)

  • KPO 中添加警告消息,警告一秒间隔日志重复的问题 (#39861)

8.2.0

注意

此 provider 版本仅适用于 Airflow 2.7+ 版本,如 Apache Airflow provider 支持策略 中所述。

新特性

  • KPO trigger 中添加缺失的信息性日志,直到容器完成 (#37546)

Bug 修复

  • 修复 k8s pod operator 的模板化环境变量 (#39139)

  • 修复使用 initContainers 时的 SparkKubernetesOperator 问题 (#38119)

  • KubernetesPodOperator k8s token 过期而失败时刷新属性 (#39325)

其他

  • provider 中的最小 Airflow 版本提升至 Airflow 2.7.0 (#39240)

  • 移除 cncf provider 中不必要的验证。 (#39238)

  • 将弃用的 pod_generator 中的 airflow 导入移至本地 (#39062)

  • KPO xcom sidecar PodDefault 用法 (#38951)

8.1.1

Bug 修复

  • 避免 KPO 记录空行 (#38247)

8.1.0

新特性

  • KPO 在终止步骤中添加跟踪日志 (#38081)

  • 添加 GKECreateCustomResourceOperator GKEDeleteCustomResourceOperator operator (#37616)

  • KubernetesJobOperator 实现可延迟模式 (#38251)

  • 创建 KubernetesPatchJobOperator operator (#38146)

  • KubernetesDeleteJobOperator 实现 delete_on_status 参数 (#38458)

  • GKEStartJobOperator 实现可延迟模式 (#38454)

  • 在启动时检查 pod 时使用 startup_check_interval_seconds 代替 poll_interval (#38075)

  • KubernetesJobOperator 实现 wait_until_job_complete 参数 (#37998)

Bug 修复

  • 使用 SIGINT 信号编号代替信号名称 (#37905)

  • 修复 spark operator driver 检索日志的问题 (#38106)

  • 修复自定义 launcher 的动态分配规范处理问题 (#38223)

  • 修复 SparkKubernetesOperator.application_file 是模板化文件的情况 (#38035)

  • fix: 减少 pod 事件的不相关错误日志。 (#37944)

其他

  • 添加 GKEListJobsOperator GKEDescribeJobOperator (#37598)

  • 移除了 provider k8s pod.py 中用于命名 pod 的弃用函数的用法。  (#38638)

  • 创建 DeleteKubernetesJobOperator GKEDeleteJobOperator operator (#37793)

  • 重构 GKE hooks (#38404)

8.0.1

Bug 修复

  • worker pod 出现致命容器状态时立即使任务失败 (#37670)

  • pod 创建失败的情况下跳过 pod 清理 (#37671)

其他

  • 避免使用不推荐的日志记录用法 (#37792)

  • executor 文档迁移到相应的 provider (#37728)

8.0.0

破坏性变更

在出现 Kube API 超出配额错误的情况下,我们引入了 task_publish_max_retries 标志来控制重新排队任务的行为。默认行为已从无限次重试更改为 0。默认行为是不重试 (task_publish_max_retries==0)。要设置为无限次重试,请设置 task_publish_max_retries=-1。要设置为固定次数重试,请将 task_publish_max_retries 设置为任何正整数。

  • Fix: pod 启动错误的情况下,任务会永久卡在排队状态 (#36882)

新特性

  • KubernetesPodOperator 中添加 logging_interval 以定期记录容器日志 (#37279)

  • 创建 GKEStartJobOperator KubernetesJobOperator (#36847)

Bug 修复

  • 修复 python_kubernetes_script 偶尔出现的 attr-undefined (#37318)

  • 修复 deferrable 任务带 do_xcom_push KPO 挂起的问题 (#37300)

  • 修复 'SparkKubernetesOperator.template_body' 的渲染问题 (#37271)

  • 修复 'KubernetesPodOperator' '__init__' 中模板字段的赋值问题 (#37010)

  • KPO 保持 execute_complete trigger run 方法的向后兼容性 (#37454)

  • 修复 KPO 任务在 pod 未能在指定超时时间内启动时挂起的问题 (#37514)

  • 修复 KPO 过早退出时的 KeyError (#37508)

其他

  • feat: 将所有类、函数、方法的弃用标记切换为装饰器 (#36876)

  • Kubernetes 版本升级 (#37040)

  • 添加 GKEStartKueueInsideClusterOperator (#37072)

  • Kubernetes ApiException 状态码转换为字符串,以确保其被正确检查 (#37405)

7.14.0

新特性

  • 添加 SparkKubernetesOperator crd 实现 (#22253)

  • KubernetesPodOperator 中对 configmaps 提供模板字段支持 (#36922)

  • KubernetesPodOperator 创建通用的回调类 (#35714)

Bug 修复

  • fix: 避免在 KubernetesPodOperator 已被标记为失败后重试 (#36749)

  • 修复 provider warnings.warn stacklevel (#36831)

  • 增加 read_pod_logs 中的 tenacity 等待时间 (#36955)

  • 36888-修复 7.14.0rc1 中的 k8 configmap 问题 (#37001)

其他

  • 更改 kube_config 的字段类型 (#36752)

  • 更改 CNCF provider docstring 中的措辞 (#36547)

  • 添加对 Pendulum 3 的支持 (#36281)

7.13.0

新特性

  • 允许更改 'KubernetesResourceBaseOperator' 中的 'config_file' (#36397)

其他

  • 在更改 KubernetesPodOperator 参数时添加关于更新 stub 文件的提醒 (#36434)

  • 如果未设置 skip_on_exit_code ,则不在 KubernetesPodOperator 中获取 pod 状态 (#36355)

  • 移除 k8s pod operator 中弃用的输入参数 (#36433)

  • 提升最小 airflow 版本到 2.6.0 后,从 Kubernetes decorator 中删除 get_python_source (#36426)

  • 移除 K8S pod operator 模块中重复的方法,并从 helper 函数导入它们 (#36427)

7.12.0

新特性

  • KPO 日志获取调用添加 _request_timeout (#36297)

  • 'KubernetesPodOperator' 添加 'pod_template_dict' 字段 (#33174)

  • KubernetesPodTrigger: TriggerEvent 中添加异常堆栈跟踪 (#35716)

  • 使 pod_name 长度等于 HOST_NAME_MAX (#36332)

  • KubernetesPodTrigger hook 移至 cached property (#36290)

Bug 修复

  • Kubernetes executor 运行槽泄露修复 (#36240)

  • 在子类中遵循 BaseHook 连接字段方法的签名 (#36086)

  • list pods 性能优化 (#36092)

7.11.0

注意

此 provider 版本仅适用于 Airflow 2.6+ 版本,如 Apache Airflow provider 支持策略 中所述。

Bug 修复

  • fix: KPO env_vars 的类型问题 (#36048)

  • 当状态为 None 时,停止将其转换为 TaskInstanceState (#35891)

  • Feature: SparkKubernetesOperator application_file 中传递字典配置 (#35848)

其他

  • provider 中的最小 Airflow 版本提升至 Airflow 2.6.0 (#36017)

7.10.0

新特性

  • KubernetesPodOperator 中添加 annotations 字段  (#35641)

  • KubernetesResourceBaseOperator 添加 custom_resource_definition (#35600)

Bug 修复

  • Revert 移除 PodLoggingStatus 对象 #35422 (#35822)

  • 修复 K8S executor 使用 pod_override_object 覆盖配置的问题 (#35185)

  • 修复并重新应用 provider 文档的模板 (#35686)

其他

  • 移除 KPO 日志记录中无关的代码片段 (#35416)

  • 移除 'KubernetesResourceBaseOperator' docstring 中不存在的参数

  • KubernetesExecutor 可观测性改进 (#35579)

7.9.0

新特性

  • 添加 provider 文档符合预期的验证 (#35424)

  • startup_check_interval_seconds 添加到 PodManager await_pod_start (#34231)

Bug 修复

  • 移除 KPO 重试中的 before_log ,并在中断时添加 traceback (#35423)

  • 移除 KPO 日志内部函数 consume_logs 上的 tenancity (#35504)

其他

  • 简化 KPO 多容器日志协调逻辑 (#35450)

  • 移除 PodLoggingStatus 对象 (#35422)

  • 改进 clear_not_launched_queued_tasks 调用持续时间 (#34985)

  • 对空 xcom 结果 sentinel 使用常量 (#35451)

7.8.0

新特性

  • 添加到 KubernetesOperator V1VolumeMount 的渲染,包括 sub_path (#35129)

  • feat: KubernetesPodOperator pod spec 中添加 hostAliases (#35063)

Bug 修复

  • AsyncKubernetesHook 中的阻塞 IO 替换为异步 IO (#35162)

  • 合并 KubernetesPodTrigger 中警告的 stacklevel (#35079)

7.7.0

注意

此 provider 版本仅适用于 Airflow 2.5+ 版本,如 Apache Airflow provider 支持策略 中所述。

Bug 修复

  • 修复解析 KubernetesPodOperator 多行日志的问题 (#34412)

  • 修复 KubernetesPodTrigger 启动超时问题 (#34579)

  • 修复在 istio-sidecar 移除后 Pod 未被移除的问题  (#34500)

  • 通过重用 PodLogsConsumer 移除重复日志 (#34127)

其他

  • 提升 provider 的最小 airflow 版本 (#34728)

  • 弃用警告级别设置为 stacklevel 2 (#34530)

  • provider 中使用 'airflow.exceptions.AirflowException' (#34511)

7.6.0

新特性

  • 'KubernetesPodOperator' 添加 'progress_callback' 参数 (#34153)

Bug 修复

  • Pod*Exceptions 的定义移至 pod_generator (#34346)

  • 'KubernetesPodOperator' 延迟前推送到 xcom (#34209)

其他

  • 重构: 合并 provider 中的 import textwrap (#34220)

7.5.1

Bug 修复

  • fix(providers/spark-kubernetes): 在抛出异常时遵循 soft_fail 参数 (#34167)

  • SparkKubernetesSensor 中对 hook 使用 'cached_property' (#34106)

  • SparkKubernetesOperator 中对 hook 使用 cached property (#34130)

其他

  • 合并 provider 中相似的 if 逻辑 (#33987)

  • 移除 provider 中无用的字符串连接 (#33968)

  • 重构 provider 中不必要的跳转  (#33833)

  • provider 中查找正值时,将 loop 替换为 any (#33984)

  • kubernetes provider 中,当可能时,将 try 移到循环外 (#33977)

  • Airflow provider 中的序列连接替换为解包 (#33933)

  • provider 中,当 key 未使用时,将 dict.items 替换为 values (#33939)

  • 重构: 合并 import datetime (#34110)

7.5.0

新特性

  • 添加 istio 测试,使用 curl /quitquitquit 退出 sidecar ,以及其他一些...  (#33306)

  • 'KubernetesPodOperator' 添加 'active_deadline_seconds' 参数 (#33379)

  • 使 cluster_context 模板化 (#33604)

Bug 修复

  • 修复 KubernetesPodOperator 在中断时日志重复的问题 (#33500)

  • 修复 2.7.0 db 迁移 job 错误 (#33652)

  • 在决定是否跳过时,检查容器状态而不是 last_state (#33702)

  • 修复 kill istio proxy 逻辑 (#33779)

其他

  • 引入类常量使 worker pod 日志行可配置 (#33378)

  • KPO SCC 对象添加类型 (#33381)

  • 重构: 移除无用的 str() 调用 (#33629)

  • 重构: 改进重复项检测和列表排序 (#33675)

  • Sqlalchemy 查询重构为 2.0 风格 (第 7 部分) (#32883)

  • 合并 itertools 的导入和用法 (#33479)

  • 简化其他 provider len() 的条件 (#33569)

  • datetime 导入 utc 并标准化其导入 (#33450)

  • 始终使用 'typing_extensions' 中的 'Literal' (#33794)

  • provider 中使用字面量 dict 代替调用 dict() (#33761)

  • 通过将 cncf.kubernetes provider 中的一些模块导入移至类型检查块中来改进模块导入 (#33781)

7.4.2

其他

  • cncf.kubernetes celery provider 添加缺失的 re2 依赖 (#33237)

  • 使 'OnFinishAction' 枚举继承自 str ,以支持将其传递给 'KubernetesPodOperatpor' (#33228)

  • 重构: 简化 providers/cncf 中的代码 (#33230)

  • Airflow executors 中将 State 替换为 TaskInstanceState (#32627)

7.4.1

Bug 修复

  • 修复读取其他容器日志时等待基础容器的问题 (#33127)

  • Fix: 'xcom_sidecar' 的可配置 Docker 镜像 (#32858)

  • 修复 'KubernetesPodOperator' 子类默认的 container_logs (#33090)

  • 考虑 处理 Pod 查找 过程 时使用 自定义 Pod 标签 'KubernetesPodOperator' (#33057)

其他

  • 执行器 CLI 命令 添加 文档 生成 (#33081)

7.4.0

注意

此提供程序版本是第一个将 Kubernetes Executor 和 Local Kubernetes Executor 从核心 apache-airflow 包迁移到 cncf.kubernetes 提供程序包的版本。

新特性

  • 所有 k8S 移至 cncf.kubernetes 提供程序 (#32767)

  • [AIP-51] 执行器 提供的 CLI 命令 (#29055)

  • 'KubernetesPodOperator' 添加 'termination_message_policy' 参数 (#32885)

其他

  • SparkK8SOp 中,当监视器 资源 版本 太旧时,更新 该版本 (#32768)

  • 提供程序 模块 文档字符串 添加 弃用 信息 (#32536)

  • 执行器 CLI 提供中, 引发 原始 导入 错误 (#32931)

7.3.0

新特性

  • KubernetesOperatorPod 中的 所有 容器 记录 日志 (#31663)

Bug 修复

  • 通过在 清理 之前 等待 Pod 'execute_complete' 终止,修复 异步 KPO (#32467)

7.2.0

新特性

  • 'KubernetesPodOperator' 添加 'on_finish_action' (#30718)

Bug 修复

  • 修复 KubernetesPodOperator 验证 xcom json 并添加 重试 (#32113)

  • 修复 'KubernetesPodTrigger' 等待 策略 (#31348)

  • 修复 spark-kubernetes-operator 兼容性 (#31798)

其他

  • 添加 default_deferrable 配置 (#31712)

7.1.0

注意

此版本放弃了对 Python 3.7 的支持

新特性

  • KubernetesResourceOperator - KubernetesDeleteResourceOperator KubernetesCreateResourceOperator (#29930)

  • 循环中 事件被 yield 时添加 一个 return 以停止 执行 (#31985)

  • 任务失败 的情况下, 添加 禁用 记录 Pod 模板 的可能性 (#31595)

Bug 修复

  • triggers 类中 yield 后移除 return 语句 (#31703)

  • 修复 AWS 系统测试的 Fargate 日志记录 (#31622)

其他

  • 移除 Python 3.7 的支持 (#30963)

7.0.0

注意

Apache Airflow 提供程序支持策略 中所述,此提供程序版本仅适用于 Airflow 2.4+。

重大更改

注意

当 Kubernetes 连接中未定义命名空间时返回 None

  • KubernetesHook 中移除 已弃用的 功能 (#31402)

新特性

注意

如果未定义 kubernetes_default 连接,则 KubernetesHook / KubernetesPodOperator 将表现得如同提供了 conn_id=None。这应该会更容易缓解 6.0.0 中引入的重大更改。

  • 即使缺少 默认 连接, K8s hook 也应 能正常 工作 (#31187)

  • 添加 协议 以定义 KubernetesPodOperator 依赖的 方法 (#31298)

Bug 修复

  • 修复 kubernetes 任务 装饰器 pickle 错误 (#31110)

其他

  • 提高 提供程序中 最低 Airflow 版本 (#30917)

  • xcom 结果 文件 日志 消息 更具体 (#31228)

  • KubernetesPodOperator 添加 选项 (#30992)

  • 延迟的 'KubernetesPodOperator' 中,添加 从连接读取 K8S 配置文件的 缺失部分 (#29498) 

6.1.0

新特性

  • 'DockerOperator' 'KubernetesPodOperator' 跳过 逻辑中,添加 多个 退出码 处理 (#30769)

  • KubernetesPodOperator 任务 返回 提供的 退出码时 跳过 该任务 (#29000)

6.0.0

重大更改

KubernetesPodOperator 中默认使用 kubernetes_default 连接。

  • KubernetesPodOperator 使用 默认 连接 ID (#28848)

新特性

  • 允许 XCOM 容器 设置 限制 (#28125)

5.3.0

新特性

  • 增强 spark_k8s_operator (#29977)

Bug 修复

  • 修复 'get_logs=False' 时, KubernetesPodOperator xcom push 的问题 (#29052)

  • 修复了 挂起的 KubernetesPodOperator (#28336)

其他

  • 使 cncf 提供程序 文件名 AIP-21 对齐 (#29905)

  • 所有 taskflow 装饰器 中移除 “样板代码” (#30118)

  • 确保 setup/teardown 先前装饰过的 函数上 工作 (#30216)

5.2.2

Bug 修复

  • 通过将 条件语句 更改为 map,改进了 'KubernetesPodOperator._render_nested_template_fields' (#29760)

5.2.1

Bug 修复

  • 修复 @task.kubernetes 以接收 输入 和发送 输出 (#28942)

5.2.0

新特性

  • ''KubernetesPodOperator'' 添加 可延迟模式 (#29017)

  • 允许 K8s Pod Operator 设置 基础 容器 名称 (#28808)

Bug 修复

  • KPO 标记为 checked 时,仅修补 单个 标签 (#29279)

5.1.1

Bug 修复

  • 修复 不正确的 'await_container_completion' (#28771)

5.1.0

新特性

  • 添加 Flink on K8s Operator (#28512) 

  • KPO 添加 与卷相关的 嵌套 模板 字段 (#27719)

  • 允许 k8s executor / KPO 使用 更长的 Pod 名称 (#27736)

  • k8s 执行中,为 Pod 日志 读取 使用 标签 代替 Pod 名称 (#28546)

Bug 修复

  • Pod 不成功时,修补 “checked” (#27845)

  • k8s executor Pod 名称 保持在 63 个字符 以内 (#28237)

其他

  • 提供程序中 移除 过时的 compat 导入/代码 (#28507)

  • 重组 文档 (#27235) 

5.0.0

注意

Apache Airflow 提供程序支持策略 中所述,此提供程序版本仅适用于 Airflow 2.3+。

重大更改

以前,KubernetesPodOperator 依赖核心 Airflow 配置(即 kubernetes executor 的设置)来生成客户端时使用某些设置。此项考虑在 4.1.0 中已弃用,现已移除。如果您以前依赖 Airflow 配置,并且希望客户端生成具有非默认配置,您将需要在 Airflow 连接中定义您的配置,并将 KPO 设置为使用该连接。有关定义 kubernetes Airflow 连接的详细信息,请参阅 kubernetes 提供程序文档。

放弃支持在 KubernetesPodOperator 中以字典形式提供 resource。您应该使用 container_resourcesV1ResourceRequirements

KubernetesPodOperator 中的参数 node_selectors 已被移除;请改用 node_selector

KubernetesPodOperator 的以下后向兼容模块已被移除,您现在必须使用 kubernetes 库中相应的对象

  • airflow.kubernetes.backcompat.pod

  • airflow.kubernetes.backcompat.pod_runtime_info_env

  • airflow.kubernetes.backcompat.volume

  • airflow.kubernetes.backcompat.volume_mount

  • 移除 KPO 已弃用的 后向兼容 对象 (#27518)

  • 移除 KPO node_selectors 参数的 支持 (#27515)

  • 移除 k8s hook 未使用的 后向兼容 方法 (#27490)

  • 放弃 支持 ''KubernetesPodOperator'' 中以 字典形式 提供 ''resource'' (#27197)

  • 不考虑 KPO airflow core 配置 (#26849)

其他

  • 所有 提供程序 最低 airflow 版本 移至 2.3.0 (#27196)

  • log.exception log.error 更经济的 地方使用 log.exception (#27517)

新特性

KubernetesPodOperator 参数 name 现在是可选的。以前,当不提供 Pod 模板或完整的 Pod 规范时,name 是 KubernetesPodOperator 的必需参数。现在,如果未提供 name,将使用 task_id

KubernetesPodOperator 参数 namespace 现在是可选的。如果未通过 KPO 参数、Pod 模板文件或完整的 Pod 规范提供,我们将检查 airflow 连接,然后,如果在 k8s pod 中,尝试从容器推断命名空间,最后将使用 default 命名空间。

当使用类型为 kubernetes 的 Airflow 连接时,如果在环境变量或 secrets 后端中定义连接,不再需要为“extra”字段加上 extra__kubernetes__ 前缀。如果 extra 包含重复字段(一个带前缀,一个不带),则将使用没有前缀的那个。

  • k8s hook extra 中移除 extra__kubernetes__ 前缀 (#27021)

  • container_resources 添加为 KubernetesPodOperator 可模板化的 (#27457)

  • SparkKubernetesSensor 添加 container_name 选项 (#26560)

  • 允许 KPO 中配置 xcom sidecar 容器 镜像 (#26766)

  • 改进 task_id Pod 名称的 转换 (#27524)

  • 使 KubernetesPodOperator 中的 Pod 名称 可选 (#27120)

  • 使 KPO 命名空间 可选 (#27116)

  • @task.kubernetes 装饰器 启用 env_vars 字段的 模板 渲染 (#27433)

Bug 修复

  • 修复 KubernetesHook 属性不存在时 失败的 问题 (#25787)

  • 修复 kubernetes hooks 日志 消息 (#26999)

  • KPO 应该 使用 hook get namespace 方法 来获取 命名空间 (#27516)

新的弃用

  • KubernetesHook.get_namespace 中,如果定义了连接但未设置命名空间,我们

    当前返回 ‘default’;此行为已弃用 (#27202)。在下一个版本中,我们将返回 None

  • 弃用 PodManager 中使用 core get_kube_client (#26848)

4.4.0

新特性

  • feat(KubernetesPodOperator): 添加 container_security_context 的支持 (#25530)

  • 添加 @task.kubernetes taskflow 装饰器 (#25663)

  • 美化 打印 KubernetesPodOperator 渲染的 模板 env_vars (#25850)

Bug 修复

  • 只需要 一个项时, 避免 计算 所有 元素 (#26377)

  • sidecar 执行 之前,等待 xcom sidecar 容器 启动 (#25055)

4.3.0

新特性

  • 使用 ParamSpec 改进 taskflow 类型 提示 (#25173)

Bug 修复

  • 修复 xcom_sidecar 卡住 问题 (#24993)

4.2.0

新特性

  • KPO Pod 添加 'airflow_kpo_in_cluster' 标签 (#24658)

  • KubernetesPodOperator 中,使用 找到的 Pod 进行 删除 (#22092)

Bug 修复

  • 还原 "修复 await_container_completion 条件 (#23883)" (#24474)

  • 更新 提供程序 以使用 functools compat 对于 ''cached_property'' (#24582)

其他

  • Kub op 中的 'resources' 参数 重命名为 k8s_resources (#24673)

4.1.0

新特性

  • 以前,KubernetesPodOperator 依赖核心 Airflow 配置(特别是 kubernetes executor 的设置)来生成客户端时使用某些设置。现在 KubernetesPodOperator 使用 KubernetesHook,并且对核心 k8s 设置的考虑已正式弃用。

  • 如果您使用 Airflow 配置设置(例如,与操作符参数相对)来配置 kubernetes 客户端,则在下一个主要版本之前,您将需要添加一个 Airflow 连接,并将您的 KPO 任务设置为使用该连接。

  • KubernetesPodOperator 中使用 KubernetesHook 创建 api client (#20578)

  • [特性] KPO 使用 K8S hook (#22086)

  • KubernetesHook KubernetesPodOperator 添加 参数 文档 (#23955) (#24054)

Bug 修复

  • KPO Pod 修补为 “checked” 时,使用 “remote” Pod (#23676)

  • KPO _suppress 函数中 不使用 root logger (#23835)

  • 修复 await_container_completion 条件 (#23883)

其他

  • Cncf.Kubernetes 示例 DAG 迁移到 新设计 #22441 (#24132)

  • 清理 日志 调用中 f-strings (#23597)

4.0.2

Bug 修复

  • 修复: 解析 日志时 出现 异常 #20966 (#23301)

  • 修复了 Kubernetes Operator 大容量 xcom 内容 缺陷 (#23490) 

  • 澄清 'reattach_on_restart' 行为 (#23377)

4.0.1

Bug 修复

  • airflow 异常中 添加 k8s 容器的 错误 消息 (#22871)

  • KubernetesHook 应在 未另行配置时优先尝试 incluster (#23126)

  • KubernetesPodOperator 应始终 patch "already checked" (#22734)

  • SparkKubernetesOperator 中删除旧的 Spark Application (#21092)

  • 清理重复代码,现在 k8s provider 要求 2.3.0+ (#22845)

  • 修复 ''KubernetesPodOperator'' 'KubernetesExecutor'' 2.3.0 上的问题 (#23371)

  • 修复 KPO 中使用连字符而不是点的问题 (#22982)

  • 修复 main 分支中新的 MyPy 错误 (#22884)

4.0.0

不兼容变更

版本 4.0.0 的 provider 仅适用于 Airflow 2.3+。如果您想使用 provider 4.* 系列中的功能或修复,请将 Airflow 升级到 2.3 版本。

不兼容的主要原因是使用了最新的 Kubernetes Libraries。cncf.kubernetes provider 需要比 Airflow 2.1 和 2.2 用于 Kubernetes Executor 的库版本更新,这使得该 provider 与这些 Airflow 版本不兼容。

新功能

  • 仅在 ''DEBUG'' 级别记录 KPO 日志读取中断的 traceback (#22595)

  • 更新我们处理执行器绑定依赖项的方法 (#22573)

  • KPO pod_manager 中可选地不跟踪日志 (#22412)

Bug 修复

  • 停止在从 kubernetes 客户端接收到空日志时崩溃 (#22566)

3.1.2 (YANKED)

警告

此版本已被 yanked,原因为: Airflow 2.1、2.2 上安装允许安装不受支持的 kubernetes > 11.0.0

Bug 修复

  • 修复为所有 providers 错误添加的 install_requires (#22382)

  • 修复 "run_id" k8s elasticsearch 上与 Airflow 2.1 的兼容性问题 (#22385)

杂项

  • 移除用于 K8s 令牌刷新的 RefreshConfiguration 变通方法 (#20759)

3.1.1 (YANKED)

警告

此版本已被 yanked,原因为: Airflow 2.1、2.2 上安装允许安装不受支持的 kubernetes > 11.0.0

杂项

  • PyPI 中添加 Trove 分类器 (Framework :: Apache Airflow :: Provider)

3.1.0 (YANKED)

警告

此版本已被 yanked,原因为: Airflow 2.1、2.2 上安装允许安装不受支持的 kubernetes > 11.0.0

新功能

  • 为映射的 KubernetesPodOperator 添加 map_index 标签 (#21916)

  • KubernetesPodOperator 标签从 execution_date 改为 run_id (#21960)

杂项

  • 支持 Python 3.10

  • 修复 Kubernetes 示例中错误的 operator 大小写问题 (#21898)

  • KPO docstring 中移除 types (#21826)

3.0.2 (YANKED)

警告

此版本已被 yanked,原因为: Airflow 2.1、2.2 上安装允许安装不受支持的 kubernetes > 11.0.0

Bug 修复

  • cncf 添加遗漏的 deprecations (#20031)

3.0.1 (YANKED)

警告

此版本已被 yanked,原因为: Airflow 2.1、2.2 上安装允许安装不受支持的 kubernetes > 11.0.0

杂项

  • 更新 Kubernetes 库版本 (#18797)

3.0.0

不兼容变更

  • 参数 is_delete_operator_pod 默认值更改为 True (#20575)

  • 简化 KubernetesPodOperator (#19572)

  • pod_mutation_hook 调用从 PodManager 移至 KubernetesPodOperator (#20596)

  • ''PodLauncher'' 重命名为 ''PodManager'' (#20576)

参数 is_delete_operator_pod 的新默认值

之前,参数 is_delete_operator_pod 的默认值为 False,这意味着任务运行后,其 pod 不会被 operator 删除,并无限期地留在集群中。在此版本中,我们将默认值更改为 True

关于 KubernetesPodOperator 和 PodLauncher 更改的说明

警告

KubernetesPodOperatorPodLauncher 中的许多方法已被重命名。如果您曾对 KubernetesPodOperator 进行子类化,则需要更新您的子类以反映新的结构。此外,PodStatus 枚举已重命名为 PodPhase

概览

一般来说,如果您没有对 KubernetesPodOperator 进行子类化,并且没有直接使用 PodLauncher 类,那么您无需担心此更改。但是,如果您曾对 KubernetesPodOperator 进行子类化,以下是本版本更改的一些说明。

重构的主要目标之一是清晰地分离“获取或创建 pod”和“等待 pod 完成”阶段。以前,“等待 pod 完成”逻辑的调用方式取决于 operator 是“附加到现有 pod”(例如,在 worker 失败后)还是“创建新 pod”,这导致了一些代码重复和逻辑嵌套。通过此重构,我们将“获取或创建”步骤封装到方法 KubernetesPodOperator.get_or_create_pod 中,并将监控和 XCom 逻辑提升到 execute 的顶层,因为对于“附加”pod 和“新”pod 而言,这部分逻辑是相同的。

KubernetesPodOperator.get_or_create_pod 首先尝试使用任务实例特有的标签查找现有 pod(参见 KubernetesPodOperator.find_pod)。如果不存在,它会 创建 一个 pod <~.PodManager.create_pod>

执行的“等待”部分有三个组件。第一步是等待 pod 离开 Pending 阶段(~.KubernetesPodOperator.await_pod_start)。接下来,如果配置为跟踪,operator 将跟踪基础容器日志并将这些日志转发到任务 logger,直到 base 容器完成。如果未配置为收集日志,operator 将转而执行 KubernetesPodOperator.await_container_completion。无论哪种方式,我们都必须在收集 xcom 之前等待容器完成。在(可选地)从基础容器中提取 xcom 值后,我们 等待 pod 完成 <~.PodManager.await_pod_completion>

以前,根据 pod 是“重新附加到”(例如,在 worker 失败后)还是全新创建的,等待逻辑可能发生在 handle_pod_overlapcreate_new_pod_for_operator 中。

在 pod 终止后,我们根据 pod 是否成功终止执行不同的清理任务。

如果 pod 未成功 终止,我们尝试记录 pod 事件(PodLauncher.read_pod_events>)。此外,如果任务配置为在终止后删除 pod,我们会应用一个标签(KubernetesPodOperator.patch_already_checked>),表明 pod 失败,并且在重试时不应“重新附加”。如果任务配置为删除其 pod,我们会删除它(KubernetesPodOperator.process_pod_deletion>)。最后,我们会引发一个 AirflowException 以使任务实例失败。

如果 pod 成功终止,我们会删除 pod(KubernetesPodOperator.process_pod_deletion>)(如果配置为删除 pod)并推送 XCom(如果配置为推送 XCom)。

方法重命名、重构和删除的详细信息

KubernetesPodOperator

  • 方法 create_pod_launcher 被转换为缓存属性 pod_manager

  • k8s CoreV1Api 客户端的构建现在封装在缓存属性 client

  • 搜索现有 pod(例如,在 airflow worker 失败后)的逻辑从 execute 中移出,并移至方法 find_pod 中。

  • 方法 handle_pod_overlap 已被移除。以前,它会监控一个“找到的”pod 直到完成。通过此更改,pod 监控(和日志跟踪)直接从 execute 中协调,无论是“找到的”pod 还是“新”pod,逻辑都是相同的。参见方法 await_pod_start, follow_container_logs, await_container_completionawait_pod_completion

  • 方法 create_pod_request_obj 已重命名为 build_pod_request_obj。它现在接受参数 context 以添加 TI 特定的 pod 标签;以前它们是在返回后添加的。

  • 方法 create_labels_for_pod 已重命名为 _get_ti_pod_labels。此方法不返回所有标签,而只返回 TI 特定的标签。我们还添加了参数 include_try_number 以控制此标签的包含,而不是以后可能将其过滤掉。

  • 方法 _get_pod_identifying_label_string 已重命名为 _build_find_pod_label_selector

  • 方法 _try_numbers_match 已被移除。

  • 方法 create_new_pod_for_operator 已被移除。以前它会修改 self.pod 上的标签,启动 pod,监控 pod 直到完成等。现在此逻辑部分由 get_or_create_pod 处理,必要时将创建新 pod。监控等现在直接从 execute 中协调。再次参见对方法 await_pod_start, follow_container_logs, await_container_completionawait_pod_completion 的调用。

在类 PodManager (原 PodLauncher) 中

  • 方法 start_pod 已被移除并拆分为两个方法:create_podawait_pod_start

  • 方法 monitor_pod 已被移除并拆分为方法 follow_container_logs, await_container_completion, await_pod_completion

  • 方法 pod_not_started, pod_is_running, process_status, 和 _task_status 已被移除。这些方法由于将 pod phase 映射到任务实例状态的方式而需要;但我们不再进行这种映射,而是直接处理 pod 阶段而无需转换。

  • 方法 _extract_xcom 已重命名为 extract_xcom

  • 方法 read_pod_logs 现在接受 kwarg container_name

pod_manager.py (原 pod_launcher.py) 中的其他更改

  • pod_launcher.PodLauncher 重命名为 pod_manager.PodManager

  • 类枚举 PodStatus 重命名为 PodPhase,并且值不再是小写。

  • airflow.settings.pod_mutation_hook 不再在 cncf.kubernetes.utils.pod_manager.PodManager.run_pod_async 中调用。对于 KubernetesPodOperator,修改现在发生在 build_pod_request_obj 中。

  • 参数 is_delete_operator_pod 的默认值更改为 True,以便任务完成后删除 pod,而不是使其累积。实践中,似乎更常见的是仅出于调试目的暂时禁用 pod 删除,因此删除 pod 是更合理的默认值。

新功能

  • KubernetesHook 添加参数 config, in_cluster, cluster_context (#19695)

  • KubernetesPodOperator 实现 dry_run (#20573)

  • 澄清 K8s providers ''build_pod_request_obj'' 的文档字符串 (#20574)

Bug 修复

  • 修复 Volume/VolumeMount KPO DeprecationWarning (#19726)

2.2.0

新功能

  • KPO 中添加 namespace 作为模板字段。 (#19718)

  • 将名称随机化与名称 kwarg 解耦 (#19398)

Bug 修复

  • 在过滤前检查 event.status.container_statuses (#19713)

  • KubernetesHook 中将 'extra' 参数合并到 None (#19694)

  • KubernetesPodOperator 中更改为正确的类型 (#19459)

2.1.0

新功能

  • PodLauncher 添加更多类型提示 (#18928)

  • PodLauncher 超时错误添加更多信息 (#17953)

2.0.3

Bug 修复

  • 修复 KubernetesPodOperator 在不删除 pod 时的重新附加问题 (#18070)

  • 使 Kubernetes job 描述适合在一条日志行中显示 (#18377)

  • 如果读取日志失败,不要使 KubernetesPodOperator 任务失败 (#17649)

2.0.2

Bug 修复

  • 修复使用 XCom ''KubernetesPodOperator'' 的问题 (#17760)

  • providers manager 中延迟导入 Hooks (#17682)

2.0.1

新功能

  • 启用在 Kubernetes Pod Operator 中使用自定义 pod launcher (#16945)

Bug 修复

  • BugFix: template_field 中使用 'json' 字符串导致 K8s Operators 出现问题 (#16930)

2.0.0

不兼容变更

  • 自动应用 apply_default 装饰器 (#15667)

警告

由于移除了 apply_default 装饰器,此版本的 provider 要求 Airflow 2.1.0+。如果您的 Airflow 版本 < 2.1.0,并且您想安装此 provider 版本,请首先将 Airflow 升级到至少 2.1.0 版本。否则,您的 Airflow 包版本将自动升级,您将需要手动运行 airflow upgrade db 以完成迁移。

新功能

  • 'KubernetesPodOperator' 添加 'pod-template-file' jinja 模板支持 (#15942)

  • KubernetesPodOperator pod 名称保存到 xcom (#15755)

Bug 修复

  • Bug 修复 由于空的 Affinity K8S 对象导致 Pod-Template Affinity 被忽略 (#15787)

  • Bug 修复 Pod Template File Values 被忽略 (#16095)

  • 修复在 KPO 中解析错误日志的问题 (#15638)

  • 修复当 'is_delete_operator_pod=True' KubernetesPodOperator 最终状态调用不成功的问题 (#15490)

1.2.0

新功能

  • 要求 KubernetesPodOperator 使用 'name' (#15373)

  • KPO node_selectors 警告更改为正确的 deprecationwarning (#15507)

Bug 修复

  • 修复使用 XCom KubernetesPodOperator 时的超时问题 (#15388)

  • 修复 ''KubernetesPodOperator'' 创建的 pod 上的标签问题 (#15492)

1.1.0

新功能

  • Kubernetes pod_launcher core airflow 分离 (#15165)

  • Spark operators 添加指定 api group version 的能力 (#14898)

  • 使用可用的 libyaml C 库。 (#14577)

1.0.2

Bug 修复

  • 允许在使用 pod_template 时在 KubernetesPodOperator 中覆盖 pod 名称。 (#14186)

  • 允许 KPO 用户 *实际* 模板化环境变量 (#14083)

1.0.1

更新了文档和 readme 文件。

Bug 修复

  • 正确地在 KubernetesPodOperator 中传递 image_pull_policy (#13289)

1.0.0

provider 的初始版本。

此条目有帮助吗?