这篇文章已经一年多了,较旧的文章可能包含过时的内容。请检查从发表以来,页面中的信息是否变得不正确。

Kubernetes 在 v1.27 中移除的特性和主要变更

作者:Harshita Sao

译者:Michael Yao (DaoCloud)

随着 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 仓库最终将被淘汰。

这次变更意味着什么?

  • 如果你是一个子项目的 Maintainer,你必须更新自己的清单和 Helm Chart 来使用新的仓库。
  • Kubernetes v1.27 版本不会发布到旧的仓库。
  • 从 4 月份起,针对 v1.24、v1.25 和 v1.26 的补丁版本将不再发布到旧的仓库。

我们曾发布了一篇博文, 讲述了此次变更有关的所有信息,以及影响到你时应该采取的措施。

Kubernetes API 移除和弃用流程

Kubernetes 项目对特性有一个文档完备的弃用策略。 该策略规定,只有当较新的、稳定的相同 API 可用时,原有的稳定 API 才可以被弃用, 每个稳定级别的 API 都有一个最短的生命周期。弃用的 API 指的是已标记为将在后续发行某个 Kubernetes 版本时移除的 API;移除之前该 API 将继续发挥作用(从弃用起至少一年时间), 但使用时会显示一条警告。被移除的 API 将在当前版本中不再可用,此时你必须迁移以使用替换的 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 中被移除。

迁移清单和 API 客户端以使用自 v1.24 起可用的 storage.k8s.io/v1 API 版本。 所有现有的已持久保存的对象都可以通过这个新的 API 进行访问。

更多信息可以参阅 Storage Capacity Constraints for Pod Scheduling 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 特性门控

Leader Migration 提供了一种机制,让 HA 集群在升级多副本的控制平面时通过在 kube-controller-managercloud-controller-manager 这两个组件之间共享的资源锁,安全地迁移“特定于云平台”的控制器。

ControllerManagerLeaderMigration 特性自 v1.24 正式发布,被无条件启用, 在 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 migration 程序允许从树内卷插件移动到树外 CSI 驱动程序。 CSI 迁移自 Kubernetes v1.16 起正式发布,关联的 CSIMigration 特性门控将在 v1.27 中被移除。

移除 CSIInlineVolume 特性门控

CSI Ephemeral Volume 特性允许在 Pod 规约中直接指定 CSI 卷作为临时使用场景。这些 CSI 卷可用于使用挂载的卷直接在 Pod 内注入任意状态,例如配置、Secret、身份、变量或类似信息。 此特性在 v1.25 中进阶至正式发布。因此,此特性门控 CSIInlineVolume 将在 v1.27 版本中移除。

移除 EphemeralContainers 特性门控

临时容器在 v1.25 中进阶至正式发布。 这些是具有临时持续周期的容器,在现有 Pod 的命名空间内执行。 临时容器通常由用户发起,以观察其他 Pod 和容器的状态进行故障排查和调试。 对于 Kubernetes v1.27,对临时容器的 API 支持被无条件启用;EphemeralContainers 特性门控将被移除。

移除 LocalStorageCapacityIsolation 特性门控

Local Ephemeral Storage Capacity Isolation 特性在 v1.25 中进阶至正式发布。此特性支持 emptyDir 卷这类 Pod 之间本地临时存储的容量隔离, 因此可以硬性限制 Pod 对共享资源的消耗。如果本地临时存储的消耗超过了配置的限制,kubelet 将驱逐 Pod。 特性门控 LocalStorageCapacityIsolation 将在 v1.27 版本中被移除。

移除 NetworkPolicyEndPort 特性门控

Kubernetes v1.25 版本将 NetworkPolicy 中的 endPort 进阶至正式发布。 支持 endPort 字段的 NetworkPolicy 提供程序可用于指定一系列端口以应用 NetworkPolicy。 以前每个 NetworkPolicy 只能针对一个端口。因此,此特性门控 NetworkPolicyEndPort 将在此版本中被移除。

请注意,endPort 字段必须得到 NetworkPolicy 提供程序的支持。 如果你的提供程序不支持 endPort,并且此字段在 NetworkPolicy 中指定, 则将创建仅涵盖端口字段(单个端口)的 NetworkPolicy。

移除 StatefulSetMinReadySeconds 特性门控

对于作为 StatefulSet 一部分的 Pod,只有当 Pod 至少在 minReadySeconds 中指定的持续期内可用(并通过检查)时,Kubernetes 才会将此 Pod 标记为只读。 该特性在 Kubernetes v1.25 中正式发布,StatefulSetMinReadySeconds 特性门控将锁定为 true,并在 v1.27 版本中被移除。

移除 IdentifyPodOS 特性门控

你可以为 Pod 指定操作系统,此项特性支持自 v1.25 版本进入稳定。 IdentifyPodOS 特性门控将在 Kubernetes v1.27 中被移除。

移除 DaemonSetUpdateSurge 特性门控

Kubernetes v1.25 版本还稳定了对 DaemonSet Pod 的浪涌支持, 其实现是为了最大限度地减少部署期间 DaemonSet 的停机时间。 DaemonSetUpdateSurge 特性门控将在 Kubernetes v1.27 中被移除。

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

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

前瞻

Kubernetes 1.29 计划移除的 API 官方列表包括:

  • FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本将不再在 v1.29 中提供。

了解更多

Kubernetes 发行说明中宣告了弃用信息。你可以在以下版本的发行说明中看到待弃用的公告:

我们将在 Kubernetes v1.27 的 CHANGELOG 中正式宣布该版本的弃用信息。

有关弃用和移除流程信息,请查阅正式的 Kubernetes 弃用策略文档。