本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Kubernetes v1.30 抢先看
快速浏览:Kubernetes v1.30 中激动人心的变化
新的一年,新的 Kubernetes 发布。我们正处于发布周期的一半,v1.30 版本将带来一些有趣且激动人心的增强功能。从 Alpha 阶段的全新功能,到逐渐稳定的成熟功能,再到期待已久的改进,此版本中有值得每个人关注的内容!
在正式发布之前,为了让你提前解渴,我们先来一睹本周期中我们最兴奋的增强功能!
Kubernetes v1.30 的主要变化
动态资源分配的结构化参数(KEP-4381)
动态资源分配在 v1.26 中作为 Alpha 功能被添加到 Kubernetes 中。它定义了一种替代传统设备插件 API 的方法来请求访问第三方资源。按照设计,动态资源分配使用的资源参数对于 Kubernetes 核心是完全不透明的。这种方法给集群自动扩缩器(CA)或任何需要为一组 Pod(例如作业调度器)做决策的高级控制器带来了问题。它无法模拟随时间分配或取消分配申领(Claim)的效果。只有第三方 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)
将通用表达式语言(CEL)集成到 Kubernetes 的准入控制中,引入了一种更动态、更具表现力的评估准入请求的方式。此功能允许通过 Kubernetes API 直接定义和实施复杂的、细粒度的策略,从而在不影响性能或灵活性的情况下增强安全和治理能力。
将 CEL 添加到 Kubernetes 准入控制中,使集群管理员能够制定复杂的规则,这些规则可以根据集群的期望状态和策略来评估 API 请求的内容,而无需借助基于 Webhook 的访问控制器。这种级别的控制对于维护集群操作的完整性、安全性和效率至关重要,使 Kubernetes 环境更加健壮,并能适应各种用例和需求。有关使用 CEL 进行准入控制的更多信息,请参阅 ValidatingAdmissionPolicy 的 API 文档。
我们希望你和我们一样对这次发布感到兴奋。请留意几周后发布的官方博客,以获取更多亮点!