本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
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 移除、弃用和其他变更
- 动态 kubelet 配置:
DynamicKubeletConfig
用于启用 kubelet 的动态配置。DynamicKubeletConfig
标志在 Kubernetes 1.22 中被弃用。在 v1.24 中,此特性门控将从 kubelet 中移除。有关更多信息,请参阅“动态 kubelet 配置被移除” KEP。 - 动态日志清理:实验性的动态日志清理功能已被弃用,并将在 v1.24 中移除。该功能引入了一个日志过滤器,可以应用于所有 Kubernetes 系统组件的日志,以防止各种类型的敏感信息通过日志泄露。有关更多信息和替代方法,请参阅KEP-1753:Kubernetes 系统组件日志清理。
- 从 kubelet 中移除 Dockershim:Docker 的容器运行时接口(CRI)(即 Dockershim)目前是 kubelet 代码库中的一个内置容器运行时。它在 v1.20 中被弃用。从 v1.24 开始,kubelet 将不再包含 dockershim。请查看这篇关于为 v1.24 做好准备需要做什么的博客文章。
- 用于 Pod 调度的存储容量跟踪:CSIStorageCapacity API 支持通过 CSIStorageCapacity 对象暴露当前可用的存储容量,并增强了使用延迟绑定的 CSI 卷的 Pod 的调度。在 v1.24 中,CSIStorageCapacity API 将达到稳定。该 API 升级为稳定版将启动 v1beta1 CSIStorageCapacity API 的弃用过程。有关更多信息,请参阅用于 Pod 调度的存储容量约束 KEP。
master
标签不再出现在 kubeadm 控制平面节点上。对于新集群,标签 'node-role.kubernetes.io/master' 将不再添加到控制平面节点,只会添加标签 'node-role.kubernetes.io/control-plane'。有关更多信息,请参阅 KEP-2067:重命名 kubeadm 的 "master" 标签和污点。- VolumeSnapshot v1beta1 CRD 将被移除。用于 Kubernetes 和容器存储接口 (CSI) 的卷快照和恢复功能在 v1.20 中进入 GA 阶段,该功能提供了标准化的 API 设计(CRD)并为 CSI 卷驱动程序添加了 PV 快照/恢复支持。VolumeSnapshot v1beta1 在 v1.20 中被弃用,并将在 v1.24 版本中变得不受支持。有关更多信息,请参阅 KEP-177:CSI 快照和卷快照 GA 博客文章。
如何应对
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
kubectl
的 kubectl 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 1.21
- Kubernetes 1.22
- Kubernetes 1.23
- 我们将作为 Kubernetes 1.24 该版本的变更日志的一部分,正式宣布随之而来的弃用。
有关弃用和移除过程的信息,请查看官方的 Kubernetes 弃用策略文档。