本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes 1.26 中的移除、弃用和重大变更
变更是 Kubernetes 生命周期中不可或缺的一部分:随着 Kubernetes 的发展和成熟,为了项目的健康,某些功能可能会被弃用、移除或被改进版本所取代。对于 Kubernetes v1.26,有几个计划中的变更:本文根据 v1.26 发布过程中期可用的信息,识别并描述了其中的一些变更。v1.26 的发布过程仍在进行中,可能会引入额外的变更。
Kubernetes API 移除和弃用流程
Kubernetes 项目对其功能有一份详细的弃用策略。该策略规定,只有在同一 API 的更新、稳定版本可用时,才能弃用稳定的 API,并且 API 在每个稳定性级别都有一个最短的生命周期。被弃用的 API 是指已被标记为将在未来 Kubernetes 版本中移除的 API;它将继续工作直到被移除(从弃用之日起至少一年),但使用时会显示警告信息。被移除的 API 在当前版本中不再可用,此时你必须迁移到使用替代的 API。
- 正式发布(GA)或稳定的 API 版本可能会被标记为已弃用,但不能在 Kubernetes 的一个大版本中移除。
- Beta 或预发布 API 版本在弃用后必须再支持 3 个版本。
- Alpha 或实验性 API 版本可能在任何版本中被移除,而无需事先通知。
无论一个 API 是因为功能从 beta 阶段毕业到稳定阶段而被移除,还是因为该 API 根本没有成功,所有的移除都遵循这个弃用策略。每当一个 API 被移除时,迁移选项都会在文档中进行说明。
关于移除 CRI v1alpha2
API 和 containerd 1.5 支持的说明
在采纳了容器运行时接口(CRI)并在 v1.24 版本中[移除了 dockershim]之后,CRI 成为 Kubernetes 与不同容器运行时交互的支持和文档化的方式。每个 kubelet 会与该节点上的容器运行时协商使用哪个版本的 CRI。
Kubernetes 项目推荐使用 CRI v1
版本;在 Kubernetes v1.25 中,kubelet 也可以协商使用 CRI v1alpha2
(该版本在增加对稳定 v1
接口支持的同时被弃用)。
Kubernetes v1.26 将不再支持 CRI v1alpha2
。这次移除将导致如果容器运行时不支持 CRI v1
,kubelet 将不会注册该节点。这意味着 containerd 的 1.5 及更早的次要版本将不被 Kubernetes 1.26 支持;如果你使用 containerd,你需要在将该节点升级到 Kubernetes v1.26 之前,升级到 containerd 1.6.0 或更高版本。其他只支持 v1alpha2
的容器运行时同样受到影响:如果这对你有影响,你应该联系容器运行时供应商寻求建议,或查看他们的网站以获取有关如何继续操作的额外说明。
如果你想利用 v1.26 的功能但仍使用旧的容器运行时,你可以运行一个旧版本的 kubelet。支持的版本偏差允许你运行 v1.25 版本的 kubelet,它仍然与 v1alpha2
CRI 支持兼容,即使你将控制平面升级到 Kubernetes 的 1.26 次要版本。
除了容器运行时本身,还有一些工具,如 stargz-snapshotter,它们在 kubelet 和容器运行时之间充当代理,这些工具也可能受到影响。
Kubernetes v1.26 中的弃用和移除
除了以上内容,Kubernetes v1.26 计划包括几个额外的移除和弃用。
移除 v1beta1
flow control API 组
FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1
API 版本在 v1.26 中将不再提供。用户应将清单和 API 客户端迁移到使用 flowcontrol.apiserver.k8s.io/v1beta2
API 版本,该版本自 v1.23 起可用。
移除 v2beta2
HorizontalPodAutoscaler API
HorizontalPodAutoscaler 的 autoscaling/v2beta2
API 版本在 v1.26 中将不再提供。用户应将清单和 API 客户端迁移到使用 autoscaling/v2
API 版本,该版本自 v1.23 起可用。
移除树内凭据管理代码
在这个即将发布的版本中,作为 Kubernetes 一部分的旧有供应商特定的认证代码将被从 client-go
和 kubectl
中移除。现有机制支持两个特定云提供商的认证:Azure 和 Google Cloud。取而代之的是,Kubernetes 已经提供了一个供应商中立的认证插件机制——你可以在 v1.26 发布之前立即切换。如果你受到影响,可以找到关于如何为 Azure 和 Google Cloud 操作的额外指导。
移除 kube-proxy
userspace 模式
userspace
代理模式已被弃用超过一年,在 Linux 和 Windows 上均不再支持,并将在此版本中被移除。用户在 Linux 上应使用 iptables
或 ipvs
,在 Windows 上应使用 kernelspace
:现在使用 --mode userspace
将会导致失败。
移除树内 OpenStack 云提供商
Kubernetes 正在从使用树内代码进行存储集成转向使用容器存储接口(CSI)。作为这一转变的一部分,Kubernetes v1.26 将移除已弃用的 OpenStack 的树内存储集成(cinder
卷类型)。你应该迁移到使用来自 https://github.com/kubernetes/cloud-provider-openstack 的外部云提供商和 CSI 驱动。更多信息,请访问Cinder in-tree to CSI driver migration。
移除 GlusterFS 树内驱动
树内 GlusterFS 驱动在 v1.25 中被弃用,并将从 Kubernetes v1.26 中移除。
弃用非包容性 kubectl
标志
作为包容性命名倡议实施工作的一部分,--prune-whitelist
标志将被弃用,并被 --prune-allowlist
所取代。强烈建议使用此标志的用户在未来版本中最终移除该标志之前进行必要的更改。
移除动态 kubelet 配置
动态 kubelet 配置允许通过 Kubernetes API 推出新的 kubelet 配置,甚至在运行中的集群中也可以。集群操作员可以通过指定一个包含 kubelet 应使用的配置数据的 ConfigMap 来重新配置节点上的 kubelet。动态 kubelet 配置已在 v1.24 中从 kubelet 中移除,并将在 v1.26 版本中从 API 服务器中移除。
弃用 kube-apiserver
命令行参数
kube-apiserver 的 --master-service-namespace
命令行参数没有任何效果,并且已经被非正式地弃用。该命令行参数将在 v1.26 中被正式标记为弃用,为在未来版本中移除做准备。Kubernetes 项目预计此次弃用和移除不会产生任何影响。
弃用 kubectl run
命令行参数
kubectl run
子命令的几个未使用的选项参数将被标记为弃用,包括
--cascade
--filename
--force
--grace-period
--kustomize
--recursive
--timeout
--wait
这些参数已经被忽略,因此预计不会有任何影响:明确的弃用会设置一条警告信息,并为在未来版本中移除这些参数做准备。
移除与日志记录相关的旧命令行参数
Kubernetes v1.26 将移除一些与日志记录相关的命令行参数。这些命令行参数已经被弃用。更多信息,请参阅弃用 Kubernetes 组件中 klog 特定的标志。
展望未来
计划在 Kubernetes 1.27 中移除的API 的官方列表包括:
- CSIStorageCapacity API 的所有 beta 版本;特别是:
storage.k8s.io/v1beta1
想了解更多吗?
弃用信息会在 Kubernetes 发行说明中公布。你可以在以下版本的发行说明中看到待弃用功能的公告:
我们将正式宣布Kubernetes 1.26带来的弃用,作为该版本变更日志的一部分。