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

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

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

Kubernetes API 移除和废弃流程

Kubernetes 项目针对功能的废弃策略有详细文档。该策略规定,稳定的 API 只有在新的稳定版本可用时才可废弃,并且 API 在每个稳定性级别都有最短生命周期。废弃的 API 是指已标记为在未来的 Kubernetes 版本中移除的 API;它将继续运行直到移除(至少自废弃之日起一年),但使用时会显示警告。移除的 API 在当前版本中不再可用,此时您必须迁移到使用替代版本。

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

无论是由于功能从 Beta 升级到稳定而移除 API,还是因为该 API 未能成功,所有移除都遵守此废弃策略。每当 API 被移除时,文档中都会说明迁移选项。

关于移除 CRI v1alpha2 API 和 containerd 1.5 支持的说明

在 v1.24 中采用容器运行时接口 (CRI) 并[移除 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。kubelet 的支持版本偏差允许您运行一个 v1.25 的 kubelet,即使您将控制平面升级到 Kubernetes 的 1.26 次要版本,v1.25 的 kubelet 仍然与 v1alpha2 CRI 支持兼容。

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

Kubernetes v1.26 中的废弃和移除

除了上述内容,Kubernetes v1.26 计划包含其他几项移除和废弃。

移除 v1beta1 流量控制 API 组

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

移除 v2beta2 HorizontalPodAutoscaler API

HorizontalPodAutoscaler 的 autoscaling/v2beta2 API 版本在 v1.26 中将不再提供。用户应将 manifest 和 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 卷类型)。您应该迁移到外部云提供商和 CSI 驱动程序,这些可以在 https://github.com/kubernetes/cloud-provider-openstack 找到。更多信息,请访问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 中正式宣布随该版本发布的废弃信息。