InfoGrab Docs

Instance 실행기

요약

Instance 실행기는 러너 관리자가 처리하는 작업량에 맞춰 온디맨드로 인스턴스를 생성하는 자동 스케일링 지원 실행기입니다. 작업에서 호스트 인스턴스, 운영 체제, 연결된 장치에 전체 접근이 필요한 경우 Instance 실행기를 사용할 수 있습니다.

히스토리
  • GitLab Runner 15.11.0에서 실험적 기능으로 도입되었습니다.
  • GitLab Runner 16.6에서 베타변경되었습니다.
  • GitLab Runner 17.1에서 일반 공개되었습니다.

Instance 실행기는 러너 관리자가 처리하는 작업량에 맞춰 온디맨드로 인스턴스를 생성하는 자동 스케일링 지원 실행기입니다.

작업에서 호스트 인스턴스, 운영 체제, 연결된 장치에 전체 접근이 필요한 경우 Instance 실행기를 사용할 수 있습니다. Instance 실행기는 다양한 수준의 격리 및 보안을 갖춘 단일 테넌트 및 다중 테넌트 작업을 수용하도록 구성할 수도 있습니다.

중첩 가상화#

Instance 실행기는 GitLab이 개발한 nesting 데몬을 통해 중첩 가상화를 지원합니다. nesting 데몬은 작업과 같이 격리되고 단기적인 워크로드에 사용되는 호스트 시스템에서 미리 구성된 가상 머신을 생성하고 삭제할 수 있도록 합니다. Nesting은 Apple Silicon 인스턴스에서만 지원됩니다.

자동 스케일링을 위한 환경 준비#

자동 스케일링을 위한 환경을 준비하려면:

  1. 러너 관리자가 설치되고 구성된 대상 플랫폼에 맞는 fleeting 플러그인을 설치합니다.
  2. 사용 중인 플랫폼에 맞는 VM 이미지를 생성합니다. 이미지에는 다음이 포함되어야 합니다:
    • Git

    • GitLab Runner 바이너리

      [!note] 작업 아티팩트와 캐시를 처리하려면, 가상 머신에 GitLab Runner 바이너리를 설치하고 러너 실행 파일을 기본 경로에 유지해야 합니다. VM 이미지는 GitLab Runner를 실행할 필요가 없습니다. VM 이미지를 사용하여 실행된 인스턴스는 GitLab에 러너로 등록되어서는 안 됩니다.

    • 실행할 작업에 필요한 의존성

자동 스케일링을 위한 실행기 구성#

사전 요구 사항:

  • 관리자여야 합니다.

자동 스케일링을 위해 Instance 실행기를 구성하려면, config.toml에서 다음 섹션을 업데이트합니다:

선점 모드#

fleeting 및 taskscaler를 사용할 때:

  • 선점 모드가 켜져 있으면, 유휴 인스턴스가 사용 가능할 때까지 러너 관리자는 새 CI/CD 작업을 요청하지 않습니다. 이 모드에서는 CI/CD 작업이 거의 즉시 실행됩니다.
  • 선점 모드가 꺼져 있으면, 러너 관리자는 유휴 인스턴스의 가용 여부와 관계없이 새 CI/CD 작업을 요청합니다. 작업 수는 max_instancescapacity_per_instance를 기반으로 합니다. 이 모드에서는 CI/CD 작업의 시작 시간이 느립니다. 새 인스턴스를 프로비저닝하지 못할 수 있으므로 CI/CD 작업이 실행되지 않을 수 있습니다.

AWS 자동 스케일링 그룹 구성 예시#

인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 AMI.
  • 스케일링 정책이 none으로 설정된 AWS Autoscaling 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 1.
  • 사용 횟수 1.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

용량과 사용 횟수가 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

