欢迎点击下方👇关注我,记得星标哟~
文末会有重磅福利赠送
https://kubernetes.io/blog/2024/12/11/kubernetes-v1-32-release/
Kubernetes v1.32 发布主题是 “Penelope”。
如果 Kubernetes 在古希腊语中是“试点”的意思,那么在这个版本中,我们从这个起点开始,回顾 Kubernetes 过去 10 年和我们的成就:每个发布周期都是一段旅程,就像《奥德赛》中的 Penelope 一样,编织了 10 年——每天晚上都删除她白天所做的部分工作——每个版本都会添加新功能并删除其他功能。 尽管这里的目标更明确,即不断改进 Kubernetes。v1.32 是 Kubernetes 成立一周年的最后一个版本,我们想向所有在云原生海洋中漫游、克服危险和挑战的全球 Kubernetes 船员致敬:愿我们继续共同编织 Kubernetes 的未来。
对最近主要功能的更新
有关 DRA 增强功能的说明
与上一个版本一样,在此版本中,Kubernetes 项目继续对动态资源分配 (DRA) 提出许多增强功能,这是 Kubernetes 资源管理系统的关键组件。这些增强功能旨在提高需要专用硬件(如 GPU、FPGA 和网络适配器)的工作负载的资源分配灵活性和效率。这些功能对于机器学习或高性能计算应用程序等使用案例特别有用。启用 DRA 结构化参数支持的核心部分已升级到 beta 版。
节点和 sidecar 容器更新的生命周期改进
SIG Node 具有以下超越 KEP 的亮点:
systemd 看门狗功能现在用于在健康检查失败时重启 kubelet,同时还限制了给定时间段内的最大重启次数。这增强了 kubelet 的可靠性。有关更多详细信息,请参阅拉取请求 #127566。
在遇到镜像拉取退避错误的情况下,Pod 状态中显示的消息已得到改进,更加人性化,并指示有关 Pod 处于此状态的原因的详细信息。当发生镜像拉取回退时,错误将附加到 Pod 规范的字段中,并在字段中附加一个值。此更改为您提供了更多上下文,并帮助您确定问题的根本原因。有关更多详细信息,请参阅拉取请求 #127918。
sidecar 容器功能的目标是在 v1.33 中升级到 Stable。要查看剩余的工作项和用户的反馈,请参阅问题 #753 中的评论。
逐步升级到 Stable 的功能亮点
以下是 v1.32 版本发布后现在稳定的一些改进。
自定义资源域选择器
自定义资源字段选择器允许开发人员将字段选择器添加到自定义资源,从而反映内置 Kubernetes 对象的可用功能。这允许更高效、更精确地筛选自定义资源,从而促进更好的 API 设计实践。
这项工作是作为 KEP #4358 的一部分由 SIG API Machinery 完成的。
支持调整内存支持的卷的大小
此功能可以根据 Pod 资源限制动态调整内存支持的卷的大小,从而提高工作负载的可移植性和整体节点资源利用率。
这项工作是作为 KEP #1967 的一部分由 SIG Node 完成的。
绑定服务账号 Token 改进
在服务账户令牌声明中包含节点名称允许用户在授权和准入期间使用此类信息 (ValidatingAdmissionPolicy)。此外,此改进可防止服务帐户凭据成为节点的权限提升路径。
这项工作由 SIG Auth 作为 KEP #4193 的一部分完成。
结构化授权配置
可以在 API 服务器中配置多个授权方,以允许结构化授权决策,并支持 Webhook 中的 CEL 匹配条件。这项工作由 SIG Auth 作为 KEP #3221 的一部分完成。
自动删除 StatefulSet 创建的 PVC
由 StatefulSet 创建的 PersistentVolumeClaim (PVC) 在不再需要时会自动删除,同时确保在 StatefulSet 更新和节点维护期间的数据持久性。此功能简化了 StatefulSet 的存储管理,并降低了孤立 PVC 的风险。
这项工作是 SIG Apps 作为 KEP #1847 的一部分完成的。
即将进入 Beta 版的功能亮点
以下是 v1.32 版本后现已推出 Beta 版的一些改进。
Job API managed-by 机制
Jobs 的字段在 v1.32 版本中已提升为 beta 版。此功能使外部控制器(如 Kueue)能够管理作业同步,从而提供更大的灵活性并与高级工作负载管理系统集成。
这项工作由 SIG Apps 作为 KEP #4368 的一部分完成。
仅允许对配置的终端节点进行匿名身份验证
此功能允许管理员指定允许匿名请求使用哪些终端节点。例如,管理员可以选择仅允许匿名访问运行状况终端节点(如 、),同时确保阻止匿名访问其他集群终端节点或资源,即使用户错误配置了 RBAC。
这项工作是作为 KEP #4633 的一部分由 SIG Auth 完成的。
每个插件的回调函数,用于在 kube-scheduler 增强功能中准确重新排队
此功能通过每个插件的回调函数 (QueueingHint) 实现更高效的调度重试决策,从而提高调度吞吐量。现在所有插件都有 QueueingHints。
这项工作是作为 KEP #4247 的一部分由 SIG Scheduling 完成的。
从卷扩展故障中恢复
此功能允许用户通过使用较小的大小重试来从卷扩展失败中恢复。此增强功能可确保卷扩展更具弹性和可靠性,从而降低在此过程中数据丢失或损坏的风险。
这项工作是作为 KEP #1790 的一部分由 SIG Storage 完成的。
卷组快照
此功能引入了 VolumeGroupSnapshot API,它允许用户同时拍摄多个卷的快照,从而确保卷之间的数据一致性。
这项工作是作为 KEP #3476 的一部分由 SIG Storage 完成的。
结构化参数支持
动态资源分配 (DRA) 的核心部分,即结构化参数支持,已提升到 beta 版本。这允许 kube-scheduler 和 Cluster Autoscaler 直接模拟声明分配,而无需第三方驱动程序。这些组件现在可以根据集群的当前状态预测是否可以满足资源请求,而无需实际提交分配。通过消除第三方驱动程序来验证或测试分配,此功能改进了资源分配的规划和决策,从而提高了计划和扩展过程的效率。
这项工作是作为 KEP #4381 的一部分由 WG Device Management(一个包含 SIG Node、SIG Scheduling 和 SIG Autoscaling 的跨职能团队)完成的。
标签和字段选择器授权
标签和字段选择器可用于授权决策。节点授权方会自动利用这一点来限制节点仅列出或监视其 Pod。可以更新 Webhook 授权方,以根据使用的标签或字段选择器限制请求。
这项工作由 SIG Auth 作为 KEP #4601 的一部分完成。
Alpha 版新功能的亮点
这是 v1.32 版本中作为 Alpha 功能引入的一系列关键改进。
Kubernetes Scheduler 中的异步抢占
Kubernetes 调度器已通过 Asynchronous Preemption 进行了增强,该功能通过异步处理抢占操作来提高调度吞吐量。抢占可确保优先级较高的 Pod 通过驱逐优先级较低的 Pod 来获得所需的资源,但此过程以前涉及大量操作,例如调用 API 来删除 Pod,从而减慢了调度程序的速度。通过此增强功能,此类任务现在可以并行处理,从而允许调度程序继续调度其他 Pod,而不会延迟。这种改进在 Pod 流失率高或调度失败频繁的集群中特别有益,可确保更高效、更有弹性的调度过程。
这项工作是 SIG Scheduling 作为 KEP #4832 的一部分完成的。
使用 CEL 表达式更改准入策略
此功能利用 CEL 的对象实例化和 JSON Patch 策略,并结合服务器端应用的合并算法。它简化了策略定义,减少了突变冲突,增强了准入控制性能,同时为 Kubernetes 中更强大、可扩展的策略框架奠定了基础。
Kubernetes API 服务器现在支持基于通用表达式语言 (CEL) 的更改准入策略,为更改准入 Webhook 提供了一种轻量级、高效的替代方案。通过此增强功能,管理员可以使用 CEL 声明更改,例如设置标签、默认字段或使用简单的声明性表达式注入 sidecar。这种方法降低了操作复杂性,消除了对 webhook 的需求,并直接与 kube-apiserver 集成,提供了更快、更可靠的进程内变更处理。
这项工作是 SIG API Machinery 作为 KEP #3962 的一部分完成的。
Pod 级别的资源规格
此增强功能通过在 Pod 级别设置资源请求和限制,创建可供 Pod 中的所有容器动态使用的共享池,简化了 Kubernetes 中的资源管理。这对于具有资源需求波动或突发的容器的工作负载特别有价值,因为它可以最大限度地减少过度预置并提高整体资源效率。
通过在 Pod 级别利用 Linux cgroup 设置,Kubernetes 确保强制执行这些资源限制,同时使紧密耦合的容器能够更有效地协作,而不会遇到人为的约束。重要的是,此功能保持与现有容器级资源设置的向后兼容性,允许用户在不中断当前工作流程或现有配置的情况下逐步采用它。
这标志着多容器 Pod 的重大改进,因为它降低了管理跨容器资源分配的操作复杂性。它还为紧密集成的应用程序(例如 sidecar 架构)提供了性能提升,其中容器共享工作负载或依赖彼此的可用性以最佳方式执行。
这项工作由 SIG Node 作为 KEP #2837 的一部分完成。
允许 PreStop 钩子的 sleep 操作为零值
此增强功能引入了在 Kubernetes 中为 PreStop 生命周期钩子设置零秒休眠持续时间的功能,从而为资源验证和自定义提供更灵活和无操作的选项。以前,尝试为 sleep 操作定义零值会导致验证错误,从而限制其使用。通过此更新,用户可以将零秒持续时间配置为有效的睡眠设置,从而在需要时启用立即执行和终止行为。
该增强功能是向后兼容的,作为由特性门控控制的可选功能引入。对于需要 PreStop 挂钩进行验证或准入 Webhook 处理而不需要实际休眠持续时间的场景,此更改特别有用。通过与 Go 功能保持一致,此更新简化了配置并扩展了 Kubernetes 工作负载的可用性。
这项工作由 SIG Node 作为 KEP #4818 的一部分完成。
DRA:用于资源申请状态的标准化网络接口数据
此增强功能添加了一个新字段,允许驱动程序报告 ResourceClaim 中每个已分配对象的特定设备状态数据。它还建立了一种表示网络设备信息的标准化方法。
这项工作由 SIG Network 作为 KEP #4817 的一部分完成。
核心组件的新 statusz 和 flagz 端点
您可以为核心组件启用两个新的 HTTP 终端节点和 。这些通过深入了解该组件运行的版本(例如 Golang 版本)以及有关其正常运行时间的详细信息以及该组件执行时使用的命令行标志,增强了集群的可调试性;使诊断运行时和配置问题变得更加容易。
这项工作是 SIG Instrumentation 作为 KEP #4827 和 KEP #4828 的一部分完成的。
Windows 更多支持!
添加了对 Kubernetes 集群中 Windows 节点正常关闭的支持。在此版本之前,Kubernetes 为 Linux 节点提供了正常的节点关闭功能,但缺乏对 Windows 的等效支持。此增强功能使 Windows 节点上的 kubelet 能够正确处理系统关闭事件。这样做可以确保在 Windows 节点上运行的 Pod 被正常终止,从而允许在不中断的情况下重新调度工作负载。此改进增强了包含 Windows 节点的集群的可靠性和稳定性,尤其是在计划内维护或任何系统更新期间。
此外,还为具有节点的 Windows 节点添加了 CPU 和内存关联性支持,并改进了 CPU 管理器、内存管理器和拓扑管理器。
这项工作分别作为 SIG Windows 的 KEP #4802 和 KEP #4885 的一部分完成。
1.32 中的分级、弃用和移除
分级至稳定
这列出了所有已升级为稳定版(也称为正式版)的功能。有关更新的完整列表,包括新功能和从 Alpha 到 Beta 的分级,请参阅发行说明。
此版本总共包括 13 项提升为稳定版的增强功能:
- 结构化授权配置
- 绑定服务帐户令牌改进
- 自定义资源字段选择器
- 重试生成名称
- 让 Kubernetes 知道 LoadBalancer 的行为
- 为 Pod 添加的字段
- kubectl debug 中的自定义配置文件
- 内存管理器
- 支持调整内存支持的卷的大小
- 改进了拓扑管理器中的多 numa 对齐
- 将任务创建时间戳添加到任务注释
- 为 StatefulSets 和索引作业添加 Pod 索引标签
- 自动删除 StatefulSet 创建的 PVC
弃用和移除
随着 Kubernetes 的发展和成熟,功能可能会被弃用、删除或替换为更好的功能,以改善项目的整体运行状况。有关此过程的更多详细信息,请参阅 Kubernetes 弃用和删除策略。
撤回旧的 DRA 实施
增强功能 #3063 在 Kubernetes 1.26 中引入了动态资源分配 (DRA)。
但是,在 Kubernetes v1.32 中,这种 DRA 方法将发生重大变化。与原始实现相关的代码将被删除,留下 KEP #4381 作为“新”基本功能。
更改现有方法的决定源于它与 Cluster autoscaling 不兼容,因为资源可用性是不透明的,这使得 Cluster Autoscaler 和控制器的决策复杂化。新添加的 Structured Parameter 模型替换了该功能。
此删除将使 Kubernetes 能够更可预测地处理新的硬件要求和资源声明,从而绕过对 kube-apiserver 来回 API 调用的复杂性。
请参阅增强问题 #3063 以了解更多信息。
API 删除
Kubernetes v1.32 中删除了一个 API:
- FlowSchema 和 PriorityLevelConfiguration 的 API 版本已被删除。为此,您可以编辑现有清单并重写客户端软件以使用自 v1.29 起提供的版本。所有现有的持久化对象都可以通过新的 API 进行访问。flowcontrol.apiserver.k8s.io/v1beta3 中值得注意的变化包括 PriorityLevelConfiguration 字段在未指定时仅默认为 30,并且显式值 0 不会更改为 30。
有关更多信息,请参阅 API 弃用指南。
发行说明和所需的升级操作
在我们的发行说明中查看 Kubernetes v1.32 版本的完整详细信息。
知识星球年终发优惠券啦!感兴趣的读者千万不要错过这次优惠福利
福利一:《K8S容器基础培训》系列视频
福利二: K8S CKA考证资料分享
福利三:Azure考证资料大放送,包含AZ104,AZ305, AZ400等
更多云架构、K8S学习资料以及SRE学习手册,加入星球免费领取哦!
感兴趣的朋友们可以加我微信:sre_k8s,备注:云原生交流