首页/开发/CI/CD 与发布速查/Runner 弹性伸缩
流水线设计54 条

Runner 弹性伸缩

按队列水位自动增减构建机:GitLab Runner Autoscaler(docker-autoscaler / instance 执行器)与云上自托管 Runner 均支持按需扩容。

CI/CD 与发布速查开发更新于 2026-10-13

Runner 弹性伸缩是什么

按队列水位自动增减构建机:GitLab Runner Autoscaler(docker-autoscaler / instance 执行器)与云上自托管 Runner 都能按需扩容。目标是在排队时间与成本之间取平衡:保留少量热机,其余按作业需求拉起。伸缩节奏由空闲下限、上限与空闲时间共同决定,冷启动速度则取决于机器镜像与依赖预置程度。

基本信息

GitLabRunner 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
弹性机冷启动慢(镜像预热、依赖下载):把常用镜像与依赖预置进机器镜像可缩短等待。
下限不是越小越省:全部缩到零后第一波作业排队等机器,平均时长反而上升。

伸缩调优要点

  • 空闲时间调大:短暂空闲不缩容,减少冷启动与抖动
  • 镜像瘦身:机器镜像越小拉起越快,剔除无关软件包
  • 队列告警:等待时长达阈值先扩上限并通知负责人
  • 池分离:大作业与小作业不同池,避免互相排队
上限同时也是成本阀值:达到上限后新作业只能排队,容量与预算的取舍写进运行手册。

易错点

  • 只扩容不设上限:突发流水线推高云账单,配置 max_instances 并接告警
  • 缩容过于激进取掉热机:下一个作业等冷启动,平均时长反而上升
  • 实例用完不回收:复用次数配大后脏环境拖慢构建,按隔离需求定期换新
  • 缓存与弹性机脱节:每次拉起都从零下载依赖,把缓存服务或镜像预置接进去
  • 空闲时间过短:作业间隙反复缩容又拉起,抖动放大,按队列波动周期设置

数据来源与参考

  • GitLab Docs《Runner autoscaling》
  • GitHub Docs《Self-hosted runners》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