각 인스턴스의 용량이 1이고 유휴 스케일이 5일 때, 러너는 향후 수요를 위해 5개의 전체 인스턴스를 사용 가능하게 유지합니다. 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # 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-linux-asg"                # AWS Autoscaling Group name
      profile          = "default"                     # optional, default is 'default'
      config_file      = "/home/user/.aws/config"      # optional, default is '~/.aws/config'
      credentials_file = "/home/user/.aws/credentials" # optional, default is '~/.aws/credentials'

    [runners.autoscaler.connector_config]
      username          = "ec2-user"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

무제한 사용으로 인스턴스당 다섯 개의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 AMI.
  • 스케일링 정책이 none으로 설정된 AWS Autoscaling 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 5.
  • 무제한 사용 횟수.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

인스턴스당 용량이 5이고 사용 횟수가 무제한으로 설정되면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

유휴 스케일이 5이고 인스턴스의 유휴 용량이 5이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # plugin = "fleeting-plugin-aws"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-windows-asg"              # AWS Autoscaling Group name
      profile          = "default"                     # optional, default is 'default'
      config_file      = "/home/user/.aws/config"      # optional, default is '~/.aws/config'
      credentials_file = "/home/user/.aws/credentials" # optional, default is '~/.aws/credentials'

    [runners.autoscaler.connector_config]
      username          = "Administrator"
      timeout           = "5m0s"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

EC2 Mac 인스턴스에서 인스턴스당 두 개의 작업, 무제한 사용, 중첩 가상화#

사전 요구 사항:

  • nestingTart가 설치된 Apple Silicon AMI.
  • 러너가 사용하는 Tart VM 이미지. VM 이미지는 작업의 image 키워드로 지정됩니다. VM 이미지에는 최소한 git과 GitLab Runner가 설치되어 있어야 합니다.
  • AWS Autoscaling 그룹. 러너가 스케일링을 처리하므로 스케일링 정책에 none을 사용합니다. MacOS용 ASG 설정 방법은 EC2 Mac 인스턴스를 위한 자동 스케일링 구현을 참조하세요.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 2.
  • 무제한 사용 횟수.
  • 격리된 작업을 지원하는 중첩 가상화. 중첩 가상화는 nesting이 설치된 Apple Silicon 인스턴스에서만 사용 가능합니다.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

각 인스턴스의 용량이 2이고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 2개의 작업을 동시에 실행합니다.

유휴 스케일이 2이면, 사용 중인 용량이 2 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 24시간 동안 유지됩니다. 이 시간 프레임은 AWS MacOS 인스턴스 호스트의 24시간 최소 할당 기간 때문입니다.

이 환경에서 실행되는 작업은 nesting이 각 작업의 중첩 가상화에 사용되므로 신뢰할 필요가 없습니다. 이것은 Apple Silicon 인스턴스에서만 작동합니다.

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

concurrent = 8

[[runners]]
  name = "macos applesilicon autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  executor = "instance"

  [runners.instance]
    allowed_images = ["*"] # allow any nesting image

  [runners.autoscaler]
    capacity_per_instance = 2 # AppleSilicon can only support 2 VMs per host
    max_use_count = 0
    max_instances = 4

    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # plugin = "fleeting-plugin-aws"

    [[runners.autoscaler.policy]]
      idle_count = 2
      idle_time  = "24h" # AWS's MacOS instances

    [runners.autoscaler.connector_config]
      username = "ec2-user"
      key_path = "macos-key.pem"
      timeout  = "1h" # connecting to a MacOS instance can take some time, as they can be slow to provision

    [runners.autoscaler.plugin_config]
      name = "mac2metal"
      region = "us-west-2"

    [runners.autoscaler.vm_isolation]
      enabled = true
      nesting_host = "unix:///Users/ec2-user/Library/Application Support/nesting.sock"

    [runners.autoscaler.vm_isolation.connector_config]
      username = "nested-vm-username"
      password = "nested-vm-password"
      timeout  = "20m"

Google Cloud 인스턴스 그룹 구성 예시#

