Docker Autoscaler executor

상태: Beta

이 기능은 Beta 단계이며 프로덕션 환경에서 사용하기에는 권장되지 않습니다. 프로덕션 환경에서는 Docker Machine executor를 사용해야 합니다.

Docker Autoscaler executor를 사용하기 전에, GitLab Runner의 오토스케일링에 대한 알려진 문제 디렉터리을 확인하기 위해 피드백 이슈를 참조하세요.

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

Docker Autoscaler는 확산 플러그인을 사용하여 자동으로 조정합니다. _Fleeting_은 클라우드 제공업체인 Google Cloud, AWS 및 Azure와 같은 플러그인을 지원하는 오토스케일 인스턴스 그룹의 추상화입니다.

확산 플러그인 설치

대상 플랫폼에 대한 플러그인을 설치하려면 확산 플러그인을 설치하세요를 참조하세요.

Docker Autoscaler 구성

Docker Autoscaler executor는 Docker executor를 감싸서 모든 Docker executor 옵션 및 기능을 지원합니다.

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

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

전제 조건:

  • Docker Engine이 설치된 AMI. AMI의 Docker 소켓에 Runner 관리자의 액세스를 활성화하려면 사용자는 docker 그룹의 일부여야 합니다.
  • AWS 오토스케일링 그룹. 스케일링 정책은 “none”을 사용하고 Runner가 스케일링을 처리합니다.
  • 올바른 권한을 가진 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에 Runner 관리자가 호스팅되어 있는 Windows AMI의 경우 사용할 수 있도록 주석 처리합니다.
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # 오토스케일러 구성
  [runners.autoscaler]
    plugin = "aws" # 버전이 16.11 이상인 경우 플러그인을 자동으로 설치하려면 `gitlab-runner fleeting install`을 실행하세요.
    
    # 17.0 이하 버전용으로 플러그인을 매뉴얼으로 설치하고 다음을 사용하세요.
    # 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"

예시: Google Cloud 인스턴스 그룹에 대한 인스턴스 당 작업 1개의 구성

전제 조건:

  • Docker Engine이 설치된 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에 Runner 관리자가 호스팅되어 있는 Windows 이미지의 경우 사용할 수 있도록 주석 처리합니다.
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # 오토스케일러 구성
  [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 이미지
  • 오토스케일링 정책이 매뉴얼으로 설정된 Azure 스케일 세트. 러너가 스케일링을 처리함.

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

  • 각 인스턴스당 용량 1
  • 사용 횟수 1
  • 유휴 상태 스케일 5
  • 유휴 시간 20분
  • 최대 인스턴스 카운트 10

용량과 사용 횟수가 모두 1로 설정되어 있으면 각 작업은 다른 작업에 영향받지 않는 안전한 서피를 인스턴스를 받습니다. 작업이 완료되면 실행된 인스턴스가 즉시 삭제됩니다.

유휴 상태 스케일이 5로 설정되어 있으면 (인스턴스당 용량이 1이기 때문에) 러너는 미래 요청을 위해 5개의 인스턴스를 유지합니다. 이러한 인스턴스는 적어도 20분간 유지됩니다.

러너의 concurrent 필드는 10으로 설정되어 있습니다 (최대 인스턴스 수 * 인스턴스당 용량).

concurrent = 10

[[runners]]
  name = "도커 오토스케일러 예시"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # 윈도우 AMI의 경우 powershell 또는 pwsh 사용
  
  # Linux에서 Runner 매니저를 호스팅하는 경우 Windows AMI용 주석 해제
  # environment = ["FF_USE_POWERSHELL_PATH_RESOLVER=1"]
  
  executor = "docker-autoscaler"
  
  # Docker Executor 구성
  [runners.docker]
    image = "busybox:latest"
  
  # 오토스케일러 구성
  [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"