正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Docker MachineでのオートスケールのためにGitLab Runnerをインストールして登録する

  • プラン: Free、Premium、Ultimate
  • 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated

Docker Machine ExecutorはGitLab 17.5で非推奨となりました。GitLab 20.0(2027年5月)で削除される予定です。GitLab 20.0まではDocker Machine Executorのサポートが継続されますが、新機能を追加する予定はありません。CI/CDジョブの実行を妨げる可能性のある重大なバグ、または実行コストに影響を与えるバグのみに対処します。Amazon Web Services(AWS)EC2、Microsoft Azure Compute、またはGoogle Compute Engine(GCE)でDocker Machine Executorを使用している場合は、GitLab Runner Autoscalerに移行してください。

オートスケールアーキテクチャの概要については、オートスケールに関する包括的なドキュメントをご覧ください。

Docker Machineのフォークバージョン

DockerではDocker Machineが非推奨になりました。ただしGitLabでは、Docker Machine executorを利用しているGitLab RunnerユーザーのためにDocker Machineフォークを維持しています。このフォークは、docker-machineの最新のmainブランチをベースにしており、次のバグに対する追加パッチがいくつか含まれています:

Docker Machineフォークの目的は、実行コストに影響を与える重大な問題とバグのみを修正することです。新しい機能を追加する予定はありません。

環境を準備する

オートスケール機能を使用するには、DockerとGitLab Runnerが同じマシンにインストールされている必要があります:

  1. 踏み台サーバーとして機能できる新しいLinuxベースのマシンにサインインします。この踏み台サーバーでDockerが新しいマシンを作成します。
  2. GitLab Runnerをインストールします
  3. Docker MachineフォークからDocker Machineをインストールします。
  4. オプションですが、オートスケールされたRunnerで使用するプロキシコンテナレジストリとキャッシュサーバーを準備することを推奨します。

GitLab Runnerを設定する

  1. docker-machinegitlab-runnerを使用するという基本的な概念を理解します:

  2. Docker Machineを初めて使用する場合は、Docker Machineドライバーを指定したdocker-machine create ...コマンドを手動で実行する方法が最良の方法です。[runners.machine]セクションのMachineOptionsで設定するオプションを使用して、このコマンドを実行します。この手法ではDocker Machine環境が適切に設定され、指定されたオプションが検証されます。その後にdocker-machine rm [machine_name]でマシンを破棄し、Runnerを起動できます。

    最初の使用時に実行されるdocker-machine createに対する複数の同時リクエストは、適切ではありません。docker+machine executorが使用されている場合、Runnerはいくつかの同時docker-machine createコマンドを起動することがあります。Docker Machineがこの環境に初めて導入される場合、各プロセスはDocker API認証のためのSSHキーとSSL証明書の作成を試行します。この動作が原因で、同時実行プロセスが互いに干渉します。これにより、動作しない環境になる可能性があります。そのため、Docker MachineでGitLab Runnerを初めてセットアップするときには、テストマシンを手動で作成することが重要です。

    1. Runnerを登録し、要求されたらdocker+machine executorを選択します。
    2. config.tomlを編集し、Docker Machineを使用するようにRunnerを設定します。GitLab Runnerオートスケールに関する詳細情報を記載した専用ページを参照してください。
    3. これで、プロジェクトでパイプラインを新規作成して開始できます。数秒後にdocker-machine lsを実行すると、新しいマシンが作成されていることがわかります。

GitLab Runnerをアップグレードする

  1. ご使用のオペレーティングシステムがGitLab Runnerを自動的に再起動するように設定されているかどうかを確認します(たとえば、そのサービスファイルを確認します):

    • 設定されている場合は、サービスマネージャーがSIGQUITを使用するように設定されていることを確認し、サービスツールを使用してプロセスを停止します:

      # For systemd
      sudo systemctl stop gitlab-runner
      
      # For upstart
      sudo service gitlab-runner stop
    • 設定されていない場合は、プロセスを手動で停止できます:

      sudo killall -SIGQUIT gitlab-runner

    SIGQUITシグナルを送信すると、プロセスが正常に停止します。プロセスは新しいジョブの受け入れを停止し、現在のジョブが完了すると直ちに終了します。

  2. GitLab Runnerが終了するまで待ちます。gitlab-runner statusでその状態を確認するか、正常なシャットダウンが行われるまで最大30分間待つことができます:

    for i in `seq 1 180`; do # 1800 seconds = 30 minutes
        gitlab-runner status || break
        sleep 10
    done
  3. これで、ジョブを中断することなく、新しいバージョンのGitLab Runnerを安全にインストールできます。

