本文說明如何使用映像檔串流,將容器映像檔提取至 Batch 容器作業。
有了映像檔串流,Batch 工作不必等待容器映像檔下載完畢即可初始化,因此具有下列優點:
- 拉取大型圖片時延遲時間縮短
- 更快開始執行工作
事前準備
- 如果您從未使用過 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
。
限制
批次圖片串流有下列限制:
- Batch 僅支援儲存在 Artifact Registry 中的容器映像檔進行映像檔串流。如果您目前使用 Container Registry 管理容器映像檔,可以改用 Artifact Registry。
- 您必須在與 Artifact Registry 中儲存容器映像檔的位置相同的區域中,執行 Batch 工作的 VM。
- 系統不支援使用 Docker 映像檔資訊清單第 2 版 (結構定義 1) 的容器。
- 使用映像檔串流時,容器可執行檔僅支援下列欄位:
imageUri
commands
entrypoint
volumes
enableImageStreaming
- 系統不支援含有空白層或重複層的容器映像檔。
建立使用影像串流的工作
如要建立使用映像檔串流的 Batch 容器工作,請執行下列操作:
使用 Google Cloud CLI 或 REST API 建立容器作業。如要為可執行的容器啟用映像檔串流,請將 enableImageStreaming
欄位設為 true
,並將 imageUri
欄位設為儲存在 Artifact Registry 位置的映像檔,該位置包含工作 VM 的位置。
"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
。容器位置必須與 Batch 作業 VM 的位置相同。PROJECT-ID
:包含容器映像檔的專案。如果您的專案 ID 包含冒號 (:
),請參閱網域範圍專案。REPOSITORY
:儲存映像檔的存放區名稱。IMAGE
:容器映像檔的名稱。TAG
:套用至圖片的標記。