Kubernetes 1.32 发布: 还在写 Webhook? 你已经 OUT 了!

太平洋时间 2024 年 12 月 11 日,主题为佩涅洛佩 Penelope 的 Kubernetes v1.32 正式发布。

此版本距离上版本发布时隔 4 个月,是 2024 年的第三个版本。

与之前的版本类似,Kubernetes v1.32 版本引入了多项新的稳定、Beta 和 Alpha 版本的功能。一贯交付高质量版本的承诺凸显了 Kubernetes 社区的开发周期实力和社区的活跃支持。

此版本包含 44 项改进。在这些改进功能中,有 13 项已晋升为稳定版,另外有 12 项正在进入 Beta 阶段,以及最后的 19 项为 Alpha 阶段。

01

发布主题

Kubernetes v1.32 的发布主题是佩涅洛佩 Penelope。

如果将 Kubernetes 理解为古希腊语中的 “领航员”,在这次发布中,我们从这个起源出发,回顾了过去十年 Kubernetes 的发展和我们所取得的成就:每一个版本迭代就像一次旅程,就像《奥德赛》中的佩涅洛佩一样,她织布了十年之久 -- 每天晚上拆掉白天所织的部分 -- 每个版本都会增添新功能并去除旧功能,但在这里更加明确的目标是不断改进 Kubernetes。随着 v1.32 成为 Kubernetes 十周年的最后一个版本,我们想要向那些成为全球 Kubernetes 队伍一部分的人致敬,他们在云原生海域中漂泊,经历危险和挑战:愿我们继续共同编织 Kubernetes 的未来。

02

GA 和

稳定的功能

GA 全称 General Availability,即正式发布。Kubernetes 的进阶路线通常是 Alpha、Beta、Stable (即 GA)、Deprecation/Removal 这四个阶段。

KEP-1769 内存管理器是 kubelet 生态系统中的一个新组件,旨在向 QoS 类为 Guaranteed 的 Pod 提供多 NUMA 保证的内存分配:https://kep.k8s.io/1769

KEP-1847 为 StatefulSet 提供了自动删除 PVC 的方法:https://kep.k8s.io/1847

KEP-1860 为云提供商提供了一种禁用 kube-proxy 配置 LoadBalancer IP 行为的方法:https://kep.k8s.io/1860

KEP-1967 支持调整内存卷的大小以匹配 Pod 可分配内存:https://kep.k8s.io/1967

KEP-2681 为 Pod 添加 status.hostIPs 字段:https://kep.k8s.io/2681

KEP-3221 结构化鉴权配置, 可包含多个 webhook 的鉴权链。该链中的鉴权项可以具有明确定义的参数,这些参数可以按特定顺序验证请求,从而提供细粒度的控制:https://kep.k8s.io/3221

KEP-3545 优化拓扑管理器中的多 NUMA 对齐,在计算包含多个 NUMA 节点的“最佳提示”时,会考虑 NUMA 节点之间的相对距离:https://kep.k8s.io/3545

KEP-4017 为 StatefulSet 和 Job 创建的 Pod 新增标签,用来标记自身索引:https://kep.k8s.io/4017

KEP-4026 为从 CronJob 派生的 Job 对象添加新注解 “batch.kubernetes.io/cronjob-scheduled-timestamp”:https://kep.k8s.io/4026

KEP-4193 改进绑定的服务帐户令牌, 自动将 Pod 关联的节点的 name 和 uid (通过 spec.nodeName )嵌入到生成的令牌中, 并允许用户获取专门与 Node 对象生命周期相关的令牌:https://kep.k8s.io/4193

KEP-4420 当生成的名称与现有资源名称冲突时,kube-apiserver 会自动重试使用 generateName 的创建请求,最多重试 7 次:https://kep.k8s.io/4420

KEP-4292 在 kubectl debug 命令中的预定义配置文件之上添加了新的自定义配置文件功能, 使kubectl debug pod/node 或临时容器规范可配置:https://kep.k8s.io/4292

KEP-4358 自定义资源字段选择器, 允许为自定义资源类型设置预定义的字段选择配置,客户端可以使用以前预设的字段选择器来过滤资源:https://kep.k8s.io/4358

03

进入 Beta 阶段

的功能

Beta 阶段的功能是指那些已经经过 Alpha 阶段的功能, 且在 Beta 阶段中添加了更多的测试和验证, 通常情况下是默认启用的。下文择取了部分特性详述。如果对其他特性感兴趣,请移步至具体的 KEP 页面了解进展和详情。

