GitLab fleeting plugin for OpenStack.
https://docs.gitlab.com/runner/executors/docker_autoscaler.html
The following parameters are supported:
Parameter | Type | Description |
---|---|---|
cloud |
string | Name of the cloud config from clouds.yaml to use |
clouds_config |
string | Optional. Path to clouds.yaml |
name |
string | Name of the Auto Scaling Group (unique string that used to find instances) |
nova_microversion |
string | Optional. Microversion for the Openstack Nova client. Default 2.79 (which should be ok for Train+) |
boot_time |
string | Optional. Maximum wait time for instance to boot up. During that time plugin check Cloud-Init signatures. |
use_ignition |
string | Enable Fedora CoreOS / Flatcar Linux Ignition support |
server_spec |
object | Server spec used to create instances. See: Compute API |
Parameter | Default |
---|---|
os |
linux |
protocol |
ssh |
username |
unset |
use_static_credentials |
false |
-
You should create a special user (recommended) and project (optional), then export clouds.yaml with credentials for that cloud.
-
You may create a tenant network for workers, in that case don't forget to add a router. In that case manager VM should have two ports: external and that tenant network, so it will be able to connect to the worker instances.
-
You should upload a special image with container runtime installed in it. For example we use Flatcar Linux
-
(Optional) You should generate SSH keypair which will be used by manager instance to connect to workers. Public key must be added to Nova from the user.
Note: that key required only for Cloud-Init based images. For a Flatcar plugin can generate dynamic ssh key and pass it via Ignition script.
Preparation of the resources could be done by Heat using heat/stack.yaml. But consider it as an example.
concurrent = 16
check_interval = 0
shutdown_timeout = 0
log_level = "info"
[session_server]
session_timeout = 1800
listen_address = ":8093"
advertise_address = "mgr.scalingrunner.cloud:8093"
[[runners]]
name = "manager"
url = "https://gitlab.com"
token = "token"
executor = "docker-autoscaler"
output_limit = 10240
shell = "bash"
environment = [
"FF_NETWORK_PER_BUILD=1"
]
[runners.cache]
Type = "s3"
Shared = true
[runners.cache.s3]
ServerAddress = "s3.foo.bar"
AccessKey = "access"
SecretKey = "secret"
BucketName = "cache"
[runners.docker]
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = true
shm_size = 0
network_mtu = 0
# host = "unix:///run/user/1000/podman/podman.sock"
# tls_verify = false
# image = "quay.io/podman/stable"
image = "almalinux:9"
privileged = true
pull_policy = ["always", "always"]
[runners.autoscaler]
capacity_per_instance = 1
max_use_count = 10
max_instances = 16
plugin = "fleeting-plugin-openstack"
[runners.autoscaler.plugin_config]
cloud = "runner"
clouds_config = "/etc/gitlab-runner/clouds.yaml"
name = "scaling-runner-stack-id"
nova_microversion = "2.79" # train+
boot_time = "10m"
use_ignition = true # enable injection of dynamic SSH key into Ignition config
[runners.autoscaler.plugin_config.server_spec]
name = "scaling-runner-%d" # %d replaced with instance index
description = "GitLab CI Docker runners with autoscaling"
tags = ["GitLab", "CI", "Docker", "Scaling"]
imageRef = "d5460af5-83f3-47d7-9c4f-80294c66b267" # Flatcar Linux
flavorRef = "4e9d4fa4-a703-4850-8bc1-58b5e139ab57" # xlarge flavor
# key_name = "ci-admin" # SSH public key for worker nodes
networks = [ { uuid = "f05e7f64-9e0f-4c5c-acb0-b636000d7301" } ] # tenant network
security_groups = [ "cee22d91-bb9a-455d-be88-e911d3cb066a" ] # allow SSH ingress from tenant network
scheduler_hints = { group = "a9c941cb-5b34-46e0-8fc6-7471e3b77c75" } # [Soft-]Anti-Affinity group
# May be used to pass #cloud-config or ignition scripts.
# If use_ignition == true, plugin will try parse existing script to inject passwd.users entry.
# user_data = ''''''
[runners.autoscaler.connector_config]
# username = "fedora" # Can be extracted from Image metadata os_admin_user
# password = "" # not used
# key_path = "/etc/gitlab-runner/id_rsa" # private key passed to server_spec.key_name. Required in cloud-init mode, optional for Ignition.
# use_static_credentials = true # Tells to use key provided above.
keepalive = "30s"
timeout = "0m"
use_external_addr = false
[[runners.autoscaler.policy]]
idle_count = 2
idle_time = "30m0s"
scale_factor = 0.0
scale_factor_limit = 0