这篇文章已超过一年。较早的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已失效或不准确。

Kubernetes 1.24 的移除和弃用

随着 Kubernetes 的发展,特性和 API 会定期进行修改和移除。新特性可能提供解决现有问题的替代方法或改进方法,促使团队移除旧方法。

我们希望你了解 Kubernetes 1.24 版本即将带来的变化。此版本将弃用多个(beta)API,转而推荐使用相同 API 的稳定版本。Kubernetes 1.24 版本的主要变化是移除 Dockershim。这将在下文讨论,并在发布时进行更深入的探讨。要提前了解 Kubernetes 1.24 中即将发生的变化,请查看进行中的更新日志 (CHANGELOG)

关于 Dockershim 的说明

可以肯定地说,Kubernetes 1.24 版本发布时最受关注的移除项是 Dockershim。Dockershim 在 v1.20 中已被弃用。正如Kubernetes 1.20 更新日志中所述:“Kubelet 中对 Docker 的支持现已弃用,并将在未来的版本中移除。Kubelet 使用一个名为 'dockershim' 的模块,该模块实现了对 Docker 的 CRI 支持,并且在 Kubernetes 社区中出现了维护问题。” 随着即将发布的 Kubernetes 1.24 版本,Dockershim 最终将被移除。

在文章《别慌:Kubernetes 和 Docker》中,作者简洁地阐述了这一变化的影响,并鼓励用户保持冷静。

Docker 作为底层运行时正在被弃用,转而使用为 Kubernetes 创建的容器运行时接口 (CRI) 兼容的运行时。Docker 生成的镜像将继续在你的集群中与所有运行时一起工作,一如既往。

已经创建了一些指南,提供了关于从 dockershim 迁移到与 Kubernetes 直接兼容的容器运行时的有用信息。你可以在 Kubernetes 文档的从 dockershim 迁移页面找到它们。

要了解更多关于 Kubernetes 为什么弃用 dockershim 的信息,请查看这些标题贴切的文章:《Kubernetes 告别 Dockershim》《dockershim 移除常见问题解答(更新)》

阅读文章《你的集群为 v1.24 准备好了吗?》,了解如何确保你的集群在从 v1.23 升级到 v1.24 后仍能正常工作。

Kubernetes API 移除和弃用流程

Kubernetes 包含大量随时间演进的组件。在某些情况下,这种演进会导致 API、标志或整个特性被移除。为了防止用户面临破坏性变更,Kubernetes 贡献者采纳了特性弃用策略。该策略确保只有当同一 API 的新稳定版本可用时,稳定 API 才会被弃用;并且 API 具有以下稳定性级别所指示的最低生命周期:

  • GA(普遍可用)或稳定 API 版本可以被标记为已弃用,但在 Kubernetes 的主要版本中不得移除。
  • Beta 或预发布 API 版本在弃用后必须支持 3 个版本。
  • Alpha 或实验性 API 版本可以在任何版本中移除,无需事先发布弃用通知。

移除遵循相同的弃用策略,无论 API 是由于 Beta 特性进入稳定阶段而被移除,还是因为该 API 未被证明是成功的。Kubernetes 将继续确保在移除 API 时同步记录迁移选项。

已弃用 (Deprecated) API 是那些已被标记为将在未来 Kubernetes 版本中移除的 API。已移除 (Removed) API 是那些在弃用后,在当前支持的 Kubernetes 版本中不再可用的 API。这些被移除的 API 已被更新的、稳定/普遍可用 (GA) 的 API 取代。

Kubernetes 1.24 的 API 移除、弃用及其他变更

如何应对

Dockershim 移除

如前所述,有几篇关于从 dockershim 迁移的指南。你可以从查看你的节点上使用了哪些容器运行时开始。如果你的节点正在使用 dockershim,可能存在其他 Docker Engine 依赖项,例如 Pod 或第三方工具执行 Docker 命令,或者 Docker 配置文件中的私有仓库。你可以按照检查 Dockershim 移除是否会影响你的指南来检查可能的 Docker Engine 依赖项。在升级到 v1.24 之前,你可以决定继续使用 Docker Engine 并将使用 Docker Engine 的节点从 dockershim 迁移到 cri-dockerd,或者迁移到与 CRI 兼容的运行时。这是一篇关于在节点上将容器运行时从 Docker Engine 更改为 containerd 的指南。

kubectl convert

kubectl convertkubectl 的一个插件,可以帮助处理从已弃用 API 迁移的问题。该插件有助于在不同 API 版本之间转换清单,例如,从已弃用 API 版本转换为未弃用 API 版本。有关 API 迁移流程的更多通用信息,请参阅已弃用 API 迁移指南。按照安装 kubectl convert 插件文档下载并安装 kubectl-convert 二进制文件。

展望未来

今年晚些时候计划发布的 Kubernetes 1.25 和 1.26 版本将停止提供多个当前稳定 Kubernetes API 的 Beta 版本。v1.25 版本还将移除 PodSecurityPolicy,该功能在 Kubernetes 1.21 中已被弃用,且不会升级到稳定版。有关更多信息,请参阅《PodSecurityPolicy 弃用:过去、现在和未来》

官方计划在 Kubernetes 1.25 中移除的 API 列表如下:

  • Beta CronJob API (batch/v1beta1)
  • Beta EndpointSlice API (discovery.k8s.io/v1beta1)
  • Beta Event API (events.k8s.io/v1beta1)
  • Beta HorizontalPodAutoscaler API (autoscaling/v2beta1)
  • Beta PodDisruptionBudget API (policy/v1beta1)
  • Beta PodSecurityPolicy API (policy/v1beta1)
  • Beta RuntimeClass API (node.k8s.io/v1beta1)

官方计划在 Kubernetes 1.26 中移除的 API 列表如下:

  • Beta FlowSchema 和 PriorityLevelConfiguration API (flowcontrol.apiserver.k8s.io/v1beta1)
  • Beta HorizontalPodAutoscaler API (autoscaling/v2beta2)

想了解更多?

弃用信息在 Kubernetes 版本说明中公布。你可以在以下版本的发布说明中查看待定弃用通知:

有关废弃和移除过程的信息,请查阅官方 Kubernetes 废弃策略文档。