KEP-1790 卷扩容失败恢复

用户可以将 PersistentVolumeClaim (PVC) 扩展至底层存储提供程序可能不支持的大小。在这种情况下, 通常扩展控制器会永远尝试扩展卷并不断失败。我们希望让用户更容易从扩展失败中恢复,以便用户可以使用可能成功的值重试卷扩展。为了实现恢复,此增强功能放宽了 PVC 对象的 API 验证,以允许减少请求的大小。

允许用户减小大小的问题是, 恶意用户可以使用此功能来滥用配额系统。他们可以通过快速膨胀然后收缩 PVC 来实现这一点。一般来说,CSI 和树内卷插件都被设计为永远不会对底层卷执行实际收缩,但它可以欺骗配额系统,让其相信用户使用的存储空间比他/她实际使用的存储空间少。为了解决这个问题, 虽然允许用户减少 PVC 的大小(前提是请求的大小 > pvc.Status.Capacity ),但配额计算将使用 max(pvc.Spec.Capacity, pvc.Status.AllocatedResources) 并减少 pvc.Status.AllocatedResources 仅在先前发布的扩展因某种终端故障而失败后由 resize-controller 完成。

更新总览

KEP-1710 通过使用正确的 SELinux 标签挂载卷而不是递归更改卷上的每个文件来加速容器启动:https://kep.k8s.io/1710

KEP-1790 允许用户通过减少请求的容量大小, 从卷扩容失败中恢复:https://kep.k8s.io/1790

KEP-3157 Informer 可以获取数据流来启动缓存:https://kep.k8s.io/3157

KEP-3331 添加结构化身份验证配置:https://kep.k8s.io/3331

KEP-3476 提供了一组新的 API, 支持一致的组快照,该快照允许在同一时间点从多个卷拍摄快照,以实现写入顺序一致性:https://kep.k8s.io/3476

KEP-4247 调度器通过将 QueueingHint 引入 EventsToRegister,调度队列根据 QueueingHint 的结果对 Pod 重新排队, 有助于减少无用的调度重试,从而提高调度吞吐量:https://kep.k8s.io/4272

KEP-4601 鉴权属性将扩展为包括列表、监视和删除集合中的字段选择器和标签选择器。这将允许鉴权者在做出鉴权决定时使用这些选择器:https://kep.k8s.io/4601

KEP-4369 环境变量中允许使用特殊字符:https://kep.k8s.io/4369

KEP-4368 支持 Job 的 ManagedBy 字段:https://kep.k8s.io/4368

KEP-4381 借助结构化参数,kube-scheduler 和 Cluster Autoscaler 可以自行处理和模拟声明分配,而无需依赖第三方驱动程序:https://kep.k8s.io/4381

KEP-4633 仅允许对配置的端点进行匿名身份验证:https://kep.k8s.io/4633

04

进入 Alpha 阶段

的功能

Alpha 阶段的功能是指那些刚刚被引入的功能,这些功能是默认关闭的,需要用户手动开启。下文择取了部分特性详述, 如果对其他特性感兴趣,请移步至具体的 KEP 页面了解进展和详情。

KEP-3962 使用 CEL 表达式声明的更改准入策略

该功能利用了 CEL 的对象实例化和 JSON Patch 策略,并结合了 Server Side Apply 的合并算法。它简化了策略定义,减少了变更冲突,并提高了准入控制性能,同时为 Kubernetes 中更强大、可扩展的策略框架奠定了基础。

Kubernetes 现在支持基于通用表达式语言(CEL)的变更准入策略,提供了一种轻量、高效的替代变更准入 Webhook 的方法。通过这一增强功能,管理员可以使用 CEL 通过简单的声明性表达式来声明变更,例如设置标签、默认字段或注入边车。

这种方法降低了操作复杂性,消除了对 Webhook 的需求,并直接与 kube-apiserver 集成,提供了更快、更可靠的进程内变更处理能力。

KEP-283 Pod 级别设置资源请求和限制

此增强功能通过引入在 Pod 级别设置资源请求和限制的能力,简化了Kubernetes 中的资源管理,创建了一个所有 Pod 中的容器都可以动态使用的共享池。这对于具有波动或突发资源需求的工作负载特别有价值,因为它最小化了过度配置并提高了整体资源效率。

通过在 Pod 级别利用 Linux cgroup 设置,Kubernetes 确保这些资源限制得到执行,同时使紧密耦合的容器能够更有效地协作而不会遇到人为限制。

优先级:当同时指定 Pod 级和容器级资源时,Pod 级资源优先。

