这篇文章已超过一年。较早的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已失效或不准确。
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 移除、弃用及其他变更
- 动态 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)(提供标准化的 API 设计 (CRD) 并为 CSI 卷驱动程序添加 PV 快照/恢复支持)在 v1.20 中进入 GA 阶段。VolumeSnapshot v1beta1 在 v1.20 中被弃用,并将在 v1.24 版本中停止支持。有关更多信息,请参阅KEP-177:CSI 快照和卷快照 GA 博客文章。
如何应对
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 convert
是 kubectl
的一个插件,可以帮助处理从已弃用 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
- 我们将作为该版本的 CHANGELOG 的一部分,正式宣布 Kubernetes 1.24 版本带来的废弃内容。
有关废弃和移除过程的信息,请查阅官方 Kubernetes 废弃策略文档。