这篇文章已经一年多了,较旧的文章可能包含过时的内容。请检查从发表以来,页面中的信息是否变得不正确。
Kubernetes 1.24 中的移除和弃用
作者:Mickey Boxell (Oracle)
随着 Kubernetes 的发展,一些特性和 API 会被定期重检和移除。 新特性可能会提供替代或改进的方法,来解决现有的问题,从而激励团队移除旧的方法。
我们希望确保你了解 Kubernetes 1.24 版本的变化。该版本将 弃用 一些(测试版/beta)API, 转而支持相同 API 的稳定版本。Kubernetes 1.24 版本的主要变化是移除 Dockershim。 这将在下面讨论,并将在发布时更深入地探讨。 要提前了解 Kubernetes 1.24 中的更改,请查看正在更新中的 CHANGELOG。
关于 Dockershim
可以肯定地说,随着 Kubernetes 1.24 的发布,最受关注的是移除 Dockershim。 Dockershim 在 1.20 版本中已被弃用。如 Kubernetes 1.20 变更日志中所述: "Docker support in the kubelet is now deprecated and will be removed in a future release. The kubelet uses a module called "dockershim" which implements CRI support for Docker and it has seen maintenance issues in the Kubernetes community." 随着即将发布的 Kubernetes 1.24,Dockershim 将最终被移除。
在文章别慌: Kubernetes 和 Docker 中, 作者简洁地记述了变化的影响,并鼓励用户保持冷静:
弃用 Docker 这个底层运行时,转而支持符合为 Kubernetes 创建的容器运行接口 Container Runtime Interface (CRI) 的运行时。 Docker 构建的镜像,将在你的集群的所有运行时中继续工作,一如既往。
已经有一些文档指南,提供了关于从 dockershim 迁移到与 Kubernetes 直接兼容的容器运行时的有用信息。 你可以在 Kubernetes 文档中的从 dockershim 迁移 页面上找到它们。
有关 Kubernetes 为何不再使用 dockershim 的更多信息, 请参见:Kubernetes 即将移除 Dockershim 和最新的弃用 Dockershim 的常见问题。
查看你的集群准备好使用 v1.24 版本了吗?一文, 了解如何确保你的集群在从 1.23 版本升级到 1.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。 这些移除的 API 已被更新的、稳定的/普遍可用的 (GA) API 所取代。
Kubernetes 1.24 的 API 移除、弃用和其他更改
- 动态 kubelet 配置:
DynamicKubeletConfig
用于启用 kubelet 的动态配置。Kubernetes 1.22 中弃用DynamicKubeletConfig
标志。 在 1.24 版本中,此特性门控将从 kubelet 中移除。 更多详细信息,请参阅“移除动态 kubelet 配置” 的 KEP。
- 动态日志清洗:实验性的动态日志清洗功能已被弃用, 将在 1.24 版本中被移除。该功能引入了一个日志过滤器,可以应用于所有 Kubernetes 系统组件的日志, 以防止各种类型的敏感信息通过日志泄漏。有关更多信息和替代方法,请参阅 KEP-1753: Kubernetes 系统组件日志清洗。
- 从 kubelet 中移除 Dockershim:Docker 的容器运行时接口(CRI)(即 Dockershim)目前是 kubelet 代码中内置的容器运行时。它在 1.20 版本中已被弃用。 从 1.24 版本开始,kubelet 已经移除 dockershim。查看这篇博客, 了解你需要为 1.24 版本做些什么。
- Pod 调度的存储容量追踪:CSIStorageCapacity API 支持通过 CSIStorageCapacity 对象暴露当前可用的存储容量,并增强了使用带有延迟绑定的 CSI 卷的 Pod 的调度。 CSIStorageCapacity API 自 1.24 版本起提供稳定版本。升级到稳定版的 API 将弃用 v1beta1 CSIStorageCapacity API。 更多信息请参见 Pod 调度存储容量约束 KEP。
- kubeadm 控制面节点上不再存在
master
标签。 对于新集群,控制平面节点将不再添加 'node-role.kubernetes.io/master' 标签, 只会添加 'node-role.kubernetes.io/control-plane' 标签。更多信息请参考 KEP-2067:重命名 kubeadm “master” 标签和污点。
- VolumeSnapshot v1beta1 CRD 在 1.24 版本中将被移除。 Kubernetes 和 Container Storage Interface (CSI) 的卷快照和恢复功能,在 1.20 版本中进入测试版。该功能提供标准化 API 设计 (CRD ) 并为 CSI 卷驱动程序添加了 PV 快照/恢复支持, VolumeSnapshot v1beta1 在 1.21 版本中已被弃用,现在不受支持。更多信息请参考 KEP-177:CSI 快照和 kubernetes-csi/external-snapshotter。
需要做什么
移除 Dockershim
如前所述,有一些关于从 dockershim 迁移的指南。 你可以从查明节点上所使用的容器运行时开始。 如果你的节点使用 dockershim,则还有其他可能的 Docker Engine 依赖项, 例如 Pod 或执行 Docker 命令的第三方工具或 Docker 配置文件中的私有镜像库。 你可以按照检查移除 Dockershim 是否对你有影响 的指南来查看可能的 Docker 引擎依赖项。在升级到 1.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 版本,这些 API 当前为稳定版。1.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 的弃用信息, 作为该版本 CHANGELOG 的一部分。
有关弃用和移除过程的信息,请查看 Kubernetes 官方弃用策略文档。