Google Cloud 인스턴스 그룹을 사용하여 인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 do not autoscale로 설정된 Google Cloud 인스턴스 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책. GKE 클러스터에 러너를 배포하는 경우, Kubernetes 서비스 계정과 GCP 서비스 계정 간에 IAM 바인딩을 추가할 수 있습니다. iam.workloadIdentityUser 역할과 함께 이 바인딩을 추가하여 키 파일의 credentials_file 대신 GCP에 인증할 수 있습니다.

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

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

용량과 사용 횟수가 모두 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

유휴 스케일이 5로 설정되면, 러너는 향후 수요를 위해 5개의 인스턴스를 사용 가능하게 유지합니다 (인스턴스당 용량이 1이므로). 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "googlecloud" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-googlecompute"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-linux-instance-group" # Google Cloud Instance Group name
      project          = "my-gcp-project"
      zone             = "europe-west1-c"
      credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # optional, default is '~/.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"

Google Cloud 인스턴스 그룹을 사용하여 인스턴스당 다섯 개의 작업, 무제한 사용#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 인스턴스 그룹. "자동 스케일링 모드"의 경우 "do not autoscale"을 선택합니다. Runner가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 인스턴스당 용량 5
  • 무제한 사용 횟수
  • 유휴 스케일 5
  • 20분의 유휴 시간
  • 최대 인스턴스 수 10

용량이 5로 설정되고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

유휴 스케일이 5이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "googlecloud" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-googlecompute"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-windows-instance-group" # Google Cloud Instance Group name
      project          = "my-gcp-project"
      zone             = "europe-west1-c"
      credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # optional, default is '~/.config/gcloud/application_default_credentials.json'

    [runners.autoscaler.connector_config]
      username          = "Administrator"
      timeout           = "5m0s"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

Azure 스케일 세트 구성 예시#

Azure 스케일 세트를 사용하여 인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 manual로 설정되고 오버프로비저닝이 꺼진 Azure 스케일 세트. 러너가 스케일링을 처리합니다.

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

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

용량과 사용 횟수가 모두 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

유휴 스케일이 5로 설정되면, 러너는 향후 수요를 위해 5개의 인스턴스를 사용 가능하게 유지합니다 (인스턴스당 용량이 1이므로). 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "azure" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-azure"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name                = "my-linux-scale-set" # Azure scale set name
      subscription_id     = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
      resource_group_name = "my-resource-group"

    [runners.autoscaler.connector_config]
      username               = "runner"
      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"

Azure 스케일 세트를 사용하여 인스턴스당 다섯 개의 작업, 무제한 사용#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 manual로 설정되고 오버프로비저닝이 꺼진 Azure 스케일 세트. 러너가 스케일링을 처리합니다.

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

  • 인스턴스당 용량 5
  • 무제한 사용 횟수
  • 유휴 스케일 5
  • 20분의 유휴 시간
  • 최대 인스턴스 수 10

용량이 5로 설정되고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

유휴 스케일이 2이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "azure" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-azure"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name                = "my-windows-scale-set" # Azure scale set name
      subscription_id     = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
      resource_group_name = "my-resource-group"

    [runners.autoscaler.connector_config]
      username               = "Administrator"
      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"

슬롯 기반 cgroup 지원#

Instance 실행기는 동시 작업 간의 향상된 리소스 격리를 위한 슬롯 기반 cgroup을 지원합니다. 활성화되면, GITLAB_RUNNER_SLOT_CGROUP 환경 변수가 작업에 자동으로 제공되어 슬롯별 cgroup 아래에서 프로세스를 실행할 수 있습니다.

슬롯 기반 cgroup에 대한 자세한 정보(이점, 사전 요구 사항, 구성, 설정 지침 포함)는 슬롯 기반 cgroup 지원을 참조하세요.

GitLab Runner 슬롯 cgroup 환경 변수 사용#

