容器服务集群支持基于 Karpenter 的节点即时弹性伸缩,实现多规格弹性伸缩功能。本文介绍如何配置节点即时弹性伸缩。
为了提高节点池扩容的成功率,防止由于单一规格库存不足导致扩容失败。同时提高大规模集群下的节点扩容效率,容器服务集群支持基于 Karpenter 的节点即时弹性伸缩。Karpenter 支持过滤并选择满足 Pod 调度要求的多个规格,并实现多规格的节点扩容。
多规格扩容流程为:Karpenter 对 Pending Pod 进行模拟调度并根据节点池中设定的规格范围,筛选符合要求的节点规格。最后使用筛选出来的节点规格和数量,扩容出对应的实例。
- cluster-autoscaler 组件和 karpenter 组件互斥,不能同时安装。
- karpenter 组件仅支持 Kubernetes 版本为 v1.26 及以上版本的集群。
- 安装组件时配置的弹性伸缩规则,与本文中的配置相同。即弹性伸缩配置,有两种配置入口,两边的配置会相互覆盖。
- 已安装 karpenter 组件,详情请参见 安装组件。
- 新创建节点池时,允许直接启用弹性伸缩。详情请参见 创建节点池。
-
- 已创建的节点池,通过编辑节点池,启用弹性伸缩。详细操作,请参见 编辑节点池。
- 在集群管理页面的左侧导航栏中选择 节点池,单击 弹性伸缩配置。
-
- 在 弹性伸缩配置 页面中,单击 编辑规则,配置弹性伸缩规则参数。
说明
该处显示的 弹性伸缩规则 页面配置,与安装组件时的配置一致。若编辑规则,表示更改安装组件时配置的规则。
-
配置完成后,您可以查看弹性伸缩规则和已开启弹性伸缩的节点池。
当集群中的节点资源不足,导致 Pod Pending 时,系统会根据 Pending Pod 的所需资源,自动扩容集群中不同规格的节点。保证资源满足所需的前提下,减少资源浪费。
例如在本例中,Pending Pod 申请的 CPU 资源分别为 3 Core 和 5 Core,同时,节点池中包含多个规格的节点,分别为 4vCPU 16GiB 和 8vCPU 32GiB。扩容结束后,单击节点池名称,进入节点池详情,选择 伸缩记录 页签,查看该节点池的自动伸缩记录。可以看到扩容了 2 个节点。
集群管理页面的左侧导航栏中选择 节点,在节点列表中查看扩容新节点,节点规格分别为 4vCPU 16GiB 和 8vCPU 32GiB,实现了多规格的节点扩容。
说明
同样场景下,使用 CA 进行扩容时,节点池会根据多规格的先后顺序(即优先级),选择一个节点规格进行扩容。当高优先级规格库存不足或其他原因无法创建成功时,才会按顺序使用较低优先级的规格扩容。这种串行机制导致扩容时间较长,并可能造成资源浪费(例如:扩容了 2 个 8vCPU 32GiB 规格的节点)。
扩容完成后,删除导致扩容的 Pod,由于节点的资源请求值(Request)低于阈值(可配,默认 50%),且该节点上的其他 Pod 可以被调度到其他节点。因此等待 缩容触发时延 时间后,系统自动完成节点缩容。选择 伸缩记录 页签,查看该节点池的自动伸缩记录。可以看到缩容了 2 个节点。