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

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 以使用新的仓库。

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

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

我们有一篇博文,其中包含了关于此项变更的所有信息以及如果它对你产生影响该怎么办。

Kubernetes API 移除和弃用流程

Kubernetes 项目对特性有明确的弃用策略。该策略规定,稳定的 API 只有在同一 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 对象暴露当前可用的存储容量,并增强了使用延迟绑定(late binding)的 CSI 卷的 Pod 的调度。CSIStorageCapacity 的 storage.k8s.io/v1beta1 API 版本在 v1.24 中被弃用,并且在 v1.27 中将不再提供服务。

请将清单和 API 客户端迁移到使用 storage.k8s.io/v1 API 版本,该版本自 v1.24 起可用。所有现有的持久化对象都可以通过新的 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 字段。

移除几个用于卷扩展的特性门控

以下用于卷扩展 GA 功能的特性门控将被移除,并且不得再在  --feature-gates  标志中引用:

ExpandCSIVolumes
启用 CSI 卷的扩展。
ExpandInUsePersistentVolumes
启用扩展正在使用的 PVC。
ExpandPersistentVolumes
启用持久卷的扩展。

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

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

移除 ControllerManagerLeaderMigration 特性门控

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

ControllerManagerLeaderMigration 特性自 v1.24 起为 GA,现已无条件启用,在 v1.27 版本中,该特性门控选项将被移除。如果你明确设置了此特性门控,你需要从命令行参数或配置文件中移除它。

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

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

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

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

移除 CSI Migration 特性门控

CSI 迁移计划允许从树内(in-tree)卷插件迁移到树外(out-of-tree)CSI 驱动。CSI 迁移自 Kubernetes v1.16 起普遍可用,相关的 CSIMigration 特性门控将在 v1.27 中被移除。

移除 CSIInlineVolume 特性门控

CSI 临时卷功能允许在 Pod 规范中直接指定 CSI 卷以用于临时场景。它们可用于通过挂载的卷直接向 Pod 内部注入任意状态,如配置、密钥、身份、变量或类似信息。此功能在 v1.25 中毕业为 GA。因此,特性门控 CSIInlineVolume 将在 v1.27 版本中被移除。

移除 EphemeralContainers 特性门控

临时容器在 v1.25 中毕业为 GA。这些是具有临时生命周期的容器,在现有 Pod 的命名空间内执行。临时容器通常由用户启动,以便观察其他 Pod 和容器的状态,用于故障排除和调试目的。对于 Kubernetes v1.27,临时容器的 API 支持是无条件启用的;EphemeralContainers 特性门控将被移除。

移除 LocalStorageCapacityIsolation 特性门控

本地临时存储容量隔离功能在 v1.25 中进入 GA 阶段。该功能支持 Pod 之间的本地临时存储容量隔离,例如 emptyDir 卷,这样可以硬性限制 Pod 对共享资源的消耗。如果本地临时存储的消耗超过配置的限制,kubelet 将驱逐 Pod。特性门控 LocalStorageCapacityIsolation 将在 v1.27 版本中被移除。

移除 NetworkPolicyEndPort 特性门控

Kubernetes v1.25 版本将 NetworkPolicy 中的 endPort 提升为 GA。支持 endPort 字段的网络策略提供程序可以使用该字段来指定应用网络策略的端口范围。以前,每个 NetworkPolicy 只能针对单个端口。因此,特性门控 NetworkPolicyEndPort 将在此版本中被移除。

请注意,endPort 字段必须得到网络策略提供程序的支持。如果你的提供程序不支持 endPort,并且在网络策略中指定了该字段,那么创建的网络策略将只覆盖 port 字段(单个端口)。

移除 StatefulSetMinReadySeconds 特性门控

对于属于 StatefulSet 的 Pod,只有当 Pod 在你在 minReadySeconds 中指定的周期内可用(并通过检查)时,Kubernetes 才能将其标记为就绪。该功能在 Kubernetes v1.25 中普遍可用,StatefulSetMinReadySeconds 特性门控将被锁定为 true 并在 v1.27 版本中被移除。

移除 IdentifyPodOS 特性门控

你可以为 Pod 指定操作系统,该功能的支持自 v1.25 版本起已稳定。IdentifyPodOS 特性门控将在 Kubernetes v1.27 中被移除。

移除 DaemonSetUpdateSurge 特性门控

Kubernetes v1.25 版本还稳定了对 DaemonSet Pod 的浪涌(surge)支持,旨在最小化 DaemonSet 在部署过程中的停机时间。DaemonSetUpdateSurge 特性门控将在 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 弃用策略文档。