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

k8s技术圈 2024-12-31 10:18:00
与之前的版本一样,Kubernetes v1.32 版本引入了新的稳定版、测试版和 alpha 版功能。持续交付高质量的版本凸显了我们开发的实力和社区的活力。本次发布总共包含 44 项增强功能。其中 13 项功能升级为稳定版,12 项进入测试版,19 项进入 alpha 版。

 

发布主题和 LOGO

 

Kubernetes v1.32 Logo

 

Kubernetes v1.32 的发布主题是 Penelope(佩涅罗佩)。

 

如果说 Kubernetes 在古希腊语中意为"舵手",在这个版本中我们从这个起源出发,回顾 Kubernetes 过去 10 年的成就:每个发布周期都是一段旅程,每个版本都会添加新功能并移除一些旧功能,不过我们有着更明确的目标,那就是不断改进 Kubernetes。在 Kubernetes 十周年之际的最后一个版本 v1.32,我们想要向所有参与过这个全球 Kubernetes 船员队伍致敬,他们在云原生的海洋中航行,克服了重重困难和挑战:愿我们继续一起编织 Kubernetes 的未来。

 

近期重要功能更新

 

 

关于 DRA 增强功能的说明

 

在这个版本中,与上一个版本一样,Kubernetes 项目继续对动态资源分配(DRA)提出了一系列增强功能,这是 Kubernetes 资源管理系统的一个关键组件。这些增强功能旨在提高需要专用硬件(如 GPU、FPGA 和网络适配器)的工作负载的资源分配灵活性和效率。这些功能对机器学习或高性能计算应用等场景特别有用。支持 DRA 结构化参数的核心部分[已升级为测试版]。

 

 

节点和 sidecar 容器的易用性优化更新

 

SIG Node 工作组在本次发布中还有以下亮点超出了增强提案(KEP)的范畴:

 

现在使用 systemd watchdog 功能在健康检查失败时重启 kubelet,同时限制在给定时间段内的最大重启次数。这提高了 kubelet 的可靠性。更多详情请参见 pull request #127566[1]。

 

在遇到镜像拉取回退错误时,Pod 状态中显示的消息已改进,更加人性化,并指出 Pod 处于此状态的原因。当发生镜像拉取回退时,错误会附加到 Pod 规范中的 status.containerStatuses[*].state.waiting.message 字段,reason 字段值为 ImagePullBackOff。这一变更为您提供了更多上下文,帮助您识别问题的根本原因。

sidecar 容器功能计划在 v1.33 中升级为稳定版。要查看剩余工作和用户反馈,请参见 issue #753[2] 中的评论。

 

升级为稳定版的功能

 

以下是 v1.32 版本中升级为稳定版的部分改进功能。

 

 

自定义资源字段选择器

 

自定义资源字段选择器允许开发人员为自定义资源添加字段选择器,这与 Kubernetes 内置对象的功能相似。这允许更高效和精确地过滤自定义资源,促进更好的 API 设计实践。

 

这项工作是由 SIG API Machinery 作为 KEP #4358[3] 的一部分完成的。

 

 

支持调整内存支持卷的大小

 

此功能可以根据 Pod 资源限制动态调整内存支持卷的大小,提高工作负载的可移植性和整体节点资源利用率。

 

这项工作是由 SIG Node 作为 KEP #1967[4] 的一部分完成的。

 

 

绑定 ServiceAccount Token 改进

 

在 ServiceAccount Token 声明中包含节点名称允许用户在授权和准入(ValidatingAdmissionPolicy)期间使用此类信息。此外,这项改进防止 ServiceAccount 凭证成为节点的权限提升途径。

 

这项工作是由 SIG Auth 作为 KEP #4193[5] 的一部分完成的。

 

 

结构化授权配置

 

可以在 APIServer 中配置多个授权器以允许结构化授权决策,并支持 webhook 中的 CEL 匹配条件。这项工作是由 SIG Auth 作为 KEP #3221[6] 的一部分完成的。

 

 

StatefulSet 自动删除 PVC

 

StatefulSet 创建的持久卷声明(PVC)在不再需要时会自动删除,同时确保在 StatefulSet 更新和节点维护期间的数据持久性。此功能简化了 StatefulSet 的存储管理,并降低了孤立 PVC 的风险。

 

这项工作是由 SIG Apps 作为 KEP #1847[7] 的一部分完成的。

 

升级为测试版的功能

 

以下是 v1.32 版本中升级为测试版的部分改进功能。

 

 

Job API 管理机制

 

Job 的 managedBy 字段在 v1.32 版本中升级为测试版。此功能使外部控制器(如 Kueue[8])能够管理 Job 同步,为高级工作负载管理系统提供更大的灵活性和集成能力。

 

这项工作是由 SIG Apps 作为 KEP #4368[9] 的一部分完成的。

 

 

仅允许匿名认证访问配置的端点

 