Docker Machineのフォークバージョンを使用する

インストール

  1. 適切なdocker-machineバイナリをダウンロードします。PATHがアクセスできる場所にバイナリをコピーし、実行可能にします。たとえば、v0.16.2-gitlab.40をダウンロードしてインストールするには、次のようにします:

    curl -O "https://gitlab-docker-machine-downloads.s3.amazonaws.com/v0.16.2-gitlab.40/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を使用する

GPUはすべてのexecutorでサポートされています。GPUサポートのためだけにDocker Machineを使用する必要はありません。Docker Machine ExecutorはGPUノードをスケールアップおよびスケールダウンします。この目的でKubernetes executorを使用することもできます。

Docker Machineフォークを使用して、GPU(グラフィックスプロセッシングユニット)を使用するGoogle Compute Engineインスタンスを作成できます。

Docker Machine GPUオプション

GPUを使用するインスタンスを作成するには、次のDocker Machineオプションを使用します:

オプション説明
--google-acceleratortype=nvidia-tesla-p4,count=1インスタンスにアタッチするGPUアクセラレータのタイプと数を指定します(type=TYPE,count=N形式)。
--google-maintenance-policyTERMINATEGoogle CloudではGPUインスタンスのライブ移行が許可されていないため、常にTERMINATEを使用してください。
--google-machine-imagehttps://www.googleapis.com/compute/v1/projects/deeplearning-platform-release/global/images/family/tf2-ent-2-3-cu110GPU対応オペレーティングシステムのURL。使用可能なイメージのリストを参照してください。
--google-metadatainstall-nvidia-driver=Trueこのフラグは、NVIDIA GPUドライバーをインストールするようにイメージに指示します。

これらの引数は、gcloud computeのコマンドライン引数にマップされます。詳細については、GPUがアタッチされたVMの作成に関するGoogleドキュメントを参照してください。

Docker Machineオプションを検証する

システムを準備し、Google Compute EngineでGPUを作成できることをテストするには、次の手順に従います:

  1. Docker MachineのGoogle Compute Engineドライバー認証情報をセットアップします。場合によっては、VMにデフォルトのサービスアカウントがないときに環境変数をRunnerにエクスポートする必要があります。その方法は、Runnerの起動方法によって異なります。たとえば、次のいずれかを使用します:

  2. 必要なオプションを指定したdocker-machineが仮想マシンを作成できることを確認します。たとえば、1つの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
  3. 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                                                 |
    +-----------------------------------------------------------------------------+
  4. 費用を節約するために、このテストインスタンスを削除します:

    docker-machine rm test-gpu

GitLab Runnerを設定する

  1. これらのオプションを検証したら、runners.docker設定で使用可能なすべてのGPUを使用するようにDocker executorを設定します。次に、GitLab Runner runners.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 executorを使用するときに次の問題が発生する可能性があります。

エラー: マシンの作成エラー

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でデバッグを有効にできます。

エラー: Dockerデーモンに接続できない

ジョブは、準備段階で次のエラーメッセージで失敗することがあります:

Preparing environment
ERROR: Job failed (system failure): prepare environment: Cannot connect to the Docker daemon at tcp://10.200.142.223:2376. Is the docker daemon running? (docker.go:650:120s). Check https://docs.gitlab.com/runner/shells/#shell-profile-loading for more information

このエラーは、Docker Machine executorによって作成されたVMで、Dockerデーモンが予期されている時間内に起動できなかった場合に発生します。この問題を修正するには、[runners.docker]セクションのwait_for_services_timeoutの値を大きくします。