变化是 Kubernetes 永恒的主题,如今的 Kubernetes 日趋成熟。为了 Kubernetes 项目的健康发展,原有的某些功能特性可能会被弃用、移除或替换为优化过的功能特性。
12 月 9 日,官方博客正式宣布 Kubernetes v1.26 发布,本文将详解说明 v1.26 的一些特性移除、弃用和主要变更。
01
API 移除 和弃用流程
Kubernetes 项目对功能特性有一个[文档完备的弃用策略] 。该策略规定,只有当较新的、稳定的相同 API 可用时,原有的稳定 API 才可能被弃用,每个稳定级别的 API 都有一个最短的生命周期。弃用的 API 指的是已标记为将在后续发行某个 Kubernetes 版本时移除的 API;移除之前该 API 将继续发挥作用(从弃用起至少一年时间),但使用时会显示一条警告。移除的 API 将在当前版本中不再可用,此时你必须迁移以使用替换的 API。
[文档完备的弃用策略]:/zh-cn/docs/reference/using-api/deprecation-policy/
- 正式发布(GA)或稳定的 API 版本可能被标记为已弃用,但只有在 Kubernetes 大版本更新时才会移除。
- 测试版(Beta)或预发布 API 版本在弃用后必须支持 3 个版本。
- Alpha 或实验性 API 版本可能会在任何版本中被移除,恕不另行通知。
无论一个 API 是因为某功能特性从 Beta 进入稳定阶段而被移除,还是因为该 API 根本没有成功,所有移除均遵从上述弃用策略。无论何时移除一个 API,文档中都会列出迁移选项。
02
**CRI v1alpha2 API 移除说明 **
在 v1.24 中采用[容器运行时接口] (CRI) 并[移除 dockershim] 之后,CRI 是 Kubernetes 与不同容器运行时交互所支持和记录的方式。每个 kubelet 协商使用哪个版本的 CRI 来配合该节点上的容器运行时。
[容器运行时接口]:/zh-cn/docs/concepts/architecture/cri/
Kubernetes 项目推荐使用 CRI v1 版本;在Kubernetes v1.25 中,kubelet 也可以协商使用 CRI v1alpha2(在添加相对稳定的 v1 接口的支持同时此项被弃用)。
Kubernetes v1.26 将不支持 CRI v1alpha2。 如果容器运行时不支持 CRI v1,则本次[移除]将导致 kubelet 不注册节点。
这意味着 Kubernetes 1.26 将不支持 containerd 1.5 小版本及更早的版本; 如果你使用containerd,则需要升级到 containerd v1.6.0 或更高版本,然后才能将该节点升级到 Kubernetes v1.26。其他仅支持 v1alpha2 的容器运行时同样受到影响。如果此项移除影响到你,你应该联系容器运行时供应商,寻求建议或查阅他们的网站,以获取有关如何继续使用的更多说明。
如果你既想从 v1.26 特性中获益又想保持使用较旧的容器运行时,你可以运行较旧的 kubelet。Kubelet [支持的版本偏差]允许你运行 v1.25 的 kubelet,即使你将控制平面升级到了 Kubernetes 1.26 的某个次要版本,kubelet 仍然能兼容 v1alpha2 CRI。
[支持的版本偏差]:/zh-cn/releases/version-skew-policy/#kubelet
除了容器运行时本身,还有像[stargz-snapshotter]这样的工具充当 kubelet 和容器运行时之间的代理,这些工具也可能会受到影响。
[stargz-snapshotter]:github.com/containerd/…
03
其他弃用 和移除
除了上述移除外,Kubernetes v1.26 还准备包含更多移除和弃用。
3.1. 移除 v1beta1 流量控制 API 组
FlowSchema 和 PriorityLevelConfiguration 的flowcontrol.apiserver.k8s.io/v1beta1 API 版本[将不再在 v1.26 中提供]。用户应迁移清单和 API 客户端才能使用自 v1.23 起可用的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本。
[将不再在 v1.26 中提供]:/zh-cn/docs/reference/using-api/deprecation-guide/#flowcontrol-resources-v126
3.2. 移除 v2beta2 HorizontalPodAutoscaler API
HorizontalPodAutoscaler 的 autoscaling/v2beta2 API 版本[将不再在 v1.26 中提供]。用户应迁移清单和 API 客户端以使用自 v1.23 起可用的 autoscaling/v2 API 版本。
[将不再在 v1.26 中提供]:/zh-cn/docs/reference/using-api/deprecation-guide/#horizontalpodautoscaler-v126
3.3. 移除树内凭证管理代码
在即将发布的版本中,原来作为 Kubernetes 一部分的供应商特定的身份验证代码将从 client-go 和 kubectl 中[移除]。现有机制支持对两个特定云供应商进行身份验证:Azure 和谷歌云。作为替代方案,Kubernetes 在发布 v1.26 之前已提供了供应商中立的[身份验证插件机制],你现在就可以切换身份验证机制。如果你受到影响,你可以查阅有关如何继续使用 [Azure]和 [Google Cloud] 的更多指导信息。
[身份验证插件机制]:/zh-cn/docs/reference/access-authn-authz/authentication/#client-go-credential-plugins
[Azure]:github.com/Azure/kubel…
[Google Cloud]:cloud.google.com/blog/produc…
3.4. 移除 kube-proxy userspace 模式
已弃用一年多的 userspace 代理模式[不再受 Linux 或 Windows 支持],并将在 v1.26 中被移除。Linux 用户应使用 iptables 或 ipvs,Windows 用户应使用 kernelspace:现在使用 --mode userspace 会失败。
[不再受 Linux 或 Windows 支持]:github.com/kubernetes/…
3.5. 移除树内 OpenStack 云驱动
Kubernetes 正在从用于存储集成的树内代码转向使用容器存储接口 (CSI)。作为这个转变的一部分,Kubernetes v1.26 将移除已弃用的OpenStack 树内存储集成(cinder 卷类型)。你应该改为从 github.com/kubernetes/… 迁移到外部云驱动和 CSI 驱动。有关详细信息,请访问 [Cinder in-tree to CSI driver migration]。
[Cinder in-tree to CSI driver migration]:github.com/kubernetes/…
3.6. 移除 GlusterFS 树内驱动
树内 GlusterFS 驱动在 [v1.25 中被弃用],且从 Kubernetes v1.26 起将被移除。
[v1.25 中被弃用]:/zh-cn/blog/2022/08/23/kubernetes-v1-25-release/#deprecations-and-removals
3.7. 弃用非包容性的 kubectl 标志
作为[包容性命名倡议(Inclusive Naming Initiative)]的实现工作的一部分,--prune-whitelist 标志将被[弃用],并替换为 --prune-allowlist。强烈建议使用此标志的用户在未来某个版本中最终移除该标志之前进行必要的更改。
[包容性命名倡议(Inclusive Naming Initiative)]:www.cncf.io/announcemen… more-inclusive-future/
3.8. 移除动态 kubelet 配置
动态 kubelet 配置允许[通过 Kubernetes API 推出新的 kubelet 配置],甚至能用于活跃的集群中。集群操作员可以通过指定包含 kubelet 应使用的配置数据的 ConfigMap 来重新配置节点上的 kubelet。动态 kubelet 配置已在 v1.24 中从 kubelet 中移除,并将在 v1.26 版本中[从 API 服务器中移除]。
[通过 Kubernetes API 推出新的 kubelet 配置]:github.com/kubernetes/…
[从 API 服务器中移除]:github.com/kubernetes/…
3.9. 弃用 kube-apiserver 命令行参数
--master-service-namespace 命令行参数对 kube-apiserver 没有任何效果,并且已经被非正式地[被弃用]。
该命令行参数将在 v1.26 中正式标记为弃用,准备在未来某个版本中移除。Kubernetes 项目预期不会因此项弃用和移除受到任何影响。
[被弃用]:github.com/kubernetes/…
3.10. 弃用 kubectl run 命令行参数
针对 kubectl run 子命令若干未使用的选项参数将[被标记为弃用],包括:
- --cascade
- --filename
- --force
- --grace-period
- --kustomize
- --recursive
- --timeout
- --wait
[被标记为弃用]:github.com/kubernetes/…
这些参数已被忽略,因此预计不会产生任何影响:显式弃用会设置一条警告消息并准备在未来的某个版本中移除这些参数。
3.11. 移除与日志相关的原有命令行参数
Kubernetes v1.26 [移除了]一些与日志相关的命令行参数。这些命令行参数已被弃用。有关详细信息,请参阅[弃用 Kubernetes 组件中的 klog 特定标志]。
[移除了]:github.com/kubernetes/… Kubernetes 组件中的 klog 特定标志]:github.com/kubernetes/…
04
展望未来
Kubernetes 1.27 计划[移除的 API 官方列表]包括所有 Beta 版的CSIStorageCapacity API;特别是 storage.k8s.io/v1beta1。
[移除的 API 官方列表]:/zh-cn/docs/reference/using-api/deprecation-guide/#v1-27
Kubernetes 发行说明会宣告具体的弃用信息。你可以在以下版本的发行说明中看到待弃用的公告:
在 [Kubernetes 1.26] CHANGELOG 中正式宣布了该版本的弃用信息。
[Kubernetes 1.26]:github.com/kubernetes/…
英文 blog:
****kubernetes.io/blog/2022/1…
本文译者
要海峰
现任「DaoCloud 道客」高级文档工程师
K8s reviewer,Istio maintainer,otel 等 member