You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单个GitLab Runner Manager上配置两组EC2自动扩缩容Runner

在同一台GitLab Runner Manager上配置多组独立自动扩缩容Runner

你完全可以在单台runner_manager上配置多组独立的自动扩缩容Runner,只需要在config.toml中添加额外的[[runners]]配置区块即可,每个区块对应一组独立的Runner配置,共享服务器的Docker+Machine资源。

操作步骤

1. 获取第二组Runner的注册令牌

在GitLab后台(实例/群组/项目级别)创建新的Runner,生成专属的注册令牌。这个令牌和现有Runner的token完全独立,用于区分两组Runner的身份。

2. 修改config.toml添加新Runner配置

复制现有[[runners]]区块,修改以下关键配置项,确保两组Runner的配置完全隔离:

  • name:设置独特的名称,方便在GitLab后台识别
  • token:替换为新获取的注册令牌
  • limit:设置该组Runner允许创建的最大EC2实例数
  • runners.docker.image:如果需要不同的基础镜像
  • runners.machine.MachineName:修改命名规则,避免实例名称冲突
  • runners.machine.MachineOptions:调整EC2配置(实例类型、AMI、子网、安全组等)
  • runners.machine下的空闲策略和自动扩缩容规则

修改后的示例配置

concurrent = 20  # 调整全局并发上限,适配两组Runner的总需求
check_interval = 30

# 第一组原有Runner配置
[[runners]]
  name = "runner-manager-standard"
  limit = 3
  url = "https://git.someURL.com"
  id = 18
  token = "xxxxxxxxxxxxxxxxxxxx"
  token_obtained_at = 2023-01-12T06:08:06Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker+machine"
  [runners.docker]
    tls_verify = false
    image = "alpine"
    privileged = true
    oom_kill_disable = false
    shm_size = 0
  [runners.machine]
    IdleCount = 1
    IdleScaleFactor = 0.0
    IdleCountMin = 0
    IdleTime = 1800
    MachineDriver = "amazonec2"
    MachineName = "runners-standard-%s"
    MachineOptions = [
      "amazonec2-region=us-east-1",
      "amazonec2-vpc-id=vpc-xxxxxxxxxxxxxxxxxx",
      "amazonec2-subnet-id=subnet-xxxxxxxxxxxxxxxxxx",
      "amazonec2-ami=ami-xxxxxxxxxxxxxxxxxx",
      "amazonec2-security-group=runner-sg",
      "amazonec2-instance-type=t3.large",
      "amazonec2-root-size=100",
    ]
  [[runners.machine.autoscaling]]
    Periods = ["* * 1-17 * * mon-fri *"]
    IdleCount = 1
    IdleTime = 3600
    Timezone = "UTC"
  [[runners.machine.autoscaling]]
    Periods = ["* * * * * sat,sun *"]
    IdleCount = 0
    IdleTime = 3600
    Timezone = "UTC"

# 第二组新Runner配置(示例:高内存型)
[[runners]]
  name = "runner-manager-highmem"
  limit = 2
  url = "https://git.someURL.com"
  token = "yyyyyyyyyyyyyyyyyyyy"  # 替换为新的注册令牌
  executor = "docker+machine"
  [runners.docker]
    tls_verify = false
    image = "ubuntu:22.04"  # 使用不同的基础镜像
    privileged = true
    oom_kill_disable = true
    shm_size = 4096
  [runners.machine]
    IdleCount = 0
    IdleScaleFactor = 0.0
    IdleCountMin = 0
    IdleTime = 3000
    MachineDriver = "amazonec2"
    MachineName = "runners-highmem-%s"  # 独特的实例命名规则
    MachineOptions = [
      "amazonec2-region=us-east-1",
      "amazonec2-vpc-id=vpc-xxxxxxxxxxxxxxxxxx",
      "amazonec2-subnet-id=subnet-yyyyyyyyyyyyyyyyyy",  # 使用不同子网
      "amazonec2-ami=ami-yyyyyyyyyyyyyyyyyy",  # 使用不同AMI
      "amazonec2-security-group=runner-highmem-sg",  # 使用不同安全组
      "amazonec2-instance-type=t3.xlarge",  # 高内存实例类型
      "amazonec2-root-size=150",
    ]
  [[runners.machine.autoscaling]]
    Periods = ["* * 9-18 * * mon-fri *"]
    IdleCount = 1
    IdleTime = 3600
    Timezone = "UTC"
  [[runners.machine.autoscaling]]
    Periods = ["* * * * * sat,sun *"]
    IdleCount = 0
    IdleTime = 1800
    Timezone = "UTC"

关键注意事项

  • 全局concurrent:控制所有Runner的总并发任务数,需要根据runner_manager的资源(CPU、内存)和EC2配额合理调整
  • 每个Runner的limit:限制该组能创建的最大EC2实例数,避免超出AWS实例配额
  • 实例命名规则:确保MachineName唯一,方便在AWS控制台区分不同组的Runner实例
  • 配置生效:修改完config.toml后,需要重启GitLab Runner服务:
    sudo gitlab-runner restart
    
  • GitLab后台管理:重启后,GitLab后台会显示两个独立的Runner条目,可分别进行启用/禁用、标签管理等操作

内容的提问来源于stack exchange,提问作者Sean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:25:55