GitLab Runnerをインストールし、Docker Machineに登録します。
オートスケール機能はGitLab Runner 1.1.0で導入されました。
オートスケールアーキテクチャの概要については、オートスケーリングに関する包括的なドキュメントをご覧ください。
Dockerマシンのフォーク版
DockerはDocker Machineを非推奨としました。しかし、GitLabはDocker MachineのExecutorに依存しているGitLab RunnerユーザーのためにDocker Machineのフォークをメンテナーしています。このフォークはdocker-machine
の最新のmain
ブランチをベースに、以下のバグに対するパッチを追加したものです:
- DigitalOceanドライバのRateLimitを認識するようにしました。
- Googleドライバのオペレーションチェックにバックオフを追加しました。
- マシン作成に
--google-min-cpu-platform
オプションを追加 - Google ドライバにキャッシュ IP を使用
- AWSドライバにキャッシュIPを使用
- Google Compute EngineでGPUを使用するためのサポートを追加
- IMDSv2でのAWSインスタンス実行のサポート
Docker Machineフォークの意図は、ランニングコストに影響するクリティカルな問題やバグのみを修正することです。新しい機能は追加されません。
環境の準備
オートスケール機能を利用するには、Docker MachineとGitLab Runnerが同じマシンにインストールされている必要があります:
- Dockerが新しいマシンを生成するBastionサーバーとなるLinuxベースの新しいマシンにログインしてください。
- GitLab Runnerのインストール
- Docker MachineフォークからDocker Machineをインストールします。
- オプションですが、オートスケールランナーで使用するプロキシコンテナレジストリとキャッシュサーバーを準備することを推奨します。
GitLab Runner の設定
-
gitlab-runner
と一緒にdocker-machine
を使うためのコアコンセプトを理解しましょう: -
初めてDocker Machineを使うときは、Docker Machine Driverを使って手動で
docker-machine create ...
。GitLab Runner MachineOptionsセクションで設定するオプションと一緒にこのコマンドを実行してください。これでDocker Machineの環境が適切にセットアップされ、指定したオプションの検証にもなります。この後、docker-machine rm [machine_name]
でマシンを破棄して Runner を起動します。最初の使用時に行われるdocker-machine create
への複数の同時リクエストは良くありません。docker+machine
Executorが使用されている場合、Runnerはいくつかの同時実行docker-machine create
コマンドをスピンアップする可能性があります。この環境でDocker Machineを使用したことがない場合、起動した各プロセスはSSHキーとSSL証明書(GitLab Runnerと自動スケールされたスポーンされたマシン上のDocker Engine間のDocker API認証用)を準備しようとし、これらの同時プロセスは互いに妨害し合います。これは動作しない環境になってしまう可能性があります。そのため、GitLab RunnerをDocker Machineで初めてセットアップするときは、手動でテストマシンを作成することが重要です。 -
Runnerを登録し、尋ねられたら
docker+machine
Executorを選択してください。 -
config.toml
を編集し、Docker Machineを使用するようにランナーを設定します。GitLab Runner Autoscalingの詳細については、専用ページをご覧ください。 - では、プロジェクトで新しいパイプラインを開始してみましょう。数秒後に
docker-machine ls
を実行すると、新しいマシンが作成されているのが見えるはずです。
GitLab Runner のアップグレード
- オペレーティングシステムが自動的にGitLab Runnerを再起動するように設定されているかどうかを確認します(サービスファイルを確認するなど):
-
もしそう**であれば、サービスマネージャーが
SIGQUIT
を使うように設定されていることを確認し、サービスのツールを使ってプロセスを停止してください:# For systemd sudo systemctl stop gitlab-runner # For upstart sudo service gitlab-runner stop
-
もしそうでなければ、手動でプロセスを停止してください:
sudo killall -SIGQUIT gitlab-runner
[SIGQUIT
シグナルを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.21
をダウンロードしてインストールする場合:curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.21/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フォークを使用して、グラフィック処理ユニット(GPU)を備えたGoogle Compute Engineインスタンスを作成することができます。GPUをDocker Executorで動作させるには、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
](https://cloud.google.com/compute/docs/gpus/create-vm-with-gpus#gcloud_1)の[コマンドライン引数に対応します。詳細については、GPUをアタッチしたVMの作成に関するGoogleのドキュメントを参照してください。
Docker Machineオプションの検証
システムを準備し、Google Compute EngineでGPUを作成できることをテストします:
-
Docker MachineのGoogle Compute Engineドライバの認証情報を設定します。VMにデフォルトのサービスアカウントがない場合、環境変数をRunnerにエクスポートする必要があるかもしれません。これをどのように行うかは、Runnerの起動方法によって異なります。例えば
-
systemd
またはupstart
経由:カスタム環境変数の設定に関するドキュメントを参照してください。 - Kubernetes経由でHelm Chartを使用します:
values.yaml
のエントリを更新します。 - Docker経由:
-e
オプションを使用します(例えば、docker run -e GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json gitlab/gitlab-runner
)。
-
-
docker-machine
が希望のオプションで仮想マシンを作成できることを確認します。例えば、NVIDIA Telsa P4アクセラレータを1つ搭載した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
の設定でDocker Executorが利用可能な全てのGPUを使用するように設定します。次に、Docker MachineオプションをGitLab Runnerrunners.machine
設定](../configuration/advanced-configuration.md#the-runnersmachine-section)の[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" ]