Instance 실행기는 GITLAB_RUNNER_SLOT_CGROUP 환경 변수를 작업에 제공합니다. 이 변수를 systemd-run 또는 cgexec과 같은 도구와 함께 사용하여 슬롯별 cgroup 아래에서 프로세스를 실행합니다.

사용 예시 및 문제 해결에 대해서는 슬롯 기반 cgroup 문서의 Instance 실행기 섹션을 참조하세요.

문제 해결#

Instance 실행기를 사용할 때 다음과 같은 문제가 발생할 수 있습니다:

sh: 1: eval: Running on ip-x.x.x.x via runner-host...n: not found#

이 오류는 일반적으로 준비 단계의 eval 명령이 실패할 때 발생합니다. 이 오류를 해결하려면 bash 셸로 전환하고 기능 플래그 FF_USE_NEW_BASH_EVAL_STRATEGY를 활성화하세요.

Instance 실행기

원문 보기
요약

Instance 실행기는 러너 관리자가 처리하는 작업량에 맞춰 온디맨드로 인스턴스를 생성하는 자동 스케일링 지원 실행기입니다. 작업에서 호스트 인스턴스, 운영 체제, 연결된 장치에 전체 접근이 필요한 경우 Instance 실행기를 사용할 수 있습니다.

히스토리
  • GitLab Runner 15.11.0에서 실험적 기능으로 도입되었습니다.
  • GitLab Runner 16.6에서 베타변경되었습니다.
  • GitLab Runner 17.1에서 일반 공개되었습니다.

Instance 실행기는 러너 관리자가 처리하는 작업량에 맞춰 온디맨드로 인스턴스를 생성하는 자동 스케일링 지원 실행기입니다.

작업에서 호스트 인스턴스, 운영 체제, 연결된 장치에 전체 접근이 필요한 경우 Instance 실행기를 사용할 수 있습니다. Instance 실행기는 다양한 수준의 격리 및 보안을 갖춘 단일 테넌트 및 다중 테넌트 작업을 수용하도록 구성할 수도 있습니다.

중첩 가상화#

Instance 실행기는 GitLab이 개발한 nesting 데몬을 통해 중첩 가상화를 지원합니다. nesting 데몬은 작업과 같이 격리되고 단기적인 워크로드에 사용되는 호스트 시스템에서 미리 구성된 가상 머신을 생성하고 삭제할 수 있도록 합니다. Nesting은 Apple Silicon 인스턴스에서만 지원됩니다.

자동 스케일링을 위한 환경 준비#

자동 스케일링을 위한 환경을 준비하려면:

  1. 러너 관리자가 설치되고 구성된 대상 플랫폼에 맞는 fleeting 플러그인을 설치합니다.
  2. 사용 중인 플랫폼에 맞는 VM 이미지를 생성합니다. 이미지에는 다음이 포함되어야 합니다:
    • Git

    • GitLab Runner 바이너리

      [!note] 작업 아티팩트와 캐시를 처리하려면, 가상 머신에 GitLab Runner 바이너리를 설치하고 러너 실행 파일을 기본 경로에 유지해야 합니다. VM 이미지는 GitLab Runner를 실행할 필요가 없습니다. VM 이미지를 사용하여 실행된 인스턴스는 GitLab에 러너로 등록되어서는 안 됩니다.

    • 실행할 작업에 필요한 의존성

자동 스케일링을 위한 실행기 구성#

사전 요구 사항:

  • 관리자여야 합니다.

자동 스케일링을 위해 Instance 실행기를 구성하려면, config.toml에서 다음 섹션을 업데이트합니다:

선점 모드#

