GitLab Runner를 위한 자동 확장을 위한 설치 및 등록
- 자동 확장 기능은 GitLab Runner 1.1.0에서 도입되었습니다.
Amazon Web Services (AWS) EC2, Microsoft Azure Compute 또는 Google Compute Engine (GCE)에서
Docker Machine 실행기를 사용하고 있는 경우,
GitLab Runner Autoscaler로 마이그레이션하세요.
자동 확장 아키텍처에 대한 개요는 다음을 참조하세요:
자동 확장에 대한 포괄적인 문서
Docker 머신의 포크 버전
Docker에서 Docker Machine을 사용 중단했습니다. 하지만,
GitLab은 Docker Machine 실행기에 의존하는 GitLab Runner 사용자들을 위한
Docker Machine 포크를 유지합니다. 이 포크는
다음 버그에 대한 추가 패치와 함께
docker-machine
의 최신 main
브랜치를 기반으로 합니다:
- DigitalOcean 드라이버의 비율 제한 인식
- 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 설정
-
gitlab-runner
와 함께docker-machine
을 사용할 때의
핵심 개념을 숙지하세요: -
Docker Machine을 처음 사용할 때는
Docker Machine Driver와 함께
docker-machine create ...
명령을 수동으로 실행하는 것이 가장 좋습니다.
이 명령을
MachineOptions에
[runners.machine]
섹션에 구성할 옵션으로 실행하세요.
이렇게 하면 Docker Machine 환경이 제대로 설정되며,
지정된 옵션을 검증하는 데에도 좋습니다.
이후docker-machine rm [machine_name]
로 머신을 삭제하고 러너를 시작할 수 있습니다.첫 사용 시docker-machine create
에 대한 여러 동시 요청은 좋지 않습니다.
docker+machine
실행기를 사용하는 경우, 러너는
몇 개의 동시docker-machine create
명령을 실행할 수 있습니다.
이 환경에서 Docker Machine이 이전에 사용되지 않았다면,
시작된 각 프로세스는 SSH 키와 SSL 인증서를 준비하려고 시도합니다
(자동 확장된 머신에서 GitLab Runner와 Docker Engine 간의 Docker API 인증을 위해).
이러한 동시 프로세스는 서로 방해가 될 수 있습니다.
이로 인해 작동하지 않는 환경이 될 수 있습니다.
따라서 GitLab Runner를 Docker Machine과 함께 설정할 때는
처음에 테스트 머신을 수동으로 생성하는 것이 중요합니다. -
런너 등록 및 요청 시
docker+machine
실행기를 선택하세요. -
config.toml
을 편집하고
러너가 Docker Machine을 사용하도록 구성하세요.
GitLab Runner Autoscaling에 대한
자세한 정보를 다루는 전용 페이지를 방문하세요. - 이제 프로젝트에서 새 파이프라인을 시도하고 시작할 수 있습니다.
몇 초 후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.29
를 다운로드하고 설치하려면:curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.29/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에서 소개됨.
참고: GPU는 모든 실행기에서 지원됩니다. GPU 지원을 위해 꼭 Docker Machine을 사용할 필요는 없습니다. Docker Machine 실행기를 사용하면 GPU 노드를 쉽게 확장하고 축소할 수 있지만, 이는 Kubernetes 실행기로도 가능합니다.
포크된 Docker Machine을 사용하여 그래픽 처리 장치(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 인스턴스의 라이브 마이그레이션이 허용되지 않으므로 항상 TERMINATE 를 사용하세요. Google Cloud는 라이브 마이그레이션을 허용하지 않습니다. |
--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 Chart와 함께 Kubernetes를 통해:
values.yaml
항목 업데이트. - Docker를 통해:
-e
옵션 사용 (예:docker run -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gitlab/gitlab-runner
).
-
-
docker-machine
이 원하는 옵션으로 가상 머신을 생성할 수 있는지 확인하세요.예를 들어, 단일 NVIDIA Tesla P4 가속기를 가진
n1-standard-1
머신을 생성하려면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 구성하기
-
이러한 옵션을 확인한 후,
runners.docker
구성에서 사용할 수 있는 모든 GPU를 사용하도록 Docker 실행기를 구성합니다. 그런 다음 `GitLab Runner ‘runners.machine’ 구성의 ‘MachineOptions’ 설정에 Docker 머신 옵션을 추가합니다. 예를 들어:[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 머신 실행기를 사용할 때 다음과 같은 문제가 발생할 수 있습니다.
ERROR: 머신 생성 중 오류
Docker 머신을 설치할 때 ERROR: Error creating machine: Error running provisioning: error installing docker
라는 오류가 발생할 수 있습니다.
Docker 머신은 새로 프로비저닝된 가상 머신에 Docker를 설치하기 위해 이 스크립트를 사용합니다:
if ! type docker; then curl -sSL "https://get.docker.com" | sh -; fi
docker
명령이 성공하면 Docker 머신은 Docker가 설치되었다고 가정하고 계속 진행합니다.
성공하지 않는 경우, Docker 머신은 https://get.docker.com
에서 스크립트를 다운로드하고 실행하려고 합니다. 설치가 실패하면 운영 체제가 더 이상 Docker에서 지원되지 않을 가능성이 있습니다.
이 문제를 해결하려면 GitLab Runner가 설치된 환경에서 MACHINE_DEBUG=true
로 설정하여 Docker 머신에서 디버깅을 활성화할 수 있습니다.