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

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

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

  • 大きなイメージを 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 を含むようにサービス境界を更新します。

制限事項

バッチ画像ストリーミングには次の制限があります。

  • バッチは、Artifact Registry に保存されているコンテナ イメージのイメージ ストリーミングのみをサポートします。現在 Container Registry を使用してコンテナ イメージを管理している場合は、Artifact Registry に移行できます。
  • Batch ジョブの VM は、Artifact Registry にコンテナ イメージを保存する場所と同じロケーションで実行する必要があります。
  • Docker イメージ マニフェスト バージョン 2、スキーマ 1 を使用するコンテナはサポートされていません。
  • イメージ ストリーミングを使用する場合、コンテナ実行可能ファイルは次のフィールドのみをサポートします。
    • imageUri
    • commands
    • entrypoint
    • volumes
    • enableImageStreaming
  • 空のレイヤまたは重複するレイヤを含むコンテナ イメージはサポートされていません。

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

次の手順で、イメージ ストリーミングを使用するバッチ コンテナ ジョブを作成します。

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

次のステップ