fleeting 및 taskscaler를 사용할 때:

  • 선점 모드가 켜져 있으면, 유휴 인스턴스가 사용 가능할 때까지 러너 관리자는 새 CI/CD 작업을 요청하지 않습니다. 이 모드에서는 CI/CD 작업이 거의 즉시 실행됩니다.
  • 선점 모드가 꺼져 있으면, 러너 관리자는 유휴 인스턴스의 가용 여부와 관계없이 새 CI/CD 작업을 요청합니다. 작업 수는 max_instancescapacity_per_instance를 기반으로 합니다. 이 모드에서는 CI/CD 작업의 시작 시간이 느립니다. 새 인스턴스를 프로비저닝하지 못할 수 있으므로 CI/CD 작업이 실행되지 않을 수 있습니다.

AWS 자동 스케일링 그룹 구성 예시#

인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 AMI.
  • 스케일링 정책이 none으로 설정된 AWS Autoscaling 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 1.
  • 사용 횟수 1.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

용량과 사용 횟수가 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

각 인스턴스의 용량이 1이고 유휴 스케일이 5일 때, 러너는 향후 수요를 위해 5개의 전체 인스턴스를 사용 가능하게 유지합니다. 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # 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-linux-asg"                # AWS Autoscaling Group name
      profile          = "default"                     # optional, default is 'default'
      config_file      = "/home/user/.aws/config"      # optional, default is '~/.aws/config'
      credentials_file = "/home/user/.aws/credentials" # optional, default is '~/.aws/credentials'

    [runners.autoscaler.connector_config]
      username          = "ec2-user"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

무제한 사용으로 인스턴스당 다섯 개의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 AMI.
  • 스케일링 정책이 none으로 설정된 AWS Autoscaling 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 5.
  • 무제한 사용 횟수.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

인스턴스당 용량이 5이고 사용 횟수가 무제한으로 설정되면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

유휴 스케일이 5이고 인스턴스의 유휴 용량이 5이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # plugin = "fleeting-plugin-aws"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-windows-asg"              # AWS Autoscaling Group name
      profile          = "default"                     # optional, default is 'default'
      config_file      = "/home/user/.aws/config"      # optional, default is '~/.aws/config'
      credentials_file = "/home/user/.aws/credentials" # optional, default is '~/.aws/credentials'

    [runners.autoscaler.connector_config]
      username          = "Administrator"
      timeout           = "5m0s"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

EC2 Mac 인스턴스에서 인스턴스당 두 개의 작업, 무제한 사용, 중첩 가상화#

사전 요구 사항:

  • nestingTart가 설치된 Apple Silicon AMI.
  • 러너가 사용하는 Tart VM 이미지. VM 이미지는 작업의 image 키워드로 지정됩니다. VM 이미지에는 최소한 git과 GitLab Runner가 설치되어 있어야 합니다.
  • AWS Autoscaling 그룹. 러너가 스케일링을 처리하므로 스케일링 정책에 none을 사용합니다. MacOS용 ASG 설정 방법은 EC2 Mac 인스턴스를 위한 자동 스케일링 구현을 참조하세요.
  • 올바른 권한이 있는 IAM 정책.

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

  • 각 인스턴스의 용량 2.
  • 무제한 사용 횟수.
  • 격리된 작업을 지원하는 중첩 가상화. 중첩 가상화는 nesting이 설치된 Apple Silicon 인스턴스에서만 사용 가능합니다.
  • 유휴 스케일 5.
  • 20분의 유휴 시간.
  • 최대 인스턴스 수 10.

각 인스턴스의 용량이 2이고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 2개의 작업을 동시에 실행합니다.

유휴 스케일이 2이면, 사용 중인 용량이 2 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 24시간 동안 유지됩니다. 이 시간 프레임은 AWS MacOS 인스턴스 호스트의 24시간 최소 할당 기간 때문입니다.

이 환경에서 실행되는 작업은 nesting이 각 작업의 중첩 가상화에 사용되므로 신뢰할 필요가 없습니다. 이것은 Apple Silicon 인스턴스에서만 작동합니다.

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

concurrent = 8

