本文发表已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

Kubernetes 1.26 中的移除、弃用和重大变更

变更 是 Kubernetes 生命周期中不可或缺的一部分:随着 Kubernetes 的发展和成熟,为了项目的健康,某些功能可能会被弃用、移除或被改进所取代。对于 Kubernetes v1.26,计划进行多项更改:本文根据 v1.26 版本发布过程中间点(仍在进行中,并且可能会引入其他更改)的可用信息,识别并描述了其中的一些更改。

Kubernetes API 移除和弃用过程

Kubernetes 项目对于功能有一个有据可查的弃用政策。该政策规定,只有在有更新的、稳定的同一 API 版本可用时,才能弃用稳定的 API,并且 API 在每个稳定级别都有最短的生命周期。弃用的 API 是指在未来的 Kubernetes 版本中已被标记为要移除的 API;它将继续运行直到移除(至少从弃用开始一年),但使用将导致显示警告。移除的 API 在当前版本中不再可用,此时您必须迁移到使用替代方案。

  • 通用可用 (GA) 或稳定的 API 版本可能会被标记为已弃用,但不允许在 Kubernetes 的主要版本中移除。
  • Beta 或预发布 API 版本在弃用后必须支持 3 个版本。
  • Alpha 或实验性 API 版本可以在任何版本中移除,无需事先通知弃用。

无论 API 是因为功能从 beta 升级到 stable 而移除,还是因为该 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 不注册该节点。这意味着 Kubernetes 1.26 将不支持 containerd 次版本 1.5 及更早版本;如果您使用 containerd,您需要将该节点升级到 Kubernetes v1.26 之前升级到 containerd 版本 1.6.0 或更高版本。其他仅支持 v1alpha2 的容器运行时也会受到同样的影响:如果这影响到您,您应该联系容器运行时供应商寻求建议或查看他们的网站,了解有关如何前进的其他说明。

如果您想从 v1.26 功能中受益,并且仍然使用较旧的容器运行时,您可以运行较旧的 kubelet。kubelet 的支持偏差允许您运行 v1.25 kubelet,即使您将控制平面升级到 Kubernetes 的 1.26 次要版本,它仍然与 v1alpha2 CRI 支持兼容。

除了容器运行时本身之外,还有像 stargz-snapshotter 这样的工具,它们充当 kubelet 和容器运行时之间的代理,这些工具也可能受到影响。

Kubernetes v1.26 中的弃用和移除

除了以上内容外,Kubernetes v1.26 还计划包含其他几项移除和弃用。

移除 v1beta1 流控制 API 组

FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1 API 版本在 v1.26 中将不再提供。用户应该迁移清单和 API 客户端以使用自 v1.23 起可用的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本。

移除 v2beta2 HorizontalPodAutoscaler API

HorizontalPodAutoscaler 的 autoscaling/v2beta2 API 版本在 v1.26 中将不再提供。用户应该迁移清单和 API 客户端以使用自 v1.23 起可用的 autoscaling/v2 API 版本。

移除树内凭据管理代码

在即将发布的版本中,属于 Kubernetes 的旧版特定于供应商的身份验证代码将从 client-gokubectl移除。现有机制支持两个特定云提供商的身份验证:Azure 和 Google Cloud。作为替代,Kubernetes 已经提供了一个供应商中立的身份验证插件机制 - 您可以在 v1.26 版本发布之前立即切换。如果您受到影响,您可以找到有关如何继续执行的 AzureGoogle Cloud 的其他指导。

移除 kube-proxy 用户空间模式

已弃用一年多的 userspace 代理模式不再支持 Linux 或 Windows,并将在本版本中移除。用户应该在 Linux 上使用 iptablesipvs,或者在 Windows 上使用 kernelspace:现在使用 --mode userspace 将会失败。

移除树内 OpenStack 云提供商

Kubernetes 正在从用于存储集成的树内代码切换到使用容器存储接口(CSI)。作为其中的一部分,Kubernetes v1.26 将移除已弃用的 OpenStack 树内存储集成(cinder 卷类型)。您应该改为从 https://github.com/kubernetes/cloud-provider-openstack 迁移到外部云提供商和 CSI 驱动程序。有关更多信息,请访问 Cinder 从树内到 CSI 驱动程序迁移

移除 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 随附的弃用,作为该版本的 CHANGELOG 的一部分。