使用映像檔串流來縮短容器啟動時間

本文說明如何使用映像檔串流,將容器映像檔提取至 Batch 容器作業。

有了映像檔串流,Batch 工作不必等待容器映像檔下載完畢即可初始化,因此具有下列優點:

  • 拉取大型圖片時延遲時間縮短
  • 更快開始執行工作

事前準備

  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 僅支援儲存在 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-east1us。容器位置必須與 Batch 作業 VM 的位置相同。
  • PROJECT-ID:包含容器映像檔的專案。如果您的專案 ID 包含冒號 (:),請參閱網域範圍專案
  • REPOSITORY:儲存映像檔的存放區名稱。
  • IMAGE:容器映像檔的名稱。
  • TAG:套用至圖片的標記。

後續步驟