Docker Autoscaler executor

상태: Beta
  • Experiment로 소개됨 (GitLab Runner 15.11.0에서)
  • Beta변경됨 (GitLab Runner 16.6에서).

Docker Autoscaler executor는 러너 매니저에서 처리하는 작업을 수용하기 위해 필요에 따라 인스턴스를 생성하는 오토스케일이 가능한 Docker executor입니다. Docker executor를 래핑하여 모든 Docker executor 옵션 및 기능을 지원합니다.

Docker Autoscaler는 오토스케일을 위해 fleeting plugins를 사용합니다. _Fleeting_은 구글 클라우드, AWS, 그리고 Azure와 같은 클라우드 제공업체를 지원하는 플러그인을 사용하는 오토스케일 인스턴스 그룹의 추상화입니다.

일시적 플러그인 설치

대상 플랫폼에 대한 오토스케일을 활성화하려면 일시적 플러그인을 설치하세요. AWS, 구글 클라우드, 또는 Azure 일시적 플러그인을 설치할 수 있습니다. AWS, 구글 클라우드, Azure 플러그인은 현재 Beta 상태입니다. 타임라인은 에픽 2502를 참조하세요.

GitLab에서 개발한 다른 공식 플러그인은 fleeting project를 참조하세요.

플러그인을 설치하려면 다음을 수행하세요:

  1. 호스트 플랫폼용 이진 파일 설치:
  2. 플러그인 바이너리가 PATH 환경 변수를 통해 찾을 수 있도록 확인하세요.

Docker Autoscaler 구성

Docker Autoscaler executor는 모든 Docker executor 옵션과 기능을 지원하기 위해 Docker executor를 래핑합니다.

config.toml에서 Docker Autoscaler를 구성하려면:

예: 인스턴스 당 1개의 작업에 대한 AWS 오토스케일

전제 조건:

  • Docker 엔진이 설치된 AMI. AMI에서 러너 매니저가 Docker 소켓에 액세스하도록 하려면 사용자는 docker 그룹의 일부여아 한합니다.
  • AWS 오토스케일링 그룹. 스케일링 정책의 경우 “none”을 사용하고 러너가 스케일링을 처리하도록 합니다.
  • 올바른 권한이 있는 IAM 정책.

이 구성은 다음을 지원합니다:

  • 인스턴스당 용량 1
  • 사용 횟수 1
  • 대기 스케일 5
  • 대기 시간 20분
  • 최대 인스턴스 수 10

용량 및 사용 횟수를 각각 1로 설정하여 각 작업은 다른 작업에 영향을 받지 않는 안전한 일시적 인스턴스를 받습니다. 작업이 완료되면 실행된 인스턴스가 즉시 삭제됩니다.

대기 스케일이 5인 경우, 러너는 (인스턴스 당 용량이 1이기 때문에) 미래 수요를 위해 5개의 완전한 인스턴스를 유지하려고 시도합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.

러너 concurrent 필드는 10개로 설정됩니다 (최대 인스턴스 수 * 인스턴스 당 용량).

concurrent = 10

[[runners]]
  name = "docker autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # Windows AMI의 경우 powershell 또는 pwsh 사용
  
  # 러너 매니저가 Linux에 호스팅된 경우 Windows AMI에 대한 경우 아래 주석 처리
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # Autoscaler 구성
  [runners.autoscaler]
    plugin = "fleeting-plugin-aws"
    
    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10
    
    [runners.autoscaler.plugin_config] # 플러그인 특정 구성 (플러그인 문서 참조)
      name             = "my-docker-asg"               # AWS 오토스케일링 그룹 이름
      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"

예: 인스턴스 당 1개의 작업에 대한 구글 클라우드 인스턴스 그룹

전제 조건:

  • Docker 엔진이 설치된 VM 이미지, 예: COS.
  • Google Cloud 인스턴스 그룹. 자동 스케일링 모드에서 자동 스케일 사용 안 함을 선택하세요. 러너가 자동 스케일링을 처리하고 Google Cloud 인스턴스 그룹이 아님을 확인합니다.
  • 올바른 권한이 있는 IAM 정책.

이 구성은 다음을 지원합니다:

  • 인스턴스당 용량 1
  • 사용 횟수 1
  • 대기 스케일 5
  • 대기 시간 20분
  • 최대 인스턴스 수 10

용량 및 사용 횟수를 각각 1로 설정하여 각 작업은 다른 작업에 영향을 받지 않는 안전한 일시적 인스턴스를 받습니다. 작업이 완료되면 실행된 인스턴스가 즉시 삭제됩니다.

대기 스케일이 5인 경우, 러너는 (인스턴스 당 용량이 1이기 때문에) 미래 수요를 위해 5개의 완전한 인스턴스를 유지하려고 시도합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.

러너 concurrent 필드는 10개로 설정됩니다 (최대 인스턴스 수 * 인스턴스 당 용량).

concurrent = 10

[[runners]]
  name = "docker autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # Windows 이미지의 경우 powershell 또는 pwsh 사용
  
  # 러너 매니저가 Linux에 호스팅된 경우 Windows 이미지에 대한 경우 아래 주석 처리
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # Autoscaler 구성
  [runners.autoscaler]
    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 이미지
  • 자동 스케일링 정책이 매뉴얼으로 설정된 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 사용
  
  # Linux에 Runner 매니저가 호스팅된 경우 Windows AMI용 설정을 해제합니다.
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # Autoscaler 구성
  [runners.autoscaler]
    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"