GitLab Runner 설치 및 등록 자동 크기 조정을 위한 Docker Machine
- 자동 크기 조정 기능은 GitLab Runner 1.1.0에서 소개되었습니다.
자동 크기 조정 아키텍처에 대한 개요는 자동 크기 조정에 대한 포괄적인 설명서 를 참조하세요.
포크된 Docker Machine 버전
Docker는 Docker Machine을 폐기했습니다. 그러나,
Docker Machine executor에 의존하는 GitLab Runner 사용자를 위해
GitLab은 Docker Machine 포크
를 유지합니다. 이 포크는 docker-machine
의 최신 main
브랜치를 기반으로 하며
다음과 같은 버그에 대한 몇 가지 추가 패치가 적용되어 있습니다:
- DigitalOcean 드라이버 RateLimit aware 만들기
- Google 드라이버 운영 확인에 대한 백오프 추가
- 머신 생성을 위한
--google-min-cpu-platform
옵션 추가 - Google 드라이버에 대한 캐시된 IP 사용
- AWS 드라이버에 대한 캐시된 IP 사용
- Google Compute Engine에서 GPU 사용 지원
- IMDSv2로 AWS 인스턴스 실행 지원
Docker Machine 포크의 취지는 실행 비용에 영향을 주는 중대한 문제와 버그만 수정하는 것입니다. 새로운 기능은 추가되지 않을 것입니다.
환경 준비
자동 크기 조정 기능을 사용하려면 Docker와 GitLab Runner를 같은 머신에 설치해야 합니다:
- Docker가 새로운 머신으로부터 새로운 머신을 생성할 베스천 서버로 제공될 새로운 리눅스 기반 머신에 로그인합니다.
- GitLab Runner 설치
- Docker Machine 포크에서 Docker Machine 설치
- 선택 사항이지만 권장됨, 사용할 수 있는 자동 확장 러너와 함께 사용할 프록시 컨테이너 레지스트리 및 캐시 서버 를 준비합니다.
GitLab Runner 구성
-
docker-machine
을gitlab-runner
과 함께 사용하는 핵심 컨셉에 익숙해집니다: -
처음 사용하는 경우에는 Docker Machine을 매뉴얼으로 실행하는 것이 가장 좋습니다.
gitlab-runner
와 함께docker-machine create ...
명령을 실행하고 GitLab Runner MachineOptions 섹션에서 구성할 옵션과 함께 이 명령을 실행합니다. 이렇게 하면 Docker Machine 환경이 올바르게 설정되며 지정된 옵션의 유효성도 검증됩니다. 이후에 해당 머신을 제거하고 러너를 시작할 수 있습니다.처음 사용하는 경우docker+machine
executor를 사용하는 경우 러너는 몇 개의 동시docker-machine create
명령을 생성할 수 있습니다. Docker Machine이 이 환경에서 이전에 사용된 적이 없는 경우 각 시작된 프로세스는 SSH 키와 SSL 인증서 (자동크기 조정으로 생성된 Docker 엔진과 GitLab Runner 사이의 Docker API 인증을 위한 것)를 준비하려고 시도하고 서로 방해합니다. 이는 작동하지 않는 환경으로 끝날 수 있습니다. 따라서 Docker Machine을 처음 설정할 때는 머신을 매뉴얼으로 만드는 것이 중요합니다. -
러너를 등록하고 물어볼 때
docker+machine
executor를 선택합니다. -
config.toml
을 편집하고 러너가 Docker 머신을 사용하도록 구성합니다. 자세한 정보는 GitLab Runner 자동 크기 조정을 다루는 전용 페이지를 방문하세요. - 이제 프로젝트에서 새 파이프라인을 시작해 볼 수 있습니다. 몇 초 후에
docker-machine ls
를 실행하면 새 머신이 생성된 것을 볼 수 있습니다.
GitLab Runner 업그레이드
- 운영 체제가 GitLab Runner를 자동으로 다시 시작하도록 구성되어 있는지 확인합니다
(예: 서비스 파일을 확인하여 확인):
-
예이면, 서비스 관리자가
SIGQUIT
를 사용하도록 구성하는지 확인하고 서비스 도구를 사용하여 프로세스를 중지합니다:# systemd의 경우 sudo systemctl stop gitlab-runner # upstart의 경우 sudo service gitlab-runner stop
-
아니요이면, 프로세스를 매뉴얼으로 중지할 수 있습니다:
sudo killall -SIGQUIT gitlab-runner
SIGQUIT
신호를 보내면 프로세스가 우아하게 종료됩니다. 프로세스는 새 작업을 수락하지 않고 현재 작업이 완료되는 즉시 종료합니다. -
-
GitLab Runner가 종료될 때까지 기다립니다.
gitlab-runner status
명령을 사용하여 상태를 확인하거나 최대 30분 동안 우아한 종료를 기다릴 수 있습니다:for i in `seq 1 180`; do # 1800초 = 30분 gitlab-runner status || break sleep 10 done
- 이제 어떠한 작업도 중단하지 않고 새 버전의 GitLab Runner를 안전하게 설치할 수 있습니다.
Docker Machine 포크 버전 사용
설치
-
적절한
docker-machine
이진 파일을 다운로드합니다. 이진 파일을PATH
에서 접근 가능한 위치로 복사하고 실행할 수 있도록 만듭니다. 예를 들어,v0.16.2-gitlab.25
를 다운로드하고 설치하는 경우:curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.25/docker-machine-Linux-x86_64" cp docker-machine-Linux-x86_64 /usr/local/bin/docker-machine chmod +x /usr/local/bin/docker-machine
Google Compute Engine에서 GPU 사용
- GitLab Docker Machine
0.16.2-gitlab.10
및 GitLab Runner 13.9에서 소개되었습니다.
포크된 Docker Machine을 사용하여 Google Compute Engine 인스턴스에 그래픽 처리 장치 (GPU)를 가진 Google Compute Engine 인스턴스를 생성할 수 있습니다. Docker 실행자에서 GPU를 사용하려면 GitLab Runner 13.9가 필요합니다.
Docker Machine GPU 옵션
GPU를 사용하도록 인스턴스를 만들려면 이러한 Docker Machine 옵션을 사용하세요:
옵션 | 예제 | 설명 |
---|---|---|
--google-accelerator
| type=nvidia-tesla-p4,count=1
| 인스턴스에 연결할 GPU 가속기의 유형 및 수를 지정합니다 (type=TYPE,count=N 형식)
|
--google-maintenance-policy
| TERMINATE
| GPU 인스턴스의 라이브 마이그레이션을 Google Cloud가 허용하지 않으므로 항상 TERMINATE 를 사용하세요.
|
--google-machine-image
| https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110
| GPU를 지원하는 운영 체제의 URL입니다. 사용 가능한 이미지 디렉터리은 여기를 확인하세요. |
--google-metadata
| install-nvidia-driver=True
| 이 플래그는 이미지에 NVIDIA GPU 드라이버를 설치하도록 지시합니다. |
이러한 인수는 구글 컴퓨트를 사용한 명령행 인수에 매핑됩니다. 더 자세한 내용은 연결된 GPU가 있는 VM을 만드는 Google 문서를 참조하세요.
Docker Machine 옵션 확인
시스템을 준비하고 Google Compute Engine에서 GPU를 생성할 수 있는지 테스트하려면 다음을 수행하세요:
-
Docker Machine을 위한 Google Compute Engine 드라이버 자격 증명을 설정하세요. 기본 서비스 계정이 없는 경우 실행자에게 환경 변수를 내보내야 할 수 있습니다. 이는 실행자를 어떻게 시작하느냐에 따라 달라집니다. 예를 들어:
-
systemd
또는upstart
를 통해: 사용자 정의 환경 변수 설정 문서를 참조하세요. - Helm 차트를 통해 Kubernetes로: values.yaml 항목을 업데이트하세요.
- Docker를 통해:
-e
옵션을 사용하세요 (예:docker run -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gitlab/gitlab-runner
).
-
-
GPU가 있는 원하는 옵션으로 가상 머신을 만들 수 있는지 확인하세요. 예를 들어, 단일 NVIDIA Tesla P4 가속기가 있는
n1-standard-1
머신을 만들려면 이름을 지정하고 다음을 실행하세요:docker-machine create --driver google --google-project your-google-project \ --google-disk-size 50 \ --google-machine-type n1-standard-1 \ --google-accelerator type=nvidia-tesla-p4,count=1 \ --google-maintenance-policy TERMINATE \ --google-machine-image https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110 \ --google-metadata "install-nvidia-driver=True" test-gpu
-
GPU가 활성 상태인지 확인하기 위해 인스턴스에 SSH로 연결하고
nvidia-smi
명령을 실행하세요:$ docker-machine ssh test-gpu sudo nvidia-smi +-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla P4 Off | 00000000:00:04.0 Off | 0 | | N/A 43C P0 22W / 75W | 0MiB / 7611MiB | 3% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
-
돈을 절약하기 위해 이 테스트 인스턴스를 제거하세요:
docker-machine rm test-gpu
GitLab Runner 구성
-
이러한 옵션을 확인한 후, Docker 실행 프로그램을 구성하여 모든 사용 가능한 GPU를 사용하도록 합니다.
runners.docker
구성을 참조하세요. 그런 다음, GitLab Runnerrunners.machine
구성에서MachineOptions
설정에 Docker Machine 옵션을 추가합니다. 예를 들면:[runners.docker] gpus = "all" [runners.machine] MachineOptions = [ "google-project=your-google-project", "google-disk-size=50", "google-disk-type=pd-ssd", "google-machine-type=n1-standard-1", "google-accelerator=count=1,type=nvidia-tesla-p4", "google-maintenance-policy=TERMINATE", "google-machine-image=https://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110", "google-metadata=install-nvidia-driver=True" ]
문제 해결
Docker Machine 실행 프로그램을 사용하는 중에 다음과 같은 문제가 발생할 수 있습니다.
오류: 머신 생성 중 오류 발생
Docker Machine을 설치하는 동안 ERROR: Error creating machine: Error running provisioning: error installing docker
라는 오류가 발생할 수 있습니다.
Docker Machine은 새로 할당된 가상 머신에 Docker를 설치하기 위해 다음 스크립트를 사용합니다.
if ! type docker; then curl -sSL "https://get.docker.com" | sh -; fi
docker
명령어가 성공하면, Docker Machine은 Docker가 설치된 것으로 가정하고 계속합니다.
만일 성공하지 않는다면, Docker Machine은 https://get.docker.com
에서 스크립트를 다운로드하고 실행하려고 시도합니다. 설치에 실패하면 운영 체제가 Docker에서 더 이상 지원되지 않을 수 있습니다.
이 문제를 해결하기 위해, Docker Machine에서 GitLab Runner이 설치된 환경에서 MACHINE_DEBUG=true
를 설정하여 디버깅을 활성화할 수 있습니다.