Docker Autoscaler executor

Docker Autoscaler executor를 사용하기 전에, GitLab Runner 자동 스케일링에 대한 알려진 문제 목록을 확인하려면 피드백 이슈를 참조하세요.

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

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

fleeting 플러그인 설치

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

Docker Autoscaler 구성

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

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

예: 1 작업 당 AWS 오토스케일링

전제 조건:

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

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

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

용량과 사용 횟수를 1로 설정하여 각 작업에 안전한 순간적인 인스턴스가 할당되며, 작업이 완료되면 즉시 삭제됩니다.

빈 스케일이 5로 설정되어 있으므로 러너는 미래의 수요를 위해 5개의 완전한 인스턴스(인스턴스당 용량이 1이기 때문에)를 유지하려고 합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.

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

또한, 최대 인스턴스 수를 10으로 설정하여 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" # 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 오토스케일링 그룹 이름
      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 작업 당 Google Cloud 인스턴스 그룹

전제 조건:

  • Docker Engine이 설치된 VM 이미지, COS와 같은 것
  • Google Cloud 인스턴스 그룹. 자동 스케일링 모드자동 스케일링 없음을 선택합니다. 러너가 인스턴스 그룹이 아니라 Google Cloud에서 스케일링을 처리합니다.
  • 올바른 권한을 갖춘 IAM 정책

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

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

용량과 사용 횟수를 1로 설정하여 각 작업에 안전한 순간적인 인스턴스가 할당되며, 작업이 완료되면 즉시 삭제됩니다.

빈 스케일이 5로 설정되어 있으므로 러너는 미래의 수요를 위해 5개의 완전한 인스턴스(인스턴스당 용량이 1이기 때문에)를 유지하려고 합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.

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

또한, 최대 인스턴스 수를 10으로 설정하여 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로 설정되면, 러너는 미래 수요를 위해 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 config
  [runners.docker]
    image = "busybox:latest"

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