此功能让管理员可以指定允许匿名请求访问的端点。例如,管理员可以选择只允许匿名访问 /healthz、/livez 和 /readyz 等健康检查端点,同时确保即使用户错误配置 RBAC,也能防止匿名访问其他集群端点或资源。

 

这项工作是由 SIG Auth 作为 KEP #4633[10] 的一部分完成的。

 

 

kube-scheduler 中每个插件的回调函数用于准确重新排队的增强功能

 

此功能通过每个插件的回调函数(QueueingHint)提高调度吞吐量,实现更高效的调度重试决策。现在所有插件都有 QueueingHints。

 

这项工作是由 SIG Scheduling 作为 KEP #4247[11] 的一部分完成的。

 

 

从卷扩展失败中恢复

 

此功能让用户可以通过重试较小的大小从卷扩展失败中恢复。这项增强确保卷扩展更具弹性和可靠性,降低了过程中数据丢失或损坏的风险。

 

这项工作是由 SIG Storage 作为 KEP #1790[12] 的一部分完成的。

 

 

VolumeGroup Snapshot

 

此功能引入了 VolumeGroupSnapshot API,让用户可以一起对多个卷进行快照,确保卷之间的数据一致性。

 

这项工作是由 SIG Storage 作为 KEP #3476[13] 的一部分完成的。

 

 

结构化参数支持

动态资源分配(DRA)的核心部分 —— 结构化参数支持已升级为测试版。这使得 kube-scheduler 和 Cluster Autoscaler 可以直接模拟声明分配,而无需第三方驱动程序。这些组件现在可以根据集群的当前状态预测资源请求是否可以得到满足,而无需实际提交分配。通过消除对第三方驱动程序验证或测试分配的需求,此功能改进了资源分配的规划和决策,使调度和扩展过程更加高效。

 

这项工作是由 WG Device Management(一个包含 SIG Node、SIG Scheduling 和 SIG Autoscaling 的跨职能团队)作为 KEP #4381[14] 的一部分完成的。

 

 

标签和字段选择器授权

标签和字段选择器可以用于授权决策。节点授权器自动利用这一点来限制节点只能列出或监视其 Pod。Webhook 授权器可以更新以根据使用的标签或字段选择器限制请求。

 

这项工作是由 SIG Auth 作为 KEP #4601[15] 的一部分完成的。

 

v1.32 中新的 Alpha 功能

 

以下是 v1.32 版本中引入的 alpha 版关键改进功能。

 

 

Kubernetes 调度器中的异步抢占

Kubernetes 调度器通过异步抢占功能得到增强,该功能通过异步处理抢占操作来提高调度吞吐量。抢占通过驱逐低优先级的 Pod 来确保高优先级的 Pod 获得所需资源,但这个过程之前涉及大量操作(如删除 Pod 的 API 调用),从而降低调度器速度。通过这项增强,此类任务现在可以并行处理,使调度器能够继续调度其他 Pod 而不会延迟。这项改进对于 Pod 流动性高或调度失败频繁的集群特别有益,确保更高效和弹性的调度过程。

 

这项工作是由 SIG Scheduling 作为 KEP #4832[16] 的一部分完成的。

 

 

使用 CEL 表达式的变更准入策略

 

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

 

Kubernetes API 服务器现在支持基于通用表达式语言(CEL)的变更准入策略,为变更准入 webhook 提供了一个轻量级、高效的替代方案。通过这项增强,管理员可以使用 CEL 通过简单、声明性的表达式来声明变更,如设置标签、默认字段或注入 sidecar。这种方法降低了操作复杂性,消除了对 webhook 的需求,并直接与 kube-apiserver 集成,提供更快速和可靠的进程内变更处理。

 

这项工作是由 SIG API Machinery 作为 KEP #3962[17] 的一部分完成的。

 

 

Pod 级资源规范

 

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

 

通过在 Pod 级别利用 Linux cgroup 设置,Kubernetes 确保这些资源限制得到执行,同时使紧密耦合的容器能够更有效地协作,而不会遇到人为限制。重要的是,此功能保持与现有容器级资源设置的向后兼容性,允许用户逐步采用它,而不会中断当前工作流程或现有配置。

 

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

 

这项工作是由 SIG Node 作为 KEP #2837[18] 的一部分完成的。

 

 

允许 PreStop hook 的 sleep 动作为零值

 

这项增强引入了在 Kubernetes 中为 PreStop 生命周期钩子设置零秒睡眠持续时间的能力,为资源验证和自定义提供了更灵活和无操作的选项。之前,尝试为睡眠动作定义零值会导致验证错误,限制了其使用。通过此更新,用户可以将零秒持续时间配置为有效的睡眠设置,在需要时启用即时执行和终止行为。

 

这项增强向后兼容,作为由 PodLifecycleSleepActionAllowZero 特性门控制的选择加入功能引入。这一变更对于需要 PreStop 钩子进行验证或准入 webhook 处理而不需要实际睡眠持续时间的场景特别有益。通过与 Go 函数 time.After 的功能保持一致,此更新简化了配置并扩展了 Kubernetes 工作负载的可用性。

 

