GitLab Runner를 Docker Machine과 함께 자동 스케일링하기 위한 설치 및 등록
- Autoscaling 기능은 GitLab Runner 1.1.0에서 소개되었습니다.
자동 스케일 아키텍처에 대한 개요는 자동 스케일링에 대한 포괄적인 문서 를 참조하십시오.
포크된 버전의 Docker Machine
Docker는 Docker Machine의 사용을 중단했습니다. 그러나
GitLab은 Docker Machine executor에 의존하는 GitLab Runner 사용자를 위해 Docker Machine fork
를 유지하고 있습니다. 이 포크는 docker-machine
의 최신 main
브랜치를 기반으로 하며
다음과 같은 버그에 대한 추가 패치가 포함되어 있습니다:
- DigitalOcean 드라이버 RateLimit 처리
- Google 드라이버 작업 확인을 위한 백오프 추가
- 머신 생성을 위한
--google-min-cpu-platform
옵션 추가 - Google 드라이버를 위한 캐시된 IP 사용
- AWS 드라이버를 위한 캐시된 IP 사용
- Google Compute Engine에서 GPU 사용 지원
- IMDSv2를 사용하여 AWS 인스턴스 실행 지원
Docker Machine fork의 의도는 실행 비용에 영향을 미치는 중요한 문제 및 버그만 수정하는 것입니다. 새로운 기능은 추가되지 않을 것입니다.
환경 준비
자동 스케일 기능을 사용하려면 Docker와 GitLab Runner를 동일한 머신에 설치해야 합니다:
- Docker가 새로 생성될 머신으로 작동할 산막 서버로 로그인
- GitLab Runner 설치
- Docker Machine fork에서 Docker Machine 설치
- 선택적으로, 권장되는 것은 자동으로 확장되는 러너와 함께 사용될 프록시 컨테이너 레지스트리 및 캐시 서버 미리 준비하는 것입니다.
GitLab Runner 구성
-
docker-machine
을 사용하는 핵심적인 개념에 익숙해지십시오:- GitLab Runner 자동 스케일링을 읽어보세요.
- GitLab Runner MachineOptions을 읽어보세요.
-
처음으로 Docker Machine을 사용하는 경우, Docker Machine Driver와 함께
docker-machine create ...
명령을 수동으로 실행하는 것이 가장 좋습니다. 이 명령은 GitLab Runner MachineOptions 섹션에서 구성할 옵션과 함께 실행하세요. 이렇게 하면 Docker Machine 환경이 올바르게 설정되고 지정된 옵션의 유효성도 검증됩니다. 이후에, 머신을docker-machine rm [machine_name]
으로 제거하고 러너를 시작하세요.참고: 처음 사용할 때 동시에 여러 요청으로
docker-machine create
를 수행하는 것은 좋지 않습니다.docker+machine
executor를 사용하는 경우, 러너는 여러 동시docker-machine create
명령을 실행할 수 있습니다. Docker Machine이 이 환경에서 이전에 사용되지 않은 경우, 각 시작된 프로세스는 SSH 키와 SSL 인증서를 준비하려고 시도하며, 이러한 동시 프로세스는 서로 방해합니다. 이는 작동하지 않는 환경으로 끝날 수 있습니다. 따라서 GitLab Runner를 Docker Machine으로 처음 설정할 때 매우 중요한 것은 테스트 머신을 수동으로 생성하는 것입니다. -
러너 등록하고 요청되었을 때
docker+machine
executor를 선택하세요. -
config.toml
파일을 편집하고 러너가 Docker Machine을 사용하도록 구성하세요. GitLab Runner Autoscaling에 대한 자세한 정보가 포함된 전용 페이지를 방문하세요. - 이제 프로젝트에서 새로운 파이프라인을 시작해 보세요. 몇 초 후에
docker-machine ls
를 실행하면 새로운 머신이 생성된 것을 볼 수 있어야 합니다.
GitLab Runner 업그레이드
- 운영 체제가 GitLab Runner를 자동으로 다시 시작하도록 구성되어 있는지 확인합니다 (예: 서비스 파일을 확인함으로써).
-
yes인 경우, 서비스 관리자가
SIGQUIT
를 사용하도록 설정하고 프로세스를 중지하기 위해 서비스 도구를 사용하세요:# systemd의 경우 sudo systemctl stop gitlab-runner # upstart의 경우 sudo service gitlab-runner stop
-
no인 경우, 프로세스를 수동으로 중지할 수 있습니다:
sudo killall -SIGQUIT gitlab-runner
SIGQUIT
신호를 보내면 프로세스가 정상적으로 중지됩니다. 프로세스는 새 작업을 수락하지 않으며, 현재 작업이 완료되면 종료됩니다. -
-
GitLab Runner가 종료될 때까지 기다립니다.
gitlab-runner status
로 상태를 확인하거나 다음과 같이 최대 30분 동안 정상적인 종료를 기다릴 수 있습니다:for i in `seq 1 180`; do # 1800 seconds = 30 minutes 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 인스턴스를 생성할 수 있습니다. 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
|
Google Cloud에서는 GPU 인스턴스를 라이브 마이그레이션 할 수 없습니다 때문에 항상 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 드라이버를 설치하도록 지시합니다. |
이러한 인수는 gcloud compute의 명령줄 인수에 매핑됩니다. GPU가 부착된 VM을 만드는 방법에 대해 자세히 알아보려면 Google 문서를 참조하세요.
Docker Machine 옵션 확인
시스템을 준비하고 Google Compute Engine에서 GPU를 생성할 수 있는지 확인하려면 다음을 수행하세요:
-
Docker Machine에 대한 Google Compute Engine 드라이버 자격 증명을 설정하세요. VM에 기본 서비스 계정이 없는 경우 실행 프로그램에 환경 변수를 내보내야 할 수 있습니다. 이는 실행 프로그램을 어떻게 시작했는지에 따라 달라집니다. 예를 들어:
-
systemd
또는upstart
를 통해: 사용자 정의 환경 변수 설정 문서를 참조하세요. - Helm 차트를 사용한 Kubernetes를 통해: 값.yaml 항목을 업데이트하세요.
- Docker를 통해:
-e
옵션을 사용하세요 (예:docker run -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gitlab/gitlab-runner
).
-
-
docker-machine
이 원하는 옵션을 사용하여 가상 머신을 생성할 수 있는지 확인하세요. 예를 들어,n1-standard-1
머신을 하나의 NVIDIA Tesla P4 가속기와 함께 만들려면test-gpu
를 이름으로 지정하고 다음과 같이 실행하세요: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 executor를 구성하여 모든 사용 가능한 GPU를 사용하도록 합니다.
runners.docker
configuration에서. 그런 다음 Docker Machine 옵션을 GitLab Runnerrunners.machine
구성의MachineOptions
설정에 추가합니다. 예:[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 executor를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
ERROR: 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에서 지원되지 않을 수 있습니다.
이 문제를 해결하기 위해, GitLab Runner가 설치된 환경에서 MACHINE_DEBUG=true
로 Docker Machine의 디버깅을 활성화할 수 있습니다.