apache-airflow-providers-cncf-kubernetes

更新日志

10.1.0

注意

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

功能

  • KubernetesPodOperator 中添加 初始化 容器 日志 记录 支持 (#42498) (#43853)

  • 实现 KubernetesInstallKueueOperator + (#44568)

  • 支持 KubernetesPodOperator 日志 分组 (#44428)

Bug 修复

  • k8s 执行器 别名 进行比较, 而不是 完整的 ExecutorName repr (#44967)

  • 修复 失败的 KubernetesExecutor (#44931)

其他

  • 删除 AIRFLOW_V_2_9_PLUS 的引用 (#44987)

  • 提供程序中 最低 Airflow 版本 提升到 Airflow 2.9.0 (#44956)

  • 提供程序中 检查 Airflow 版本 的一致方式 (#44686)

  • 修复 yoda-conditions (#44466)

10.0.1

Bug 修复

  • 通过 k8s job 客户端 方法 'delete_namespaced_job' 调用 删除 意外的 'job' 参数, 修复 KubernetesJobOperator.on_kill() (#44131)

  • tassk 卡在 排队 时, 重新排队 (#43520)

其他

  • 代码库中的 execution_date 重命名为 logical_date (#43902)

10.0.0

重大更改

警告

所有已弃用的类、参数和功能已从 Kubernetes 提供程序包中删除。引入了以下重大更改

  • 助手
    • 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

  • 运算符
    • 删除 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

  • 触发器
    • 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 修复

  • random_name_suffix 添加到 SparkKubernetesOperator (#43847)

  • 在发生 未知 错误时 终止 kubernetes 监视 (#43645)

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

其他

  • AIP-72: 删除 DAG 序列化 (#43667)

9.0.1

Bug 修复

  • (修复): kubernetes 执行器中 重新调度其他 执行器的 HybridExecutor 任务 (#43003)

  • (修复): 使用 实例 base_container_name trigger_reentry 获取 日志 (#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 执行器 cleanup_stuck_queued_tasks 优化 (#41220)

Bug 修复

  • 所有 执行器 都应该 继承自 BaseExecutor (#41904)

  • 修复 获取 日志 Pod 失败 标记为 成功 的问题 (#42815)

  • 修复 SparkKubernetesOperator spark 名称 的问题 (#42427)

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

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

  • KubernetesHook kube_config 额外 可以接受 dict 类型 (#41413)

其他

  • 删除 python3.8 对核心和 提供程序的支持 (#42766)

  • k8s 执行器 Pod 选择器中 删除 airflow_version (#42751)

8.4.2

其他

  • 已删除 已弃用的 配置 (#42129)

  • AsyncKubernetesHook 中的 docstring 更新 (#41929)

  • Kubernetes Provider 删除 Airflow 2.7 支持 (#41746)

  • 提供程序 中删除 已弃用的 soft_fail (#41710)

8.4.1

Bug 修复

  • 修复: 如果 观察器 接收到 reason ProviderFailed 事件 ,则 'KubernetesExecutor' 会使任务失败 (#41186)

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

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

  • 修复: 'CeleryKubernetesExecutor' 'LocalKubernetesExecutor' 中缺少 'slots_occupied' 的问题 (#41602)

8.4.0

注意

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

其他

  • 提供程序中的 最低 Airflow 版本 提升到 Airflow 2.8.0 (#41396)

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

  • 删除 已弃用的 SubDags (#41390)

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

8.3.4

Bug 修复

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

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

  • 修复 采用已完成 Pod 时的 ApiException 处理 (#41109)

8.3.3

Bug 修复

  • 解决 使用 任务装饰器 导入的 类型 元素 KPO 任务 失败的问题 (#40642)

其他

8.3.2

Bug 修复

  • 修复 由于集群中 完成的 Pod 过多而导致 调度程序 重新启动的问题 (#40183)

其他

  • 最低 kubernetes 版本 提升到 kubernetes 29.0.0 (#40253)

8.3.1

Bug 修复

  • 修复了 KubernetesPodTrigger 因超时而导致运行中的 Pod 失败的问题 (#40019)

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

  • 修复 同步模式 reattach_on_restart 参数 (#39329)

  • 避免 kubernetes 执行器 重试时 重置 已采用的任务 实例 (#39406)

其他

  • 包含 Pod pending 事件 致命 原因 (#39924)

8.3.0

功能

  • k8s 执行器中观看 Pod 事件时添加 超时 (#39551)

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

Bug 修复

  • 修复 'cncf.kubernetes' 提供程序中已弃用的调用 (#39381)

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

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

其他

  • Kubernetes cli 移动到 provider (#39587)

  • 移除 2.7.0 兼容代码 - 它现在是 Airflow 的最低版本 (#39591)

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

  • KubernetesPodOperator._write_logs 中,将 pod_manager.read_pod_logs 替换为 client.read_namespaced_pod_log (#39112)

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

8.2.0

注意

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

新特性

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

Bug 修复

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

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

  • k8s 因令牌过期而失败时,刷新 KubernetesPodOperator 的属性 (#39325)

其他

  • providers 中的 最低 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)

  • 在启动时,使用 startup_check_interval_seconds 而不是 poll_interval 来检查 pod (#38075)

  • KubernetesJobOperator 实现 wait_until_job_complete 参数 (#37998)

Bug 修复

  • 使用 SIGINT 信号编号而不是信号名称 (#37905)

  • 修复从驱动程序检索 spark operator 日志的问题 (#38106)

  • 修复自定义启动器动态分配规范的处理 (#38223)

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

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

其他

  • 添加 GKEListJobsOperator GKEDescribeJobOperator (#37598)

  • provider k8s pod.py 中,移除了已弃用的 pod 命名函数的使用 (#38638)

  • 创建 DeleteKubernetesJobOperator GKEDeleteJobOperator operator (#37793)

  • 重构 GKE 钩子 (#38404)

8.0.1

Bug 修复

  • 在工作节点 pod 出现致命容器状态时,立即失败任务 (#37670)

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

其他

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

  • 将执行器文档迁移到各自的 providers (#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 设置为任何正整数。

  • 修复: pod 启动错误的情况下,任务永远卡在队列状态 (#36882)

新特性

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

  • 创建 GKEStartJobOperator KubernetesJobOperator (#36847)

Bug 修复

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

  • 修复 带有 do_xcom_push 的可延期任务的 KPO 挂起问题 (#37300)

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

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

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

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

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

其他

  • 功能: 将所有类、函数、方法弃用切换为装饰器 (#36876)

  • Kubernetes 版本升级 (#37040)

  • 添加 GKEStartKueueInsideClusterOperator (#37072)

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

7.14.0

新特性

  • 添加 SparkKubernetesOperator crd 实现 (#22253)

  • KubernetesPodOperator 中的 configmap 提供 模板 字段 支持 (#36922)

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

Bug 修复

  • 修复: 避免 KubernetesPodOperator 被标记为 失败 重试 (#36749)

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

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

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

其他

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

  • 更改 CNCF provider 文档字符串中的 措辞 (#36547)

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

7.13.0

功能

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

其他

  • 如果 更改了 KubernetesPodOperator 的参数, 添加 关于 更新 存根文件 的提醒 (#36434)

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

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

  • 在将 最小 airflow 版本 提升到 2.6.0 后, Kubernetes 装饰器 中删除 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 移动到 缓存 属性 (#36290)

Bug 修复

  • Kubernetes 执行器 运行 插槽泄漏 修复 (#36240)

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

  • 列表 pod 性能优化 (#36092)

7.11.0

注意

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

Bug 修复

  • 修复: KPO 类型 env_vars (#36048)

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

  • SparkKubernetesOperator 中, application_file 中传递字典配置 的功能 (#35848)

其他

  • providers 中的 最低 Airflow 版本 提升到 Airflow 2.6.0 (#36017)

7.10.0

功能

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

  • KubernetesResourceBaseOperator 添加 custom_resource_definition (#35600)

Bug 修复

  • 还原 删除 PodLoggingStatus 对象 #35422 (#35822)

  • 修复 K8S 执行器 使用 pod_override_object 覆盖 配置 (#35185)

  • 修复并重新应用提供程序文档的模板 (#35686)

其他

  • 删除 KPO 日志记录中无关紧要的代码段 (#35416)

  • 'KubernetesResourceBaseOperator' 文档字符串中删除不存在的参数

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

7.9.0

功能

  • 添加验证, 确保提供程序文档符合预期 (#35424)

  • PodManager await_pod_start 添加 startup_check_interval_seconds (#34231)

Bug 修复

  • 删除 KPO 重试中的 before_log,并在中断时添加 回溯信息 (#35423)

  • 删除 KPO 日志 内部函数 consume_logs tenancity (#35504)

其他

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

  • 删除 PodLoggingStatus 对象 (#35422)

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

  • xcom 结果 哨兵 使用常量 (#35451)

7.8.0

功能

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

  • feat: KubernetesPodOperator 中的 pod 规范添加 hostAliases (#35063)

Bug 修复

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

  • 合并KubernetesPodTrigger中的警告堆栈级别(#35079)

7.7.0

注意

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

错误修复

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

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

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

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

其他

  • 提升提供程序的最低airflow版本(#34728)

  • 已弃用设置的警告级别设置为堆栈级别2(#34530)

  • 提供程序中使用'airflow.exceptions.AirflowException'(#34511)

7.6.0

功能

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

错误修复

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

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

其他

  • 重构:合并提供程序中的importtextwrap(#34220)

7.5.1

错误修复

  • 修复(providers/spark-kubernetes):当引发异常时,遵守soft_fail参数(#34167)

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

  • SparkKubernetesOperator中使用缓存属性获取hook(#34130)

其他

  • 合并提供程序中相似的if逻辑(#33987)

  • 从提供程序中删除无用的字符串连接(#33968)

  • 重构提供程序中不必要的跳转(#33833)

  • 在提供程序中查找正值时,用any替换循环(#33984)

  • 当可能时,将try移到kubernetes提供程序中的循环之外(#33977)

  • Airflow提供程序中用解包替换序列连接(#33933)

  • key在提供程序中未使用时,用values替换dict.items(#33939)

  • 重构:合并importdatetime(#34110)

7.5.0

功能

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

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

  • 使cluster_context可模板化(#33604)

错误修复

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

  • 修复2.7.0数据库迁移作业错误(#33652)

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

  • 修复杀死istio代理的逻辑(#33779)

其他

  • 引入类常量以使工作节点Pod日志行可配置(#33378)

  • KPOSCC对象添加类型提示(#33381)

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

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

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

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

  • 简化其他提供程序中len()上的条件(#33569)

  • datetime导入utc并规范其导入(#33450)

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

  • 在提供程序中使用字面量dict而不是调用dict()(#33761)

  • 通过将cncf.kubernetes提供程序中的某些模块移动到类型检查块中来改进模块导入(#33781)

7.4.2

其他

  • cncf.kubernetescelery提供程序添加缺失的re2依赖项(#33237)

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

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

  • Airflow执行器中用TaskInstanceState替换State(#32627)

7.4.1

错误修复

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

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

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

  • 'KubernetesPodOperator'Pod查找过程中考虑自定义Pod标签(#33057)

其他

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

7.4.0

注意

此提供程序版本是将 Kubernetes 执行器和本地 Kubernetes 执行器从核心 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 修复

  • 通过在清理前在 'execute_complete' 中等待 pod 终止来修复异步 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)

  • 当在循环中产生事件时添加返回以停止执行 (#31985)

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

Bug 修复

  • 删除 triggers 类中 yield from 之后的 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 推送 (#29052)

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

其他

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

  • 从所有 taskflow 装饰器中删除“样板” (#30118)

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

5.2.2

Bug 修复

  • 'KubernetesPodOperator._render_nested_template_fields' 通过更改映射的条件得到改进 (#29760)

5.2.1

Bug 修复

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

5.2.0

新特性

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

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

Bug 修复

  • 仅在标记 KPO 已检查时修补单个标签 (#29279)

5.1.1

Bug 修复

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

5.1.0

新特性

  • K8s Operator 上添加 Flink (#28512)

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

  • 允许 k8s 执行器 / KPO 使用更长的 pod 名称 (#27736)

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

错误修复

  • Pod成功时,修补"checked"状态(#27845)

  • k8s执行器保留Pod名称,使其长度小于63个字符(#28237)

其他

  • 提供程序中删除过时的兼容性导入/代码(#28507)

  • 重构文档(#27235)

5.0.0

注意

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

重大更改

之前,KubernetesPodOperator 会考虑 Airflow 配置的 kubernetes 部分中的一些设置。这种考虑方式在 4.1.0 中已弃用,现在已被删除。如果您之前依赖于 Airflow 配置,并且希望客户端生成具有非默认配置,则需要在 Airflow 连接中定义您的配置,并设置 KPO 以使用该连接。有关详细信息,请参阅 Kubernetes 提供程序文档,了解如何定义 Kubernetes Airflow 连接。

删除对在 KubernetesPodOperator 中将 resource 作为字典提供的支持。您应该使用带有 V1ResourceRequirementscontainer_resources

参数 node_selectors 已在 KubernetesPodOperator 中删除;请改用 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)

  • 删除KPOnode_selectors参数支持(#27515)

  • 删除k8s钩子未使用的向后兼容方法(#27490)

  • 删除''KubernetesPodOperator''中将''resource''作为字典提供的支持(#27197)

  • 考虑KPOairflow核心配置(#26849)

其他

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

  • 使用log.exception,它比log.error更经济(#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钩子的extras中删除extra__kubernetes__前缀(#27021)

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

  • SparkKubernetesSensor添加container_name选项(#26560)

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

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

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

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

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

错误修复

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

  • 修复Kubernetes钩子的日志消息(#26999)

  • KPO应使用钩子的get命名空间方法获取命名空间(#27516)

新的弃用

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

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

  • 弃用PodManager中使用核心get_kube_client(#26848)

4.4.0

功能

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

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

  • 漂亮地打印KubernetesPodOperator渲染的模板env_vars(#25850)

错误修复

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

  • 等待xcom边车容器启动,然后再执行边车(#25055)

4.3.0

功能

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

错误修复

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

4.2.0

功能

  • 'airflow_kpo_in_cluster'标签添加到KPOPod(#24658)

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

错误修复

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

  • 更新提供程序以使用functools兼容性''cached_property''(#24582)

其他

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

4.1.0

功能特性

  • 之前,KubernetesPodOperator 依赖于 Airflow 的核心配置(即 Kubernetes 执行器的设置)来获取客户端生成时使用的某些设置。现在,KubernetesPodOperator 使用 KubernetesHook,并且官方已弃用对核心 k8s 设置的考虑。

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

  • KubernetesPodOperator 中使用 KubernetesHook 创建 api 客户端 (#20578)

  • [FEATURE] KPO 使用 K8S 钩子 (#22086)

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

Bug 修复

  • 在修补 KPO pod “已检查” 时,使用 “远程” pod (#23676)

  • 不要在 KPO _suppress 函数中使用根记录器 (#23835)

  • 修复 await_container_completion 条件 (#23883)

其他

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

  • 清理 日志调用中的 f-字符串 (#23597)

4.0.2

Bug 修复

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

  • 修复了 Kubernetes 操作符大型 xcom 内容缺陷 (#23490)

  • 阐明 “reattach_on_restart” 行为 (#23377)

4.0.1

Bug 修复

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

  • KubernetesHook 在未另行配置的情况下应首先尝试 incluster (#23126)

  • KubernetesPodOperator 应始终修补 “已经检查” (#22734)

  • 删除 SparkKubernetesOperator 中旧的 Spark 应用程序 (#21092)

  • 清理 重复代码,因为 k8s 提供程序需要 2.3.0+ (#22845)

  • 修复 2.3.0 上与 “KubernetesExecutor” 一起使用的 “KubernetesPodOperator” (#23371)

  • 修复 KPO 以使用连字符而不是句点 (#22982)

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

4.0.0

重大更改

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

不兼容的主要原因是使用了最新的 Kubernetes 库。cncf.kubernetes 提供程序需要的库版本比 Airflow 2.1 和 2.2 用于 Kubernetes 执行器的版本新,这使得提供程序与这些 Airflow 版本不兼容。

功能特性

  • 仅在 “DEBUG” 级别为 KPO 日志读取中断记录回溯 (#22595)

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

  • 可以选择在 KPO pod_manager 中不跟踪日志 (#22412)

Bug 修复

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

3.1.2(已撤销)

警告

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

Bug 修复

  • 修复为所有提供程序错误添加的 install_requires (#22382)

  • 修复 “run_id” k8s elasticsearch Airflow 2.1 的兼容性 (#22385)

其他

  • 删除 K8s 令牌刷新的 RefreshConfiguration 解决方法 (#20759)

3.1.1(已撤销)

警告

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

其他

  • PyPI 中添加 Trove 分类符 (框架 :: Apache Airflow :: 提供程序)

3.1.0(已撤销)

警告

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

功能特性

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

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

其他

  • 支持 Python 3.10

  • 修复具有错误操作符大小写的 Kubernetes 示例 (#21898)

  • KPO 文档字符串中删除类型 (#21826)

3.0.2(已撤销)

警告

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

Bug 修复

  • cncf 添加遗漏的弃用 (#20031)

3.0.1(已撤销)

警告

此版本已撤销,原因: 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 不会被操作符删除,并且会无限期地保留在集群上。在此版本中,我们将默认值更改为 True

关于 KubernetesPodOperator 和 PodLauncher 更改的说明

警告

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

概述

一般来说,如果您没有继承 KubernetesPodOperator 并且没有直接使用 PodLauncher 类,则无需担心此更改。但是,如果您已继承 KubernetesPodOperator,以下是一些关于此版本更改的说明。

重构的主要目标之一是明确区分“获取或创建 Pod”和“等待 Pod 完成”阶段。以前,“等待 Pod 完成”的逻辑会根据操作员是“附加到现有 Pod”(例如,在工作节点故障后)还是“创建新 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)。接下来,如果配置为这样做,操作员将跟踪基本容器日志并将这些日志转发到任务记录器,直到 base 容器完成。如果未配置为收集日志,操作员将改为 KubernetesPodOperator.await_container_completion,无论哪种方式,我们都必须等待容器完成才能收集 xcom。在(可选)从基本容器中提取 xcom 值后,我们 等待 Pod 完成 <~.PodManager.await_pod_completion>

以前,根据 Pod 是“重新附加到”(例如,在工作节点故障后)还是新创建的,等待逻辑可能发生在 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 工作节点故障后)已从 execute 中移出,移至方法 find_pod 中。

  • 方法 handle_pod_overlap 已删除。以前,它会监视“找到的”Pod 直到完成。通过此更改,Pod 监视(和日志跟踪)直接从 execute 协调,并且无论它是“找到的”Pod 还是“新的”Pod,都是相同的。请参阅方法 await_pod_startfollow_container_logsawait_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_startfollow_container_logsawait_container_completionawait_pod_completion 的调用。

在类 PodManager 中(以前为 PodLauncher

  • 方法 start_pod 已删除,并拆分为两个方法:create_podawait_pod_start

  • 方法 monitor_pod 已删除,并拆分为方法 follow_container_logsawait_container_completionawait_pod_completion

  • 方法 pod_not_startedpod_is_runningprocess_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,并且值不再是小写的。

  • 不再在 cncf.kubernetes.utils.pod_manager.PodManager.run_pod_async 中调用 airflow.settings.pod_mutation_hook。对于 KubernetesPodOperator,现在在 build_pod_request_obj 中进行突变。

  • 参数 is_delete_operator_pod 的默认值已更改为 True,以便在任务完成后删除 Pod,而不是让它们累积。实际上,似乎更常见的是仅在调试时临时禁用 Pod 删除,因此 Pod 删除是更合理的默认值。

特性

  • KubernetesHook 添加参数配置、in_cluster 和 cluster_context (#19695)

  • KubernetesPodOperator 实现 dry_run (#20573)

  • 澄清 K8s 提供程序中 build_pod_request_obj 的文档字符串 (#20574)

Bug 修复

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

2.2.0

特性

  • 在 KPO 中添加了命名空间作为模板字段。 (#19718)

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

错误修复

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

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

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

2.1.0

功能

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

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

2.0.3

错误修复

  • 修复不删除 pod 时的 KubernetesPodOperator 重新连接 (#18070)

  • 使 Kubernetes 作业描述适合单行日志 (#18377)

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

2.0.2

错误修复

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

  • 在提供程序管理器中单独延迟导入 Hooks (#17682)

2.0.1

功能

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

错误修复

  • 错误修复: template_field 中使用 'json' 字符串导致 K8s 运算符出现问题 (#16930)

2.0.0

重大更改

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

警告

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

功能

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

  • pod 名称保存到 xcom 中,用于 KubernetesPodOperator (#15755)

错误修复

  • 错误修复由于空的 Affinity K8S 对象而忽略 Pod-Template Affinity (#15787)

  • 错误 Pod 模板文件值被忽略 (#16095)

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

  • 修复 'is_delete_operator_pod=True' KubernetesPodOperator final_state 调用不成功的问题 (#15490)

1.2.0

功能

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

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

错误修复

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

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

1.1.0

功能

  • Kubernetes pod_launcher 与核心 airflow 分离 (#15165)

  • Spark 运算符添加指定 api 组和版本的能力 (#14898)

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

1.0.2

错误修复

  • 如果使用 pod_template,则允许在 KubernetesPodOperator 中覆盖 pod 名称。 (#14186)

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

1.0.1

更新了文档和自述文件。

错误修复

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

1.0.0

提供程序的初始版本。

此条目有帮助吗?