这项工作是由 SIG Node 作为 KEP #4818[19] 的一部分完成的。

 

 

DRA:资源声明状态的标准化网络接口数据

 

此增强添加了一个新字段,允许驱动程序报告 ResourceClaim 中每个分配对象的特定设备状态数据。它还建立了表示网络设备信息的标准化方式。

 

这项工作是由 SIG Network 作为 KEP #4817[20] 的一部分完成的。

 

核心组件的新 statusz 和 flagz 端点

 

您可以为核心组件启用两个新的 HTTP 端点 /statusz 和 /flagz。这些端点通过获取组件运行的版本(如 Golang 版本)以及有关其运行时间和执行该组件时使用的命令行标志的详细信息来增强集群的可调试性,使诊断运行时和配置问题变得更容易。

 

这项工作是由 SIG Instrumentation 作为 KEP #4827[21] 和 KEP #4828[22] 的一部分完成的。

 

 

Windows 功能增强!

 

添加了对 Kubernetes 集群中 Windows 节点优雅关闭的支持。在此版本之前,Kubernetes 为 Linux 节点提供了优雅节点关闭功能,但缺乏对 Windows 的同等支持。这项增强使 Windows 节点上的 kubelet 能够正确处理系统关闭事件。这样做可以确保在 Windows 节点上运行的 Pod 得到优雅终止,允许工作负载在不中断的情况下重新调度。这项改进提高了包含 Windows 节点的集群的可靠性和稳定性,特别是在计划维护或任何系统更新期间。

 

此外,还为具有节点的 Windows 节点添加了 CPU 和内存亲和性支持,改进了 CPU 管理器、内存管理器和拓扑管理器。

 

这项工作分别是由 SIG Windows 作为 KEP #4802[23] 和 KEP #4885[24] 的一部分完成的。

 

 

可用性

 

Kubernetes v1.32 可在 GitHub[25] 或 Kubernetes 下载页面[26]上下载。

 

要开始使用 Kubernetes,请查看这些交互式教程[27]或使用 minikube[28] 运行本地 Kubernetes 集群。您还可以使用 kubeadm[29] 轻松安装 v1.32。

 

更多 Kubernetes v1.32 发布的详细信息,请查看我们的发布说明[30] 了解。

 

原文地址:https://kubernetes.io/blog/2024/12/11/kubernetes-v1-32-release/

 

>>>>

参考资料

  • [1]#127566: https://github.com/kubernetes/kubernetes/pull/127566

  • [2]#753: https://github.com/kubernetes/enhancements/issues/753#issuecomment-2350136594

  • [3]KEP #4358: https://github.com/kubernetes/enhancements/issues/4358

  • [4]KEP #1967: https://github.com/kubernetes/enhancements/issues/1967

  • [5]KEP #4193: https://github.com/kubernetes/enhancements/issues/4193

  • [6]KEP #3221: https://github.com/kubernetes/enhancements/issues/3221

  • [7]KEP #1847: https://github.com/kubernetes/enhancements/issues/1847

  • [8]Kueue: https://kueue.sigs.k8s.io/

  • [9]KEP #4368: https://github.com/kubernetes/enhancements/issues/4368

  • [10]KEP #4633: https://github.com/kubernetes/enhancements/issues/4633

  • [11]KEP #4247: https://github.com/kubernetes/enhancements/issues/4247

  • [12]KEP #1790: https://github.com/kubernetes/enhancements/issues/1790

  • [13]KEP #3476: https://github.com/kubernetes/enhancements/issues/3476

  • [14]KEP #4381: https://github.com/kubernetes/enhancements/issues/4381

  • [15]KEP #4601: https://github.com/kubernetes/enhancements/issues/4601

  • [16]KEP #4832: https://github.com/kubernetes/enhancements/issues/4832

  • [17]KEP #3962: https://github.com/kubernetes/enhancements/issues/3962

  • [18]KEP #2837: https://github.com/kubernetes/enhancements/issues/2837

  • [19]KEP #4818: https://github.com/kubernetes/enhancements/issues/4818

  • [20]KEP #4817: https://github.com/kubernetes/enhancements/issues/4817

  • [21]KEP #4827: https://github.com/kubernetes/enhancements/issues/4827

  • [22]KEP #4828: https://github.com/kubernetes/enhancements/issues/4828

  • [23]KEP #4802: https://github.com/kubernetes/enhancements/issues/4802

  • [24]KEP #4885: https://github.com/kubernetes/enhancements/issues/4885

  • [25]GitHub: https://github.com/kubernetes/kubernetes/releases/tag/v1.32.0

  • [26]Kubernetes 下载页面: https://kubernetes.io/releases/download/

  • [27]交互式教程: https://kubernetes.io/docs/tutorials/

  • [28]minikube: https://minikube.sigs.k8s.io/

  • [29]kubeadm: https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

  • [30]发布说明: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md

     

 

 
来源丨公众号:k8s技术圈(ID:kube100)
dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

 

最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告