本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

Kubernetes 1.24 中的移除和弃用

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

我们希望确保您了解 Kubernetes 1.24 版本中即将发生的变化。该版本将**弃用**几个(beta)API,以支持相同 API 的稳定版本。Kubernetes 1.24 版本中即将发生的主要变化是移除 Dockershim。下文将对此进行讨论,并将在发布时进行更深入的探讨。要提前了解 Kubernetes 1.24 中即将发生的变化,请查看进行中的变更日志

关于 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 时记录迁移选项。

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

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

如何应对

Dockershim 移除

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

kubectl convert

kubectlkubectl convert 插件可以帮助解决迁移已弃用 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 弃用策略文档。