使用 cce-autoscaling-placeholder 实现秒级弹性伸缩
更新时间:2024-06-17
组件介绍
使用 CCE 节点组并开启自动扩缩容后,当出现 Pod 由于资源不足导致调度失败时,集群会自动的进行节点扩容,整个流程通常需要若干分钟才能完成,当出现流量突发时,分钟级的扩容速度不能快速满足业务要求。本文介绍通过 K8S 的 PriorityClass 实现 Pod 占位,从而能在 CCE 上实现秒级伸缩,用以应对流量突发的场景。
实现原理
cce-autoscaling-placeholder 利用低优先级的 Pod 对资源进行提前占位,预留部分资源作为缓冲,当需要扩容 Pod 时,高优先级的 Pod 可以快速抢占低优先级 Pod 资源进行调度,而低优先级的 cce-autoscaling-placeholder 的 Pod 则会被 "抢占",状态变成 Pending,如果配置了节点组并启用弹性伸缩,就会触发节点的扩容。
这样,由于有了一些资源作为缓冲,即使节点扩容慢,也能保证一些 Pod 能够快速扩容并调度上,实现秒级伸缩。要调整预留的缓冲资源多少,可根据实际需求调整 cce-autoscaling-placeholder 的 request 或副本数。
操作步骤
- 创建节点组,并开启自动扩缩容,参考:CCE 节点组及自动扩缩容。
- 进入 Helm 模板->百度智能云模板,部署 cce-autoscaling-placeholder 插件,如下:
按照需求修改各参数,如下:
- 试创建 Nginx Pod,可以发现 Nginx Pod 能快速抢占 Placeholder Pod 从而快速启动,Placeholder 会触发新的节点扩容,如下:
参数含义
cce-autoscaling-placeholder values.yaml 中各参数含义如下:
参数名称 | 参数含义 | 说明 |
---|---|---|
replicaCount | Pod 数 | 默认 3 |
imageID | 镜像名称, 通用 pause | |
cpu | 单个 Pod 占用 cpu | - |
mem | 单个 Pod 占用 mem | - |
nodeSelector | 自定义 nodeSelector | 推荐和 InstanceGroup 一致 |
tolerations | 自定义 tolerations | - |
affinity | 自定义 affinity | - |