このドキュメントでは、イメージ ストリーミングを使用してコンテナ イメージをバッチ コンテナ ジョブに pull する方法について説明します。
イメージ ストリーミングを使用すると、コンテナ イメージのダウンロードが完了するのを待たずに Batch ジョブを初期化できます。これにより、次のメリットが得られます。
- 大きなイメージを pull する際のレイテンシの短縮
- ジョブの実行開始までの時間を短縮
準備
- Batch を以前に使用したことがない場合は、Batch を使ってみるを確認し、プロジェクトとユーザーの前提条件を完了して Batch を有効にします。
-
ジョブの作成に必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。
-
プロジェクトのバッチジョブ編集者(
roles/batch.jobsEditor
) -
ジョブのサービス アカウントのサービス アカウント ユーザー(
roles/iam.serviceAccountUser
)。これは、デフォルトでは Compute Engine のデフォルトのサービス アカウントです。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。
-
プロジェクトのバッチジョブ編集者(
まだ行っていない場合は、次のコマンドを実行して Container File System API を有効にします。
gcloud services enable containerfilesystem.googleapis.com
- コンテナ イメージが 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-east1
やus
など)です。コンテナのロケーションは、バッチジョブの VM のロケーションと同じにする必要があります。PROJECT-ID
: コンテナ イメージを含むプロジェクト。プロジェクト ID にコロン(:
)が含まれている場合は、ドメインをスコープとするプロジェクトをご覧ください。REPOSITORY
: イメージが保存されるリポジトリの名前。IMAGE
: コンテナ イメージの名前です。TAG
: イメージに適用されるタグ。
次のステップ
- ジョブの作成または実行に問題がある場合は、トラブルシューティングをご覧ください。
- ジョブとタスクを表示する。
- 別のジョブ作成オプションを学習する。