本文发表已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发表以来是否已不准确。
Kubernetes v1.30 一览
快速一览:Kubernetes v1.30 中的激动人心变化
新的一年,新的 Kubernetes 版本。我们已完成发布周期的一半,v1.30 中将带来许多有趣且令人兴奋的增强功能。从全新的 Alpha 特性到升级到 Stable 的成熟特性,再到期待已久的改进,这个版本中有每个人都应该关注的内容!
在官方发布之前,这里提前预览一下我们在这个周期中最兴奋的增强功能!
Kubernetes v1.30 的重大变化
动态资源分配的结构化参数 (KEP-4381)
动态资源分配 作为 Alpha 特性在 v1.26 中被添加到 Kubernetes。它定义了一种替代传统 device-plugin API 的方式,用于请求访问第三方资源。根据设计,动态资源分配使用的资源参数对于 Kubernetes 核心完全是不透明的。这种方法给 Cluster Autoscaler (CA) 或任何需要对一组 Pod(例如作业调度器)做出决策的高层控制器带来了问题。它无法模拟随着时间推移分配或解除分配 Claims 的影响。只有第三方 DRA 驱动程序才拥有执行此操作所需的信息。
动态资源分配的结构化参数是对原始实现的一个扩展,通过构建一个框架来支持使这些 Claim 参数不那么不透明,从而解决了这个问题。驱动程序无需自行处理所有 Claim 参数的语义,而是可以使用 Kubernetes 预先定义的特定“结构化模型”来管理和描述资源。这将允许了解此“结构化模型”的组件能够对这些资源做出决策,而无需将其外包给某些第三方控制器。例如,调度器可以快速分配 Claims,而无需与动态资源分配驱动程序进行来回通信。此版本所做的工作重点是定义启用不同“结构化模型”和实现“命名资源”模型的必要框架。此模型允许列出单个资源实例,并且与传统的 device plugin 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 的 Node 特别兴趣小组 (SIG Node) 也将更新文档,根据最终用户、贡献者和更广泛的 Kubernetes 社区的反馈,帮助你理解如何使用修订后的实现。
阅读之前的博客文章或节点交换文档以获取有关 Kubernetes 中 Linux 节点交换支持的更多详细信息。
支持 Pod 中的用户命名空间 (KEP-127)
用户命名空间 是一项仅限 Linux 的功能,可以更好地隔离 Pod,以预防或缓解多个高/危漏洞,包括 2024 年 1 月发布的 CVE-2024-21626。在 Kubernetes 1.30 中,用户命名空间支持正在迁移到 Beta 阶段,现在支持带卷和不带卷的 Pod、自定义 UID/GID 范围等等!
结构化授权配置 (KEP-3221)
对结构化授权配置的支持正在迁移到 Beta 阶段,并将默认启用。此特性支持创建授权链,该授权链包含多个具有明确定义参数的 Webhook,这些 Webhook 按特定顺序验证请求,并允许进行细粒度控制,例如在失败时显式拒绝。配置文件方法甚至允许你指定 CEL 规则来预过滤请求,然后再将其分派到 Webhook,帮助你避免不必要的调用。API Server 在配置文件修改时也会自动重新加载授权链。
你必须使用 --authorization-config
命令行参数指定授权配置文件的路径。如果你想继续使用命令行标志而不是配置文件,它们将继续按原样工作。要访问新的授权 Webhook 功能,例如多个 Webhook、故障策略和预过滤规则,请切换到将选项放入 --authorization-config
文件中。从 Kubernetes 1.30 开始,配置文件格式为 Beta 级别,并且由于功能门默认启用,只需指定 --authorization-config
。 授权文档中提供了一个包含所有可能值的示例配置。有关更多详细信息,请阅读授权文档。
基于容器资源的 Pod 自动扩缩 (KEP-1610)
基于 ContainerResource
指标的水平 Pod 自动扩缩将在 v1.30 中升级到 Stable 阶段。HorizontalPodAutoscaler 的这一新行为允许你根据单个容器的资源使用量而不是 Pod 的总资源使用量来配置自动扩缩。更多详细信息请参阅我们之前的文章,或阅读容器资源指标。
用于准入控制的 CEL (KEP-3488)
在 Kubernetes 准入控制中集成通用表达式语言 (CEL) 引入了一种更动态、更富有表现力的方式来评估准入请求。此特性允许直接通过 Kubernetes API 定义和执行复杂、细粒度的策略,在不影响性能或灵活性的情况下增强安全和治理能力。
CEL 加入 Kubernetes 准入控制使得集群管理员能够制定复杂的规则,这些规则可以根据集群的预期状态和策略评估 API 请求的内容,而无需借助基于 Webhook 的访问控制器。这种程度的控制对于维护集群操作的完整性、安全性和效率至关重要,使得 Kubernetes 环境更加健壮,并能适应各种用例和需求。有关在准入控制中使用 CEL 的更多信息,请参阅 ValidatingAdmissionPolicy 的API 文档。
我们希望你和我们一样对这个版本感到兴奋。请在几周后关注官方发布博客,了解更多亮点!