[[runners]]
  name = "macos applesilicon autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  executor = "instance"

  [runners.instance]
    allowed_images = ["*"] # allow any nesting image

  [runners.autoscaler]
    capacity_per_instance = 2 # AppleSilicon can only support 2 VMs per host
    max_use_count = 0
    max_instances = 4

    plugin = "aws" # in GitLab 16.11 and later, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # in GitLab 16.10 and earlier, manually install the plugin and use:
    # plugin = "fleeting-plugin-aws"

    [[runners.autoscaler.policy]]
      idle_count = 2
      idle_time  = "24h" # AWS's MacOS instances

    [runners.autoscaler.connector_config]
      username = "ec2-user"
      key_path = "macos-key.pem"
      timeout  = "1h" # connecting to a MacOS instance can take some time, as they can be slow to provision

    [runners.autoscaler.plugin_config]
      name = "mac2metal"
      region = "us-west-2"

    [runners.autoscaler.vm_isolation]
      enabled = true
      nesting_host = "unix:///Users/ec2-user/Library/Application Support/nesting.sock"

    [runners.autoscaler.vm_isolation.connector_config]
      username = "nested-vm-username"
      password = "nested-vm-password"
      timeout  = "20m"

Google Cloud 인스턴스 그룹 구성 예시#

Google Cloud 인스턴스 그룹을 사용하여 인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 do not autoscale로 설정된 Google Cloud 인스턴스 그룹. 러너가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책. GKE 클러스터에 러너를 배포하는 경우, Kubernetes 서비스 계정과 GCP 서비스 계정 간에 IAM 바인딩을 추가할 수 있습니다. iam.workloadIdentityUser 역할과 함께 이 바인딩을 추가하여 키 파일의 credentials_file 대신 GCP에 인증할 수 있습니다.

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

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

용량과 사용 횟수가 모두 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

유휴 스케일이 5로 설정되면, 러너는 향후 수요를 위해 5개의 인스턴스를 사용 가능하게 유지합니다 (인스턴스당 용량이 1이므로). 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "googlecloud" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-googlecompute"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-linux-instance-group" # Google Cloud Instance Group name
      project          = "my-gcp-project"
      zone             = "europe-west1-c"
      credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # optional, default is '~/.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"

Google Cloud 인스턴스 그룹을 사용하여 인스턴스당 다섯 개의 작업, 무제한 사용#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 인스턴스 그룹. "자동 스케일링 모드"의 경우 "do not autoscale"을 선택합니다. Runner가 스케일링을 처리합니다.
  • 올바른 권한이 있는 IAM 정책.

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

  • 인스턴스당 용량 5
  • 무제한 사용 횟수
  • 유휴 스케일 5
  • 20분의 유휴 시간
  • 최대 인스턴스 수 10

용량이 5로 설정되고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

유휴 스케일이 5이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "googlecloud" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-googlecompute"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name             = "my-windows-instance-group" # Google Cloud Instance Group name
      project          = "my-gcp-project"
      zone             = "europe-west1-c"
      credentials_file = "/home/user/.config/gcloud/application_default_credentials.json" # optional, default is '~/.config/gcloud/application_default_credentials.json'

    [runners.autoscaler.connector_config]
      username          = "Administrator"
      timeout           = "5m0s"
      use_external_addr = true

    [[runners.autoscaler.policy]]
      idle_count = 5
      idle_time = "20m0s"

Azure 스케일 세트 구성 예시#

Azure 스케일 세트를 사용하여 인스턴스당 하나의 작업#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 manual로 설정되고 오버프로비저닝이 꺼진 Azure 스케일 세트. 러너가 스케일링을 처리합니다.

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

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

용량과 사용 횟수가 모두 1로 설정되면, 각 작업은 다른 작업의 영향을 받지 않는 보안 임시 인스턴스를 할당받습니다. 작업이 완료되면 실행된 인스턴스는 즉시 삭제됩니다.

