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

Kubernetes v1.27 中的移除和重大变更

随着 Kubernetes 的发展和成熟,为了项目的整体健康,某些功能可能会被废弃、移除或替换为更好的功能。基于 v1.27 版本发布过程中目前可获得的信息(发布过程仍在进行中,可能会引入额外变更),本文将介绍和描述 Kubernetes v1.27 版本的一些计划变更。

关于 k8s.gcr.io 重定向到 registry.k8s.io 的说明

为了托管其容器镜像,Kubernetes 项目使用了一个社区拥有的镜像仓库,名为 registry.k8s.io。从 3 月 20 日起,来自过时的 k8s.gcr.io 仓库的所有流量都将重定向到 registry.k8s.io。已废弃的 k8s.gcr.io 仓库最终将被淘汰。

这项变更意味着什么?

  • 如果您是子项目维护者,必须更新您的 manifests 和 Helm charts 以使用新的仓库。

  • v1.27 Kubernetes 版本将不会发布到旧仓库。

  • 从 4 月起,v1.24、v1.25 和 v1.26 的补丁版本将不再发布到旧仓库。

我们有一篇博文,其中包含了关于此变更的所有信息以及如果它影响到您应该如何处理。

Kubernetes API 移除和废弃流程

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

  • 通用可用 (GA) 或稳定的 API 版本可以被标记为废弃,但在 Kubernetes 的一个主版本内不得被移除。

  • Beta 或预发布 API 版本在废弃后必须支持 3 个版本。

  • Alpha 或实验性 API 版本可以在任何版本中移除,无需事先通知。

无论是 API 因功能从 Beta 晋升到稳定而移除,还是因为该 API 未成功而被移除,所有移除都符合此废弃策略。无论何时移除 API,迁移选项都会在文档中说明。

Kubernetes v1.27 的 API 移除及其他变更

CSIStorageCapacity 中移除 storage.k8s.io/v1beta1

CSIStorageCapacity API 支持通过 CSIStorageCapacity 对象暴露当前可用存储容量,并增强使用 CSI 卷的 Pod 的调度(支持延迟绑定)。CSIStorageCapacity 的 storage.k8s.io/v1beta1 API 版本在 v1.24 中已废弃,在 v1.27 中将不再提供服务。

将 manifests 和 API 客户端迁移到使用自 v1.24 起可用的 storage.k8s.io/v1 API 版本。所有现有的持久化对象都可以通过新的 API 访问。

有关更多信息,请参考用于 Pod 调度的存储容量限制 KEP

Kubernetes v1.27 不会移除其他任何 API;但是,将移除其他一些方面的内容。请继续阅读了解详情。

支持已废弃的 seccomp 注解

在 Kubernetes v1.19 中,seccomp(安全计算模式)支持晋升为通用可用 (GA)。此功能可用于通过限制 Pod(适用于所有容器)或单个容器的系统调用来增强工作负载安全性。

对 Alpha 阶段的 seccomp 注解 seccomp.security.alpha.kubernetes.io/podcontainer.seccomp.security.alpha.kubernetes.io 的支持自 v1.19 起已废弃,现在已被完全移除。当创建带有 seccomp 注解的 Pod 时,seccomp 字段将不再自动填充。Pod 应改为使用相应的 Pod 或容器的 securityContext.seccompProfile 字段。

移除多个用于卷扩容的 Feature Gate

用于卷扩容 GA 功能的以下 Feature Gate 将被移除,不再需要在 --feature-gates 标志中引用

ExpandCSIVolumes (扩容 CSI 卷)
启用 CSI 卷的扩容。
ExpandInUsePersistentVolumes (扩容使用中的持久卷)
启用使用中的 PVC 的扩容。
ExpandPersistentVolumes (扩容持久卷)
启用持久卷的扩容。

移除 --master-service-namespace 命令行参数

kube-apiserver 接受一个已废弃的命令行参数 --master-service-namespace,该参数指定在哪里创建名为 kubernetes 的 Service 来代表 API 服务器。Kubernetes v1.27 将移除此参数,该参数自 v1.26 版本起已废弃。

移除 ControllerManagerLeaderMigration Feature Gate

Leader 迁移提供了一种机制,在高可用集群中,可以在升级复制的控制平面时,通过 kube-controller-managercloud-controller-manager 之间的共享资源锁,安全地迁移“云特定”控制器。

ControllerManagerLeaderMigration 功能自 v1.24 起已通用可用 (GA),且已无条件启用。在 v1.27 版本中,此 Feature Gate 选项将被移除。如果您明确设置了此 Feature Gate,则需要从命令行参数或配置文件中将其移除。

