Docker Autoscaler 执行器(实验阶段)

  • 引入于极狐GitLab Runner 15.11.0,当前处于实验阶段
  • 在极狐GitLab Runner 16.6 中改为 Beta。
  • 在极狐GitLab Runner 17.1 中改为 GA。

Docker Autoscaler 执行器是一个支持弹性伸缩的 Docker 执行器,它按需创建实例以适应 Runner manager 处理的作业。

Autoscaler 使用 fleeting 插件。fleeting 抽象了一组弹性伸缩的实例,并使用支持不同云提供商(例如 GCP、AWS 和 Azure)的插件。这允许按需创建实例以适应 Runner manager 处理的作业。

安装 fleeting 插件

为目标平台安装插件,详情可以查看安装 fleeting 插件

配置 Docker Autoscaler

Docker Autoscaler 执行期封装了 Docker 执行器,支持所有 Docker 执行器选项和功能。

要配置 Docker Autoscaler,请在 config.toml 中:

示例:每个实例有一个作业使用 AWS 弹性伸缩群组

先决条件:

  • 安装了装有 Docker 引擎的 AMI。
  • 一个 AWS 弹性伸缩群组。对于伸缩策略,请使用“无”,因为 Runner 会处理伸缩。
  • 具有正确权限的 IAM 策略。

此配置支持:

  • 每个实例的容量为 1
  • 使用次数为 1
  • 闲置规模为 5
  • 空闲时间为 20 分钟
  • 最大实例数为 10

通过将容量和使用计数都设置为 1,每个作业都获得了一个安全的临时实例,该实例不会被其他作业所影响。 作业一旦完成,执行它的实例就会立即被删除。

空闲规模为 5 时,Runner 试着保留 5 个完整实例(因为每个实例的容量为 1),以可用于将来的需求。 这些实例至少停留 20 分钟。

Runner concurrent 字段设置为 10(最大实例数 * 每个实例的容量)。

concurrent = 10

[[runners]]
name = "docker autoscaler example"
url = "https://gitlab.com"
token = "<token>"
shell = "sh"                                        # use powershell or pwsh for Windows AMIs

# uncomment for Windows AMIs when the Runner manager is hosted on Linux
# environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]

executor = "docker-autoscaler"

# Docker Executor config
[runners.docker]
image = "busybox:latest"

# Autoscaler config
[runners.autoscaler]
plugin = "fleeting-plugin-aws"

capacity_per_instance = 1
max_use_count = 1
max_instances = 10

[runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
name             = "my-docker-asg"               # AWS Autoscaling Group name
profile          = "default"                     # optional, default is 'default'
config_file      = "/home/user/.aws/config"      # optional, default is '~/.aws/config'
credentials_file = "/home/user/.aws/credentials" # optional, default is '~/.aws/credentials'

[runners.autoscaler.connector_config]
username          = "ec2-user"
use_external_addr = true

[[runners.autoscaler.policy]]
idle_count = 5
idle_time = "20m0s"

示例:每实例例有一个作业使用 GCP 实例群组

先决条件:

  • 安装了 Docker Engine 的虚拟机镜像,例如 COS
  • 实例群组。对于”弹性伸缩模式”,选择”不弹性伸缩”,因为 Runner 会处理伸缩。
  • 具有正确权限的 IAM 策略。

此配置支持:

  • 每个实例的容量为 1
  • 使用次数为 1
  • 空闲规模为 5
  • 空闲时间为 20 分钟
  • 最大实例数为 10

通过将容量和使用计数都设置为 1,每个作业都会获得一个安全的临时实例,该实例不受其他作业影响。作业完成后,执行该作业的实例将立即被删除。

空闲规模为 5 时,Runner 尝试保留 5 个完整实例(因为每个实例的容量为 1)以满足未来需求。这些实例会停留至少 20 分钟。

Runner concurrent 字段设置为 10(最大实例数 * 每个实例的容量)。

concurrent = 10

[[runners]]
  name = "docker autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # use powershell or pwsh for Windows Images

  # uncomment for Windows Images when the Runner manager is hosted on Linux
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]

  executor = "docker-autoscaler"

  # Docker Executor config
  [runners.docker]
    image = "busybox:latest"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "fleeting-plugin-googlecompute"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-docker-instance-group" # GCP Instance Group name
      project          = "my-gcp-project"
      zone             = "europe-west1"
      credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # optional, default is '~/.config/gcloud/application_default_credentials.json'

    [runners.autoscaler.connector_config]
      username          = "runner"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

示例:每个实例有一个作业使用 Azure 扩容设置

前提条件:

  • 安装了 Docker Engine 的虚拟机镜像。
  • 一个 Azure 扩容设置,其中的自动缩放策略设置为 manual。Runner 处理缩放。

此配置支持:

  • 每个实例的容量为 1
  • 使用次数为 1
  • 空闲规模为 5
  • 空闲时间为 20 分钟
  • 最大实例数为 10

通过将容量和使用计数都设置为 1,每个作业都会获得一个安全的临时实例,该实例不受其他作业影响。作业完成后,执行该作业的实例将立即被删除。

空闲规模为 5 时,Runner 尝试保留 5 个完整实例(因为每个实例的容量为 1)以满足未来需求。这些实例会停留至少 20 分钟。

Runner concurrent 字段设置为 10(最大实例数 * 每个实例的容量)。

concurrent = 10

[[runners]]
  name = "docker autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # use powershell or pwsh for Windows AMIs

  # uncomment for Windows AMIs when the Runner manager is hosted on Linux
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]

  executor = "docker-autoscaler"

  # Docker Executor config
  [runners.docker]
    image = "busybox:latest"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "azure" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-azure"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name = "my-docker-scale-set"
      subscription_id = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
      resource_group_name = "my-resource-group"

    [runners.autoscaler.connector_config]
      username = "azureuser"
      password = "my-scale-set-static-password"
      use_static_credentials = true
      timeout = "10m"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"