这篇文章已经一年多了,较旧的文章可能包含过时的内容。请检查从发表以来,页面中的信息是否变得不正确。
Kubernetes v1.32 预览
随着 Kubernetes v1.32 发布日期的临近,Kubernetes 项目继续发展和成熟。在这个过程中,某些特性可能会被弃用、移除或被更好的特性取代,以确保项目的整体健康与发展。
本文概述了 Kubernetes v1.32 发布的一些计划变更,发布团队认为你应该了解这些变更,以确保你的 Kubernetes 环境得以持续维护并跟上最新的变化。以下信息基于 v1.32发布的当前状态,实际发布日期前可能会有所变动。
Kubernetes API 的移除和弃用流程
Kubernetes 项目对功能特性有一个文档完备的弃用策略。该策略规定,只有当较新的、稳定的相同 API 可用时,原有的稳定 API 才可能被弃用,每个稳定级别的 API 都有一个最短的生命周期。弃用的 API 指的是已标记为将在后续发行某个 Kubernetes 版本时移除的 API;移除之前该 API 将继续发挥作用(从弃用起至少一年时间),但使用时会显示一条警告。移除的 API 将在当前版本中不再可用,此时你必须迁移以使用替换的 API。
正式发布的(GA)或稳定的 API 版本可被标记为已弃用,但不得在 Kubernetes 主要版本未变时删除。
Beta 或预发布 API 版本,必须保持在被弃用后 3 个发布版本中仍然可用。
Alpha 或实验性 API 版本可以在任何版本中删除,不必提前通知;如果同一特性已有不同实施方案,则此过程可能会成为撤销。
无论 API 是因为特性从 Beta 升级到稳定状态还是因为未能成功而被移除,所有移除操作都遵守此弃用策略。每当 API 被移除时,迁移选项都会在弃用指南中进行说明。
关于撤回 DRA 的旧的实现的说明
增强特性 #3063 在 Kubernetes 1.26中引入了动态资源分配(DRA)。
然而,在 Kubernetes v1.32 中,这种 DRA 的实现方法将发生重大变化。与原来实现相关的代码将被删除,只留下 KEP #4381 作为"新"的基础特性。
改变现有方法的决定源于其与集群自动伸缩的不兼容性,因为资源可用性是不透明的,这使得 Cluster Autoscaler 和控制器的决策变得复杂。新增的结构化参数模型替换了原有特性。
这次移除将使 Kubernetes 能够更可预测地处理新的硬件需求和资源声明,避免了与 kube-apiserver 之间复杂的来回 API 调用。
请参阅增强问题 #3063 以了解更多信息。
API 移除
在 Kubernetes v1.32 中,计划仅移除一个 API:
flowcontrol.apiserver.k8s.io/v1beta3版本的 FlowSchema 和 PriorityLevelConfiguration 已被移除。为了对此做好准备,你可以编辑现有的清单文件并重写客户端软件,使用自 v1.29 起可用的flowcontrol.apiserver.k8s.io/v1API 版本。所有现有的持久化对象都可以通过新 API 访问。flowcontrol.apiserver.k8s.io/v1beta3中的重要变化包括:当未指定时,PriorityLevelConfiguration 的spec.limited.nominalConcurrencyShares字段仅默认为 30,而显式设置的 0 值不会被更改为此默认值。有关更多信息,请参阅 API 弃用指南。
Kubernetes v1.32 的抢先预览
以下增强特性有可能会被包含在 v1.32 发布版本中。请注意,这并不是最终承诺,发布内容可能会发生变化。
更多 DRA 增强特性!
在此次发布中,就像上一次一样,Kubernetes 项目继续提出多项对动态资源分配(DRA)的增强。DRA 是 Kubernetes 资源管理系统的关键组件,这些增强旨在提高对需要专用硬件(如 GPU、FPGA 和网络适配器)的工作负载进行资源分配的灵活性和效率。此次发布引入了多项改进,包括在 Pod 状态中添加资源健康状态,具体内容详见 KEP #4680。
在 Pod 状态中添加资源健康状态
当 Pod 使用的设备出现故障或暂时不健康时,很难及时发现。KEP #4680
提议通过 Pod 的 status 暴露设备健康状态,从而使 Pod 崩溃的故障排除更加容易。
Windows 工作继续
KEP #4802 为Kubernetes 集群中的 Windows 节点添加了体面关机支持。在此之前,Kubernetes 为 Linux 节点提供了体面关机特性,但缺乏对 Windows 节点的同等支持。这一增强特性使 Windows 节点上的 kubelet 能够正确处理系统关机事件,确保在 Windows 节点上运行的 Pod 能够体面终止,从而允许工作负载在不受干扰的情况下重新调度。这一改进提高了包含 Windows 节点的集群的可靠性和稳定性,特别是在计划维护或系统更新期间。
允许环境变量中使用特殊字符
随着这一增强特性升级到 Beta 阶段,Kubernetes 现在允许几乎所有的可打印 ASCII 字符(不包括 =)作为环境变量名称。这一变化解决了此前对变量命名的限制,通过适应各种应用需求,促进了 Kubernetes 的更广泛采用。放宽的验证将通过 RelaxedEnvironmentVariableValidation 特性门控默认启用,确保用户可以轻松使用环境变量而不受严格限制,增强了开发者在处理需要特殊字符配置的应用(如 .NET Core)时的灵活性。
使 Kubernetes 感知到 LoadBalancer 的行为
KEP #1860 升级到 GA 阶段,为 type: LoadBalancer 类型的 Service 引入了 ipMode 字段,该字段可以设置为 "VIP" 或 "Proxy"。这一增强旨在改善云提供商负载均衡器与 kube-proxy 的交互方式,对最终用户来说是透明的。使用 "VIP" 时,kube-proxy 会继续处理负载均衡,保持现有的行为。使用 "Proxy" 时,流量将直接发送到负载均衡器,提供云提供商对依赖 kube-proxy 的更大控制权;这意味着对于某些云提供商,你可能会看到负载均衡器性能的提升。
为资源生成名称时重试
这一增强特性改进了使用generateName 字段创建 Kubernetes 资源时的名称冲突处理。此前,如果发生名称冲突,API 服务器会返回 409 HTTP 冲突错误,客户端需要手动重试请求。通过此次更新,API 服务器在发生冲突时会自动重试生成新名称,最多重试七次。这显著降低了冲突的可能性,确保生成多达 100 万个名称时冲突的概率低于 0.1%,为大规模工作负载提供了更高的弹性。
想了解更多?
新特性和弃用特性也会在 Kubernetes 发布说明中宣布。我们将在此次发布的Kubernetes v1.32 的 CHANGELOG 中正式宣布新内容。
你可以在以下版本的发布说明中查看变更公告: