イメージ ストリーミングを使用してコンテナの起動時間を短縮する

このドキュメントでは、イメージ ストリーミングを使用してコンテナ イメージを Batch コンテナ ジョブに pull する方法について説明します。

イメージ ストリーミングを使用すると、コンテナ イメージのダウンロードが完了するのを待たずにバッチジョブを初期化できるため、次のメリットがあります。

  • 大きなイメージを pull する際のレイテンシの短縮
  • ジョブの実行開始までの時間の短縮

準備

  1. Batch を以前に使用したことがない場合は、 Batch を使ってみる を確認し、 プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
  2. ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

    必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

  3. まだ有効にしていない場合は、次のコマンドを実行して Container File System API を有効にします。

    gcloud services enable containerfilesystem.googleapis.com
    
  4. コンテナ イメージが VPC Service Controls で保護されている場合は、 サービス境界を更新して containerfilesystem.googleapis.comを含めます。

制限事項

Batch イメージ ストリーミングには次の制限があります。

イメージ ストリーミングを使用するジョブを作成する

イメージ ストリーミングを使用する Batch コンテナ ジョブを作成するには、次の操作を行います。

Google Cloud CLI または REST API を使用して コンテナ ジョブを作成します。 コンテナ実行可能なイメージ ストリーミングを有効にするには、enableImageStreaming フィールドを true に設定し、ジョブの VM のロケーションが含まれる Artifact Registry のロケーションに保管されているイメージに imageUri フィールドを設定します。

"container": {
    ...
    "enableImageStreaming": true
        }

たとえば、イメージ ストリーミングを使用するジョブには、次のような JSON 構成ファイルが作成されます。

{
    "taskGroups": [
        {
            "taskCount": "1",
            "taskCountPerNode": "1",
            "taskSpec": {
                "runnables": [
                    {
                        "container": {
                            "imageUri": "LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE:TAG",
                            "enableImageStreaming": true
                        }
                    }
                ]
            }
        }
    ],
    "allocationPolicy": {
        "instances": [
            {
                "policy": {
                    "machineType": "e2-standard-4"
                }
            }
        ]
    },
    "logsPolicy": {
        "destination": "CLOUD_LOGGING"
    }
}

次の値を置き換えます。

  • LOCATION: イメージが保存されているリポジトリのリージョンまたはマルチリージョンのロケーションus-east1us など)です。コンテナのロケーションは、Batch ジョブの VM のロケーションと同じである必要があります。
  • PROJECT-ID: コンテナ イメージを含むプロジェクト。プロジェクト ID にコロン(:)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。
  • REPOSITORY: イメージが保存されるリポジトリの名前。
  • IMAGE: コンテナ イメージの名前です。
  • TAG: イメージに適用されるタグ。

次のステップ