- 중첩 가상화
- 환경을 자동 확장하기 위한 준비
- 실행기를 자동으로 구성
- AWS 자동 확장 그룹 구성 예시
- Google 클라우드 인스턴스 그룹 구성 예시
- Azure 스케일 세트 구성 예시
- 문제 해결
인스턴스 실행기
인스턴스 실행기는 러너 관리자가 처리하는 작업의 예상 볼륨을 수용하기 위해 필요한 작업당 호스트 인스턴스, 운영 체제 및 연결된 장치에 완전한 액세스를 필요로 하는 실행기입니다.
작업이 호스트 인스턴스, 운영 체제 및 장치에 완전한 액세스가 필요한 경우 인스턴스 실행기를 사용할 수 있습니다. 또한 인스턴스 실행기는 단일 및 다중 테넌트 작업을 다양한 격리 및 보안 수준으로 구성할 수 있습니다.
중첩 가상화
인스턴스 실행기는 GitLab에서 개발한 중첩 데몬을 사용한 중첩 가상화를 지원합니다. 중첩 데몬을 사용하면 격리되고 단기간의 작업에 사용되는 호스트 시스템에 사전 구성된 가상 머신을 만들고 삭제할 수 있습니다. 중첩은 Apple Silicon 인스턴스에서만 지원됩니다.
환경을 자동 확장하기 위한 준비
대상 플랫폼에 대한 확장을 활성화하려면 AWS, Google Cloud 또는 Azure fleeting 플러그인을 설치하십시오. AWS 플러그인은 베타 상태입니다. Google Cloud 및 Azure 플러그인은 실험 상태입니다.
GitLab에서 개발한 기타 공식 플러그인에 대해서는 fleeting
프로젝트를 참조하십시오.
환경을 자동으로 확장하려면 다음 단계를 수행하십시오:
- 호스트 플랫폼용 바이너리를 설치하십시오:
- 플러그인 바이너리가
PATH
환경 변수를 통해 찾을 수 있도록 확인하십시오. - 사용할 작업에 필요한 Git, GitLab Runner 및 의존성이 포함된 플랫폼용 VM 이미지를 만드십시오.
실행기를 자동으로 구성
준비 사항:
- 관리자이어야 합니다.
인스턴스 실행기를 자동으로 구성하려면 config.toml
의 다음 섹션을 업데이트하십시오:
AWS 자동 확장 그룹 구성 예시
인스턴스 당 하나의 작업
준비 사항:
- 적어도
git
및 GitLab Runner가 설치된 AMI. - AWS 자동 확장 그룹. 확장 정책에
none
을 사용하십시오. 러너가 확장을 처리합니다. - 올바른 권한을 갖춘 IAM 정책.
이 구성은 다음을 지원합니다:
- 각 인스턴스에 대한 용량은
1
. - 사용 횟수는
1
. - 유휴 배율은
5
. - 유휴 시간은 20분.
- 최대 인스턴스 수는
10
.
용량과 사용 횟수가 각각 1
로 설정된 경우, 각 작업에는 다른 작업에 영향을 받지 않는 안전한 순간적 인스턴스가 제공됩니다. 작업이 완료되면 실행된 인스턴스가 즉시 삭제됩니다.
각 인스턴스의 용량이 1
이고 유휴 배율이 5
인 경우, 러너는 미래의 수요를 처리할 5개의 완전한 인스턴스를 유지합니다. 이러한 인스턴스는 적어도 20분 동안 유지됩니다.
러너의 concurrent
필드를 10으로 설정합니다 (최대 인스턴스 수 * 각 인스턴스의 용량).
concurrent = 10
[[runners]]
name = "인스턴스 자동 스케일러 예시"
url = "https://gitlab.com"
token = "<토큰>"
shell = "sh"
executor = "instance"
# 자동 스케일러 설정
[runners.autoscaler]
plugin = "fleeting-plugin-aws"
각_인스턴스의_용량 = 1
최대_사용_횟수 = 1
최대_인스턴스_수 = 10
[runners.autoscaler.plugin_config] # 플러그인 특정 구성 (플러그인 설명서 참조)
name = "내-linux-asg" # AWS 자동 확장 그룹 이름
profile = "기본값" # 선택 사항, 기본값은 '기본값'
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"
인스턴스 당 다섯 개의 작업과 무제한 사용
준비 사항:
- 적어도
git
및 GitLab Runner가 설치된 AMI. - 확장 정책이
none
으로 설정된 AWS 자동 확장 그룹. 러너가 확장을 처리합니다. - 올바른 권한을 갖춘 IAM 정책.
이 구성은 다음을 지원합니다:
- 각 인스턴스에 대한 용량은
5
. - 사용 횟수에 제한이 없습니다.
- 유휴 배율은
5
. - 유휴 시간은 20분.
- 최대 인스턴스 수는
10
.
각 인스턴스의 용량이 5
이며 사용 횟수에 제한이 없는 경우, 각 인스턴스는 인스턴스의 수명 동안 5개의 작업을 동시에 실행합니다.
유휴 배율이 5
이므로 사용 중인 용량이 5 미만인 경우(각 인스턴스 용량으로 인해) 유휴할 수 있는 인스턴스가 1개 생성됩니다. 유휴 인스턴스는 적어도 20분 동안 유지됩니다.
이러한 환경에서 실행된 작업은 신뢰할 수 있어야 합니다. 각 작업 간에는 거의 격리가 없으며 각 작업이 다른 작업의 성능에 영향을 줄 수 있습니다.
러너의 concurrent
필드를 50으로 설정합니다 (최대 인스턴스 수 * 각 인스턴스의 용량).
concurrent = 50
[[runners]]
name = "인스턴스 자동 스케일러 예시"
url = "https://gitlab.com"
token = "<토큰>"
shell = "sh"
executor = "instance"
# 자동 스케일러 설정
[runners.autoscaler]
plugin = "fleeting-plugin-aws"
각_인스턴스의_용량 = 5
최대_사용_횟수 = 0
최대_인스턴스_수 = 10
[runners.autoscaler.plugin_config] # 플러그인 특정 구성 (플러그인 설명서 참조)
name = "내-windows-asg" # AWS 자동 확장 그룹 이름
profile = "기본값" # 선택 사항, 기본값은 '기본값'
config_file = "/home/user/.aws/config" # 선택 사항, 기본값은 '~/.aws/config'
credentials_file = "/home/user/.aws/credentials" # 선택 사항, 기본값은 '~/.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 인스턴스에서 중첩 가상화
필수 사항:
- nesting 및 Tart이 설치된 Apple Silicon AMI.
- Runner가 사용하는 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
미만인 경우(인스턴스당 용량으로 인해), 유휴 인스턴스가 생성되어 대기 중인 용량 2개를 수용합니다. 유휴 인스턴스는 최소 24시간 이상 유지됩니다. 이 시간은 AWS MacOS 인스턴스 호스트의 최소 24시간 할당 기간 때문입니다.
이 환경에서 실행되는 작업은 각 작업에 대해 중첩 가상화를 사용하므로 신뢰할 필요가 없습니다. 이는 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 = "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 클라우드 인스턴스 그룹 구성 예시
Google 클라우드 인스턴스 그룹을 사용하여 인스턴스 당 하나의 작업
필수 사항:
- 적어도
git
및 GitLab Runner가 설치된 사용자 정의 이미지. - Google 클라우드 인스턴스 그룹을 사용하고 있는 경우 스케일링 모드가
자동 조정하지 않음
으로 설정되어 있어야 합니다. 러너가 스케일을 처리합니다. - 올바른 권한이 있는 IAM 정책.
이 구성은 다음을 지원합니다:
- 인스턴스 당 용량이 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 = "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 클라우드 인스턴스 그룹을 사용하여 인스턴스 당 다섯 개의 작업
필수 사항:
- 적어도
git
및 GitLab Runner가 설치된 사용자 정의 이미지. - 인스턴스 그룹을 사용합니다. “스케일링 모드”에서 “자동 조정하지 않음”을 선택하십시오. 러너가 스케일을 처리합니다.
- 올바른 권한이 있는 IAM 정책.
이 구성은 다음을 지원합니다:
- 인스턴스 당 용량이 5입니다.
- 무제한 사용 횟수입니다.
- 유휴 스케일이 5입니다.
- 유휴 시간이 20분입니다.
- 최대 인스턴스 개수는 10입니다.
용량이 5
로 설정되고 사용 횟수가 무제한인 경우, 각 인스턴스에서는 수명 동안 5개의 작업이 동시에 실행됩니다.
이러한 환경에서 실행되는 작업은 서로 간에 격리가 적고 각 작업이 다른 작업의 성능에 영향을 줄 수 있기 때문에 신뢰할 수 있어야 합니다.
유휴 스케일이 5
로 설정되면 사용 가능한 용량이 5
미만인 경우(인스턴스당 용량으로 인해), 1개의 유휴 인스턴스가 생성되어 대기 중인 용량 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 = "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가 설치된 사용자 정의 이미지 - 자동 스케일링 모드가
매뉴얼
으로 설정된 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"
executor = "instance"
# 자동 스케일러 구성
[runners.autoscaler]
plugin = "fleeting-plugin-azure"
인스턴스 당 처리 능력 = 1
최대 사용 횟수 = 1
최대 인스턴스 = 10
[runners.autoscaler.plugin_config] # 플러그인별 구성 (플러그인 설명 참조)
name = "내 리눅스 스케일 세트" # Azure 스케일 세트 이름
구독 ID = "9b3c4602-cde2-4089-bed8-889e5a3e7102"
리소스 그룹 이름 = "내 리소스 그룹"
[runners.autoscaler.connector_config]
사용자 이름 = "러너"
암호 = "내 스케일 세트 정적 암호"
정적 자격 증명 사용 = true
타임아웃 = "10분"
외부 주소 사용 = true
[[runners.autoscaler.policy]]
비활성 카운트 = 5
비활성 시간 = "20m0s"
인스턴스 그룹을 사용하여 인스턴스 당 다섯 개의 작업, 무제한 사용 수
전제 조건:
- 적어도
git
및 GitLab Runner가 설치된 사용자 정의 이미지 - 자동 슼일링 모드가
매뉴얼
으로 설정된 Azure 스케일 세트. 러너가 스케일링을 처리함.
이 구성은 다음을 지원합니다:
- 인스턴스 당 처리 능력 5
- 무제한 사용 횟수
- 5분 후 비활성 상태로 전환
- 20분 후 폐기 비활성
- 최대 인스턴스 개수 10
처리 능력을 5
로 설정하고 사용 횟수를 무제한으로 설정할 경우 각 인스턴스는 수명 동안 5개의 작업을 동시에 실행합니다.
이러한 환경에서 실행된 작업은 서로 간의 격리가 미미하므로 신뢰할 수 있는 작업이어야 합니다. 각 작업이 다른 작업의 성능에 영향을 줄 수 있습니다.
비활성 상태로 설정된 가용 인스턴스가 5인 경우(인스턴스 당 처리 능력 때문에), 미사용 용량이 5개 미만일 때 1개의 비활성 인스턴스가 만들어집니다. 비활성 인스턴스는 적어도 20분 동안 유지됩니다.
러너 ‘concurrent’ 필드는 50(최대 인스턴스 수 * 인스턴스 당 처리 능력)로 설정됩니다.
concurrent = 50
[[runners]]
name = "인스턴스 자동 스케일러 예시"
url = "https://gitlab.com"
token = "<token>"
shell = "sh"
executor = "instance"
# 자동 스케일러 구성
[runners.autoscaler]
plugin = "fleeting-plugin-azure"
인스턴스 당 처리 능력 = 5
최대 사용 횟수 = 0
최대 인스턴스 = 10
[runners.autoscaler.plugin_config] # 플러그인별 구성 (플러그인 설명 참조)
name = "내 윈도우 스케일 세트" # Azure 스케일 세트 이름
구독 ID = "9b3c4602-cde2-4089-bee8-889e5a3e7102"
리소스 그룹 이름 = "내 리소스 그룹"
[runners.autoscaler.connector_config]
사용자 이름 = "관리자"
암호 = "내 스케일 세트 정적 암호"
정적 자격 증명 사용 = true
타임아웃 = "10분"
외부 주소 사용 = true
[[runners.autoscaler.policy]]
비활성 카운트 = 5
비활성 시간 = "20m0s"
문제 해결
인스턴스 실행자를 사용할 때 다음과 같은 문제가 발생할 수 있습니다:
sh: 1: eval: Running on ip-x.x.x.x via runner-host...n: not found
이 오류는 일반적으로 준비 단계에서 eval
명령이 실패할 때 발생합니다. 이 오류를 해결하려면 bash
쉘로 전환하고 피처 플래그FF_USE_NEW_BASH_EVAL_STRATEGY
를 활성화하세요.