如何在单个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
相关产品推荐
相关产品推荐

