Kubernetes v1.30 预览
快速浏览:Kubernetes v1.30 中的激动人心的变化
新年伊始,Kubernetes 迎来新的版本。我们已经完成发布周期的一半,v1.30 中将会出现许多有趣和令人兴奋的增强功能。从全新的 alpha 功能到已确立的稳定功能,再到期待已久的改进,此版本都有值得每个人关注的内容!
为了让您在正式发布之前有所期待,这里先一睹我们在此周期中最激动人心的增强功能!
Kubernetes v1.30 的主要变化
用于动态资源分配的结构化参数 (KEP-4381)
动态资源分配作为 alpha 功能在 v1.26 中添加到 Kubernetes。它定义了用于请求访问第三方资源的传统设备插件 API 的替代方案。按照设计,动态资源分配使用对核心 Kubernetes 完全不透明的资源参数。对于集群自动扩缩器 (CA) 或任何需要为一组 Pod 做出决策的更高级别的控制器(例如,作业调度器)来说,这种方法会带来问题。它无法模拟随时间推移分配或取消分配声明的效果。只有第三方 DRA 驱动程序才能获取此信息。
动态资源分配的结构化参数是对原始实现的一种扩展,它通过构建一个框架来支持使这些声明参数不那么不透明来解决此问题。驱动程序不必自己处理所有声明参数的语义,而是可以管理资源并使用 Kubernetes 预定义的特定“结构化模型”来描述它们。这将允许了解此“结构化模型”的组件对这些资源做出决策,而无需将其外包给某些第三方控制器。例如,调度程序可以快速分配声明,而无需与动态资源分配驱动程序进行来回通信。此版本完成的工作集中在定义必要的框架以启用不同的“结构化模型”并实现“命名资源”模型。此模型允许列出单个资源实例,并且与传统的设备插件 API 相比,增加了通过属性单独选择这些实例的功能。
节点内存交换支持 (KEP-2400)
在 Kubernetes v1.30 中,Linux 节点上的内存交换支持对其工作方式进行了重大更改 - 重点是提高系统稳定性。在之前的 Kubernetes 版本中,NodeSwap
功能门默认禁用,启用后,它使用 UnlimitedSwap
行为作为默认行为。为了实现更好的稳定性,UnlimitedSwap
行为(可能会损害节点稳定性)将在 v1.30 中删除。
更新的、仍处于 beta 阶段的 Linux 节点交换支持将默认可用。但是,默认行为是将节点设置为 NoSwap
(而不是 UnlimitedSwap
)模式。在 NoSwap
模式下,kubelet 支持在启用交换空间的节点上运行,但 Pod 不会使用任何页面文件。您仍然需要为 kubelet 设置 --fail-swap-on=false
才能在该节点上运行。但是,最大的变化是另一种模式:LimitedSwap
。在此模式下,kubelet 实际上使用该节点上的页面文件,并允许 Pod 将其部分虚拟内存分页到外部。容器(及其父 Pod)的交换访问权限不会超出其内存限制,但如果可用,系统仍然可以使用交换空间。
Kubernetes 节点特别兴趣小组 (SIG Node) 还将更新文档,以帮助您了解如何根据最终用户、贡献者和更广泛的 Kubernetes 社区的反馈使用修改后的实现。
有关 Kubernetes 中 Linux 节点交换支持的更多详细信息,请阅读之前的博客文章或节点交换文档。
在 Pod 中支持用户命名空间 (KEP-127)
用户命名空间是一项仅限 Linux 的功能,可以更好地隔离 Pod,以防止或缓解多个评级为高/危急的 CVE,包括 2024 年 1 月发布的 CVE-2024-21626。在 Kubernetes 1.30 中,对用户命名空间的支持正在迁移到 beta 版,现在支持带有和不带有卷的 Pod、自定义 UID/GID 范围等等!
结构化授权配置 (KEP-3221)
对结构化授权配置的支持正在迁移到 beta 版,并且将默认启用。此功能允许创建具有多个 Webhook 的授权链,这些 Webhook 具有明确定义的参数,可按特定顺序验证请求,并允许进行细粒度控制(例如,在失败时显式拒绝)。配置文件方法甚至允许您指定 CEL 规则来预先筛选请求,然后再将其分派到 Webhook,从而帮助您防止不必要的调用。当配置文件被修改时,API 服务器还会自动重新加载授权程序链。
您必须使用 --authorization-config
命令行参数指定该授权配置的路径。如果您想继续使用命令行标志而不是配置文件,这些标志将继续按原样工作。要访问新的授权 Webhook 功能(如多个 Webhook、失败策略和预筛选规则),请切换到将选项放入 --authorization-config
文件中。从 Kubernetes 1.30 开始,配置文件格式为 beta 级别,并且仅需要指定 --authorization-config
,因为功能门默认启用。在授权文档中提供了具有所有可能值的配置示例。有关更多详细信息,请阅读授权文档。
基于容器资源的 Pod 自动扩缩 (KEP-1610)
基于 ContainerResource
指标的水平 Pod 自动扩缩将在 v1.30 中升级到稳定版。HorizontalPodAutoscaler 的此新行为允许您根据单个容器的资源使用情况(而不是 Pod 的聚合资源使用情况)配置自动扩缩。有关更多详细信息,请参阅我们之前的文章,或阅读容器资源指标。
用于准入控制的 CEL (KEP-3488)
在 Kubernetes 中集成用于准入控制的通用表达式语言 (CEL) 引入了一种更动态和更具表达力的方式来评估准入请求。此功能允许直接通过 Kubernetes API 定义和强制执行复杂、细粒度的策略,从而在不影响性能或灵活性的情况下增强安全性和治理功能。
CEL 添加到 Kubernetes 准入控制中,使集群管理员能够制定复杂的规则,这些规则可以根据集群的所需状态和策略评估 API 请求的内容,而无需求助于基于 Webhook 的访问控制器。这种控制级别对于维护集群操作的完整性、安全性和效率至关重要,从而使 Kubernetes 环境更加强大并适应各种用例和要求。有关使用 CEL 进行准入控制的更多信息,请参阅API 文档,了解 ValidatingAdmissionPolicy。
我们希望您和我们一样对此版本感到兴奋。请密切关注几周后的官方发布博客,了解更多亮点!