Runner 弹性伸缩是什么
按队列水位自动增减构建机:GitLab Runner Autoscaler(docker-autoscaler / instance 执行器)与云上自托管 Runner 都能按需扩容。目标是在排队时间与成本之间取平衡:保留少量热机,其余按作业需求拉起。伸缩节奏由空闲下限、上限与空闲时间共同决定,冷启动速度则取决于机器镜像与依赖预置程度。
基本信息
| GitLab | Runner Autoscaler:空闲下限、上限与空闲时间决定伸缩节奏 |
|---|---|
| GitHub | 自托管 Runner 结合云弹性组/伸缩集;也有规格更大的托管 Runner |
| 目标 | 排队时间与成本平衡:保留少量热机,其余按需拉起 |
| 关键参数 | capacity_per_instance、max_use_count、max_instances |
| 冷启动 | 镜像预热与依赖预置决定拉起后多久可用 |
典型使用场景
- 突发流水线:合并高峰队列积压,按需扩容消化
- 成本控制:夜间缩容到下限,白天随用量扩大
- 大规格作业:构建重活临时拉起大机型,完成即回收
- 隔离需求:敏感项目用独立伸缩组,不与他人混跑
- 多平台:Linux 与 Windows 各自伸缩池,避免交叉等待
- 缓存预热:常用依赖打进机器镜像,缩短首次构建
Autoscaler 要点
Autoscaler 要点
[[runners]]
executor = "docker-autoscaler"
[runners.autoscaler]
capacity_per_instance = 1
max_use_count = 1
max_instances = 20参数取值建议
| 参数 | 作用 | 取值建议 |
|---|---|---|
| 空闲下限 | 常驻热机数 | 按基准并发定 |
| max_instances | 上限,防账单失控 | 按预算设并接告警 |
| capacity_per_instance | 单机并发作业数 | 构建重活设 1 |
| max_use_count | 单机复用次数上限 | 为隔离设 1 |
弹性机冷启动慢(镜像预热、依赖下载):把常用镜像与依赖预置进机器镜像可缩短等待。
下限不是越小越省:全部缩到零后第一波作业排队等机器,平均时长反而上升。
伸缩调优要点
- 空闲时间调大:短暂空闲不缩容,减少冷启动与抖动
- 镜像瘦身:机器镜像越小拉起越快,剔除无关软件包
- 队列告警:等待时长达阈值先扩上限并通知负责人
- 池分离:大作业与小作业不同池,避免互相排队
上限同时也是成本阀值:达到上限后新作业只能排队,容量与预算的取舍写进运行手册。