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
。移除在
PodGenerator
的from_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.kubernetes
中 namespace
的默认值设置为 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_resources
和 V1ResourceRequirements
。
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 更改的说明¶
警告
KubernetesPodOperator
和 PodLauncher
中的许多方法已被重命名。如果您曾对 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_overlap
或 create_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_completion
和await_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_completion
和await_pod_completion
的调用。
在类 PodManager
(原 PodLauncher
) 中
方法
start_pod
已被移除并拆分为两个方法:create_pod
和await_pod_start
。方法
monitor_pod
已被移除并拆分为方法follow_container_logs
,await_container_completion
,await_pod_completion
方法
pod_not_started
,pod_is_running
,process_status
, 和_task_status
已被移除。这些方法由于将 podphase
映射到任务实例状态的方式而需要;但我们不再进行这种映射,而是直接处理 pod 阶段而无需转换。方法
_extract_xcom
已重命名为extract_xcom
。方法
read_pod_logs
现在接受 kwargcontainer_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 的初始版本。