QoS:Pod 级资源在影响 Pod 的 QoS 类时优先。

OOM 分数:OOM 分数调整计算同时考虑 Pod 级和容器级资源。

兼容性:Pod 级资源旨在与现有功能兼容。

这标志着多容器 Pod 的显著改进,因为它减少了跨容器管理资源分配的操作复杂性。它还为紧密集成的应用程序(如 sidecar 架构)提供了性能提升,在这些应用程序中,容器共享工作负载或依赖彼此的可用性以实现最佳性能。

更多 DRA 增强特性

Dynamic Resource Allocation (DRA) 是 Kubernetes 资源管理系统的关键组件,这些增强旨在提高对需要专用硬件(如 GPU、FPGA 和网络适配器) 的工作负载进行资源分配的灵活性和效率。此次发布引入了多项改进,包括在 Pod 状态中添加资源健康状态。

05

删除和废弃

的功能

撤回 DRA 的旧的实现

增强特性 KEP-3063 ("classic DRA") 在 Kubernetes 1.26 中引入了动态资源分配(DRA)。然而,在 Kubernetes v1.32 中,这种 DRA 的实现方法将发生重大变化。与原来实现相关的代码将被删除,只留下 KEP-4381 作为"新"的基础特性。改变现有方法的决定源于其与集群自动伸缩的不兼容性,因为资源可用性是不透明的,这使得 Cluster Autoscaler 和控制器的决策变得复杂。

新增的结构化参数模型替换了原有特性。这次移除将使 Kubernetes 能够更可预测地处理新的硬件需求和资源声明,避免了与 kube-apiserver 之间复杂的来回 API 调用。

API 移除

flowcontrol.apiserver.k8s.io/v1beta3 版本的 FlowSchema 和 PriorityLevelConfiguration 已被移除。为了对此做好准备,你可以编辑现有的清单文件并重写客户端软件,使用自 v1.29 起可用的 flowcontrol.apiserver.k8s.io/v1 API 版本。所有现有的持久化对象都可以通过新 API 访问。flowcontrol.apiserver.k8s.io/v1beta3 中的重要变化包括:当未指定时,PriorityLevelConfiguration 的 spec.limited.nominalConcurrencyShares 字段仅默认为 30,而显式设置的 0 值不会被更改为此默认值。

06

DaoCloud

社区贡献

在 2024 年 11 月的 KubeCon + CloudNativeCon North America 2024 [1]上, DaoCloud 团队荣获以下荣誉:

CNCF 大使 - 陈齐彦、蔡威 (再次当选)、要海峰

CNCF 文档奖 - 要海峰

Kubernetes Contributor Awards [2](SIG Storage 和 SIG Cluster Lifecyle) - 范宝发

要海峰的成长故事分享:从社区小白到 CNCF 大使

07

发行说明

上述内容就是 Kubernetes v1.32 的主要更新和内容啦,更多的发布说明可以查看 Kubernetes v1.32 版本的完整详细信息:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md。

我们下次版本发布时再见!

08

历史文档

Kubernetes 1.31 发布!十年 OCI 镜像借着 AI 的风终于加入 Volume 的大家庭 ~

最可爱的版本 UwU - Kubernetes v1.30 发布!

Kubernetes 1.29 全新特性:抛弃 iptables 还在等什么...

Kubernetes 1.28 震撼发布,Sidecar Containers 迎面而来

近两年功能增加最多!Kubernetes 1.27 正式发布

Kubernetes 正式发布 v1.26,稳定性显著提升

Kubernetes 1.25 正式发布,多方面重大突破

Kubernetes 1.24 走向成熟的 Kubernetes

Kubernetes 1.23 正式发布,有哪些增强?

Kubernetes 1.22 颠覆你的想象:可启用 Swap,推出 PSP 替换方案,还有……

Kubernetes 1.21 震撼发布 | PSP 将被废除,BareMetal 得到增强

点击文字可直接跳转至对应文档。

参考链接

[1] KubeCon + CloudNativeCon North America 2024:

https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/

[2] Kubernetes Contributor Awards:

https://www.kubernetes.dev/community/awards/2024/

[3] Kubernetes 增强特性:

https://kep.k8s.io/

[4] Kubernetes 1.32 发布团队:

https://github.com/kubernetes/sig-release/blob/master/releases/release-1.32

[5] Kubernetes 1.32 变更日志:

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md

[6] Kubernetes 1.32 主题讨论:

kubernetes/sig-release#2639

请使用浏览器的分享功能分享到微信等