Docker Autoscaler executor

Status: Beta

Docker Autoscaler executor는 runner manager가 처리하는 작업을 수용하기 위해 필요한 인스턴스를 필요에 따라 생성하는 AutoScale 활성화된 Docker executor입니다. 모든 Docker executor 옵션 및 기능을 지원하기 위해 Docker executor를 랩핑합니다.

Docker Autoscaler는 fleeting plugins를 사용하여 자동으로 스케일을 조정합니다. _Fleeting_은 Google Cloud, AWS 및 Azure와 같은 클라우드 공급자를 지원하는 플러그인을 사용하는 자동 스케일 인스턴스를 위한 추상화입니다.

일시적인(fleeting) 플러그인 설치

대상 플랫폼에서 자동 스케일링을 활성화하려면 일시적인(fleeting) 플러그인을 설치하세요. AWS, Google Cloud 또는 Azure fleeting 플러그인을 설치할 수 있습니다. AWS, Google Cloud 및 Azure 플러그인은 현재 Beta 단계입니다. 타임라인은 epic 2502를 확인하세요.

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

플러그인을 설치하려면:

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

Docker Autoscaler 구성

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

Docker Autoscaler를 구성하려면 config.toml에서 다음을 수행하세요:

예: 1 인스턴스당 AWS 자동 스케일링

전제 조건:

  • Docker Engine이 설치된 AMI(Amazon Machine Image). AMI에서 Runner Manager의 Docker 소켓에 액세스하려면 사용자는 docker 그룹의 구성원이어야 합니다.
  • AWS AutoScaling 그룹. 스케일링 정책에는 Runner가 스케일링을 처리하므로 “none”을 사용합니다.
  • 올바른 권한을 가진 IAM 정책

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

  • 1 인스턴스당 capacity
  • 1 사용 횟수
  • 5 분 동안 대기 모드
  • 최대 인스턴스 수 10

용량 및 사용 횟수를 각각 1로 설정하여 각 작업에 안전한 일회용 인스턴스를 제공합니다. 작업이 완료되면 해당 인스턴스는 즉시 삭제됩니다.

대기 모드가 5이므로(인스턴스당 capacity가 1이기 때문에) Runner는 미래 수요를 위해 적어도 5개의 완전한 인스턴스를 유지하려고 합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.

Runner의 concurrent 필드는 10으로 설정됩니다(최대 인스턴스 수 * capacity 인스턴스).

concurrent = 10

[[runners]]
  name = "docker autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"                                        # Windows AMI의 경우 powershell 또는 pwsh 사용

  # Linux에서 Runner manager를 호스팅하는 경우 Windows AMI에 대해서는 주석 제거
  # 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 이름
      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 Engine이 설치된 VM 이미지, 예를 들어 COS
  • 구글 클라우드 인스턴스 그룹. Autoscaling mode자동 스케일 조정을 선택합니다. 러너가 자동 스케일 조정을 처리하며 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 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] # 플러그인별 구성(플러그인 설명서 참조)
      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"

예시: 1개의 작업 당 Azure 스케일 세트

전제 조건:

  • Docker Engine이 설치된 Azure VM 이미지
  • Azure 스케일 세트, 여기서 자동 조정 정책은 수동으로 설정되어 있습니다. 러너가 스케일링을 처리합니다.

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

  • 인스턴스 당 용량은 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 config
  [runners.docker]
    image = "busybox:latest"

  # Autoscaler config
  [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"