移除 --enable-taint-manager 命令行参数

kube-controller-manager 命令行参数 --enable-taint-manager 已废弃,并将在 Kubernetes v1.27 中移除。它支持的功能,即基于污点的驱逐,已经默认启用,并且在该标志移除后将继续隐式启用。

移除 --pod-eviction-timeout 命令行参数

已废弃的命令行参数 --pod-eviction-timeout 将从 kube-controller-manager 中移除。

移除 CSI Migration Feature Gate

CSI 迁移计划允许从 in-tree 卷插件迁移到 out-of-tree CSI 驱动。CSI 迁移自 Kubernetes v1.16 起已通用可用,相关的 CSIMigration Feature Gate 将在 v1.27 中移除。

移除 CSIInlineVolume Feature Gate

CSI 临时卷功能允许在 Pod 规格中直接指定 CSI 卷,用于临时使用场景。它们可用于通过挂载的卷将任意状态(例如配置、secrets、身份、变量或类似信息)直接注入到 Pod 内部。此功能在 v1.25 中晋升为通用可用 (GA)。因此,CSIInlineVolume Feature Gate 将在 v1.27 版本中移除。

移除 EphemeralContainers Feature Gate

临时容器在 v1.25 中晋升为通用可用 (GA)。这些是具有临时生命周期、在现有 Pod 的命名空间内执行的容器。临时容器通常由用户启动,用于观察其他 Pod 和容器的状态,以进行故障排除和调试。在 Kubernetes v1.27 中,对临时容器的 API 支持已无条件启用;EphemeralContainers Feature Gate 将被移除。

移除 LocalStorageCapacityIsolation Feature Gate

本地临时存储容量隔离功能在 v1.25 中达到通用可用 (GA)。此功能支持在 Pod 之间进行本地临时存储(例如 emptyDir 卷)的容量隔离,以便可以对 Pod 消耗共享资源进行硬性限制。如果本地临时存储的消耗超出配置的限制,kubelet 将驱逐 Pod。Feature Gate LocalStorageCapacityIsolation 将在 v1.27 版本中移除。

移除 NetworkPolicyEndPort Feature Gate

Kubernetes v1.25 版本将 NetworkPolicy 中的 endPort 晋升为通用可用 (GA)。支持 endPort 字段的网络策略提供商可以使用该字段指定应用 NetworkPolicy 的端口范围。此前,每个 NetworkPolicy 只能针对一个端口。因此,NetworkPolicyEndPort Feature Gate 将在此版本中移除。

请注意,endPort 字段必须由网络策略提供商支持。如果您的提供商不支持 endPort,并且在 Network Policy 中指定了此字段,则创建的网络策略将仅覆盖 port 字段(单个端口)。

移除 StatefulSetMinReadySeconds Feature Gate

对于 StatefulSet 的一部分 Pod,Kubernetes 只有在 Pod 可用(并通过检查)至少达到您在minReadySeconds 中指定的时长后,才会将 Pod 标记为 Ready。此功能在 Kubernetes v1.25 中达到了通用可用,并且 StatefulSetMinReadySeconds Feature Gate 将被锁定为 true 并在 v1.27 版本中移除。

移除 IdentifyPodOS Feature Gate

您可以为 Pod 指定操作系统,此功能的支持自 v1.25 版本起已稳定。IdentifyPodOS Feature Gate 将在 Kubernetes v1.27 中移除。

移除 DaemonSetUpdateSurge Feature Gate

Kubernetes v1.25 版本还稳定了对 DaemonSet Pod 的 surge 支持,这是为了在 rollout 期间最小化 DaemonSet 的停机时间而实现的。DaemonSetUpdateSurge Feature Gate 将在 Kubernetes v1.27 中移除。

移除 --container-runtime 命令行参数

kubelet 接受一个已废弃的命令行参数 --container-runtime,在移除 dockershim 代码后,唯一有效的值将是 remote。Kubernetes v1.27 将移除此参数,该参数自 v1.24 版本起已废弃。

展望未来

Kubernetes v1.29 计划移除的API 官方列表包括

  • FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本将在 v1.29 中停止提供服务。

想了解更多?

废弃信息在 Kubernetes 版本说明中公布。您可以在以下版本的发布说明中查看待废弃项的公告:

我们将在Kubernetes v1.27 的 CHANGELOG 中正式公布该版本带来的废弃项。

有关废弃和移除过程的信息,请查看官方 Kubernetes 废弃策略文档。