Docker Autoscaler executor
- GitLab Runner 15.11.0에서 실험으로 소개됨.
- GitLab Runner 16.6에서 베타로 변경됨.
- GitLab Runner 17.1에서 일반적으로 사용 가능.
Docker Autoscaler executor를 사용하기 전에, GitLab Runner 자동 확장에 대한 알려진 문제 목록을 포함한 피드백 문제를 참조하세요.
Docker Autoscaler executor는 러너 관리자가 처리하는 작업을 수용하기 위해 필요에 따라 인스턴스를 생성하는 자동 확장 기능이 있는 Docker executor입니다. 모든 Docker executor 옵션과 기능이 지원되도록 Docker executor를 래핑합니다.
Docker Autoscaler는 자동 확장을 위해 fleeting plugins를 사용합니다. _Fleeting_은 Google Cloud, AWS 및 Azure와 같은 클라우드 공급자를 지원하는 플러그인을 사용하는 자동 확장된 인스턴스 그룹에 대한 추상화입니다.
플리팅 플러그인 설치
대상 플랫폼에 대한 플러그인을 설치하려면 플리팅 플러그인 설치를 참조하세요.
Docker Autoscaler 구성
Docker Autoscaler executor는 모든 Docker executor 옵션과 기능이 지원되도록 Docker executor를 래핑합니다.
config.toml
에서 Docker Autoscaler를 구성하려면:
-
[runners]
섹션에서executor
를docker-autoscaler
로 지정하세요. - 다음 섹션에서 요구 사항에 따라 Docker Autoscaler를 구성하세요:
예시: 인스턴스당 1 작업에 대한 AWS 자동 확장
필수 조건:
-
Docker Engine이 설치된 AMI. AMI에서 Docker 소켓에 대한 러너 관리자의 액세스를 허용하려면 사용자가
docker
그룹의 일부여야 합니다. - AWS Autoscaling 그룹. 스케일링 정책에는 “없음”을 사용하세요. 러너가 스케일링을 처리하기 때문입니다.
- 올바른 권한을 가진 IAM 정책
이 구성은 다음을 지원합니다:
- 인스턴스당 용량 1
- 사용 횟수 1
- 유휴 상태 스케일 5
- 유휴 시간 20분
- 최대 인스턴스 수 10
용량과 사용 횟수를 모두 1로 설정하면 각 작업은 다른 작업에 영향을 받지 않는 안전한 임시 인스턴스를 받습니다. 작업이 완료되면 인스턴스는 즉시 삭제됩니다.
유휴 상태 스케일이 5인 경우, 러너는 향후 수요를 위해 5개의 전체 인스턴스를 유지하려고 합니다(인스턴스당 용량이 1이기 때문입니다). 이러한 인스턴스는 최소 20분 동안 유지됩니다.
러너의 concurrent
필드는 10(최대 인스턴스 수 * 인스턴스당 용량)으로 설정됩니다.
concurrent = 10
[[runners]]
name = "docker autoscaler example"
url = "https://gitlab.com"
token = "<token>"
shell = "sh" # Windows AMI의 경우 powershell 또는 pwsh를 사용하세요.
# Runner 관리자가 Linux에 호스팅될 때 Windows AMI의 경우 주석 해제
# environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
executor = "docker-autoscaler"
# Docker Executor 구성
[runners.docker]
image = "busybox:latest"
# Autoscaler 구성
[runners.autoscaler]
plugin = "aws" # GitLab 16.11 및 이후 버전에서는 `gitlab-runner fleeting install`을 실행하여 플러그인을 자동으로 설치하세요.
# GitLab 16.10 및 이전 버전에서는 플러그인을 수동으로 설치하고 사용하세요:
# plugin = "fleeting-plugin-aws"
capacity_per_instance = 1
max_use_count = 1
max_instances = 10
[runners.autoscaler.plugin_config] # 플러그인별 구성 (플러그인 문서 참조)
name = "my-docker-asg" # AWS Autoscaling 그룹 이름
profile = "default" # 선택 사항, 기본값은 'default'
config_file = "/home/user/.aws/config" # 선택 사항, 기본값은 '~/.aws/config'
credentials_file = "/home/user/.aws/credentials" # 선택 사항, 기본값은 '~/.aws/credentials'
[runners.autoscaler.connector_config]
username = "ec2-user"
use_external_addr = true
[[runners.autoscaler.policy]]
idle_count = 5
idle_time = "20m0s"
예제: Google Cloud 인스턴스 그룹으로 인스턴스 당 1개의 작업
사전 요구 사항:
- Docker Engine이 설치된 VM 이미지, 예: COS.
- Google Cloud 인스턴스 그룹. Autoscaling mode에서 자동 확장하지 않음을 선택합니다. 러너가 자동 확장을 처리하며 Google Cloud 인스턴스 그룹이 아닙니다.
-
올바른 권한이 포함된 IAM 정책.
GKE 클러스터에 러너를 배포하는 경우 Kubernetes 서비스 계정과 GCP 서비스 계정 간의 IAM 바인딩을 추가할 수 있습니다.
이 바인딩을
iam.workloadIdentityUser
역할로 추가하여 GCP에 인증할 수 있으며,credentials_file
을 사용하여 키 파일 대신 사용할 수 있습니다.
이 구성은 다음을 지원합니다:
- 인스턴스당 용량: 1
- 사용량: 1
- 유휴 비율: 5
- 유휴 시간: 20분
- 최대 인스턴스 수: 10
용량과 사용량을 모두 1로 설정하면 각 작업에 대해 다른 작업에 영향을 받지 않는 안전한 임시 인스턴스가 제공됩니다. 작업이 완료되면 해당 인스턴스는 즉시 삭제됩니다.
유휴 비율이 5로 설정되면, 러너는 향후 수요를 위해 5개의 전체 인스턴스를 유지하려고 합니다(인스턴스당 용량이 1이기 때문). 이러한 인스턴스는 최소 20분 동안 유지됩니다.
러너의 concurrent
필드는 10으로 설정됩니다 (최대 인스턴스 수 * 인스턴스당 용량).
concurrent = 10
[[runners]]
name = "docker autoscaler example"
url = "https://gitlab.com"
token = "<token>"
shell = "sh" # Windows 이미지는 powershell 또는 pwsh를 사용하세요.
# 리너 관리자가 리눅스에 호스팅될 때 Windows 이미지의 주석을 제거하세요.
# environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
executor = "docker-autoscaler"
# Docker Executor 구성
[runners.docker]
image = "busybox:latest"
# Autoscaler 구성
[runners.autoscaler]
plugin = "googlecloud" # >= 16.11의 경우, `gitlab-runner fleeting install`를 실행하여 플러그인을 자동으로 설치하세요.
# < 17.0 버전의 경우, 플러그인을 수동으로 설치하고 사용하세요:
# plugin = "fleeting-plugin-googlecompute"
capacity_per_instance = 1
max_use_count = 1
max_instances = 10
[runners.autoscaler.plugin_config] # 플러그인별 구성 (플러그인 문서 참조)
name = "my-docker-instance-group" # Google Cloud 인스턴스 그룹 이름
project = "my-gcp-project"
zone = "europe-west1"
credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # 선택 사항, 기본값은 '~/.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 스케일 세트로 인스턴스 당 1개의 작업
사전 요구 사항:
- Docker Engine이 설치된 Azure VM 이미지.
- 자동 확장 정책이
manual
로 설정된 Azure 스케일 세트. 러너가 확장을 처리합니다.
이 구성은 다음을 지원합니다:
- 인스턴스당 용량: 1
- 사용량: 1
- 유휴 비율: 5
- 유휴 시간: 20분
- 최대 인스턴스 수: 10
용량과 사용량이 모두 1
로 설정되면 각 작업에 대해 다른 작업에 영향을 받지 않는 안전한 임시 인스턴스가 제공됩니다. 작업이 완료되면 해당 인스턴스는 즉시 삭제됩니다.
유휴 비율이 5
로 설정되면, 러너는 향후 수요를 위해 5개의 인스턴스를 유지합니다(인스턴스당 용량이 1이기 때문). 이러한 인스턴스는 최소 20분 동안 유지됩니다.
러너의 concurrent
필드는 10으로 설정됩니다 (최대 인스턴스 수 * 인스턴스당 용량).
concurrent = 10
[[runners]]
name = "docker autoscaler example"
url = "https://gitlab.com"
token = "<token>"
shell = "sh" # Windows AMI의 경우 powershell 또는 pwsh를 사용하세요.
# 리너 관리자가 리눅스에 호스팅될 때 Windows AMI의 주석을 제거하세요.
# environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
executor = "docker-autoscaler"
# Docker Executor 구성
[runners.docker]
image = "busybox:latest"
# Autoscaler 구성
[runners.autoscaler]
plugin = "azure" # >= 16.11의 경우, `gitlab-runner fleeting install`를 실행하여 플러그인을 자동으로 설치하세요.
# < 17.0 버전의 경우, 플러그인을 수동으로 설치하고 사용하세요:
# plugin = "fleeting-plugin-azure"
capacity_per_instance = 1
max_use_count = 1
max_instances = 10
[runners.autoscaler.plugin_config] # 플러그인별 구성 (플러그인 문서 참조)
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"