유휴 스케일이 5로 설정되면, 러너는 향후 수요를 위해 5개의 인스턴스를 사용 가능하게 유지합니다 (인스턴스당 용량이 1이므로). 이러한 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 10

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "azure" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-azure"

    capacity_per_instance = 1
    max_use_count = 1
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name                = "my-linux-scale-set" # Azure scale set name
      subscription_id     = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
      resource_group_name = "my-resource-group"

    [runners.autoscaler.connector_config]
      username               = "runner"
      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"

Azure 스케일 세트를 사용하여 인스턴스당 다섯 개의 작업, 무제한 사용#

사전 요구 사항:

  • 최소 git과 GitLab Runner가 설치된 사용자 정의 이미지.
  • 자동 스케일링 모드가 manual로 설정되고 오버프로비저닝이 꺼진 Azure 스케일 세트. 러너가 스케일링을 처리합니다.

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

  • 인스턴스당 용량 5
  • 무제한 사용 횟수
  • 유휴 스케일 5
  • 20분의 유휴 시간
  • 최대 인스턴스 수 10

용량이 5로 설정되고 사용 횟수가 무제한이면, 각 인스턴스는 인스턴스 수명 동안 5개의 작업을 동시에 실행합니다.

이러한 환경에서 실행되는 작업은 격리가 거의 없고 각 작업이 다른 작업의 성능에 영향을 미칠 수 있으므로 신뢰할 수 있어야 합니다.

유휴 스케일이 2이면, 사용 중인 용량이 5 미만으로 떨어질 때마다 하나의 유휴 인스턴스가 생성됩니다. 유휴 인스턴스는 최소 20분 동안 유지됩니다.

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

concurrent = 50

[[runners]]
  name = "instance autoscaler example"
  url = "https://gitlab.com"
  token = "<token>"
  shell = "sh"

  executor = "instance"

  # Autoscaler config
  [runners.autoscaler]
    plugin = "azure" # for >= 16.11, ensure you run `gitlab-runner fleeting install` to automatically install the plugin

    # for versions < 17.0, manually install the plugin and use:
    # plugin = "fleeting-plugin-azure"

    capacity_per_instance = 5
    max_use_count = 0
    max_instances = 10

    [runners.autoscaler.plugin_config] # plugin specific configuration (see plugin documentation)
      name                = "my-windows-scale-set" # Azure scale set name
      subscription_id     = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
      resource_group_name = "my-resource-group"

    [runners.autoscaler.connector_config]
      username               = "Administrator"
      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"

슬롯 기반 cgroup 지원#

Instance 실행기는 동시 작업 간의 향상된 리소스 격리를 위한 슬롯 기반 cgroup을 지원합니다. 활성화되면, GITLAB_RUNNER_SLOT_CGROUP 환경 변수가 작업에 자동으로 제공되어 슬롯별 cgroup 아래에서 프로세스를 실행할 수 있습니다.

슬롯 기반 cgroup에 대한 자세한 정보(이점, 사전 요구 사항, 구성, 설정 지침 포함)는 슬롯 기반 cgroup 지원을 참조하세요.

GitLab Runner 슬롯 cgroup 환경 변수 사용#

Instance 실행기는 GITLAB_RUNNER_SLOT_CGROUP 환경 변수를 작업에 제공합니다. 이 변수를 systemd-run 또는 cgexec과 같은 도구와 함께 사용하여 슬롯별 cgroup 아래에서 프로세스를 실행합니다.

사용 예시 및 문제 해결에 대해서는 슬롯 기반 cgroup 문서의 Instance 실행기 섹션을 참조하세요.

문제 해결#

Instance 실행기를 사용할 때 다음과 같은 문제가 발생할 수 있습니다:

sh: 1: eval: Running on ip-x.x.x.x via runner-host...n: not found#

이 오류는 일반적으로 준비 단계의 eval 명령이 실패할 때 발생합니다. 이 오류를 해결하려면 bash 셸로 전환하고 기능 플래그 FF_USE_NEW_BASH_EVAL_STRATEGY를 활성화하세요.