Docker Autoscaler 执行器(实验阶段)
引入于极狐GitLab Runner 15.11.0,当前处于实验阶段。
Docker Autoscaler 执行器是一个支持弹性伸缩的 Docker 执行器,它按需创建实例以适应 Runner manager 处理的作业。
Autoscaler 使用 fleeting 插件。fleeting
抽象了一组弹性伸缩的实例,并使用支持不同云提供商(例如 GCP、AWS 和 Azure)的插件。这允许按需创建实例以适应 Runner manager 处理的作业。
准备环境
要准备弹性伸缩环境,请首先选择一个 fleeting 插件,该插件将为您的目标平台启用伸缩功能。
AWS 和 GCP fleeting 插件处于实验阶段。
您可以在此处找到我们的其他官方插件。
安装
::Tabs
:::TabTitle AWS
安装 AWS 插件:
- 为您的主机平台下载二进制文件。
- 确保可以通过 PATH 环境变量发现插件二进制文件。
:::TabTitle GCP
安装 GCP 插件:
- 为您的主机平台下载二进制文件。
- 确保可以通过 PATH 环境变量发现插件二进制文件。
::EndTabs
配置
Docker Autoscaler 执行器包装了 Docker 执行器,支持所有 Docker 执行器选项和功能。要启用 Autoscaler,请将执行器定义为 docker-autoscaler
。
- Docker 执行器配置
- Autoscaler 配置每个示例有一个作业使用 AWS 弹性伸缩群组
示例
::Tabs
:::TabTitle AWS
示例:每个示例有一个作业使用 AWS 弹性伸缩群组
先决条件:
此配置支持:
- 每个实例的容量为 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"
:::TabTitle GCP
示例:每个示例有一个作业使用 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"
::EndTabs