本文档介绍如何使用映像流式传输将容器映像拉取到 Batch 容器作业中。
借助映像流式传输,批量作业无需等待容器映像下载完毕即可初始化,这具有以下优势:
- 缩短了拉取大型映像时的延迟时间
- 缩短了开始执行作业的时间
准备工作
- 如果您之前未使用过 Batch,请查看 Batch 使用入门 ,并完成 项目和用户的前提条件,以启用 Batch。
-
如需获得创建作业所需的权限,请让您的管理员授予您以下 IAM 角色:
- Batch Job Editor (
roles/batch.jobsEditor) 项目的 - Service Account User (
roles/iam.serviceAccountUser) 在作业的服务账号上,默认情况下为默认 Compute Engine 服务账号
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
- Batch Job Editor (
如果您尚未启用 Container File System API,请运行以下命令来启用:
gcloud services enable containerfilesystem.googleapis.com
- 如果您的容器映像受 VPC Service Controls 保护,
请更新服务边界
以添加
containerfilesystem.googleapis.com。
限制
Batch 映像流式传输具有以下限制:
- Batch 仅支持存储在 Artifact Registry 中的容器映像的映像流式传输。如果您目前使用 Container Registry 管理 您的容器映像,则可以 改换为 Artifact Registry。
- 您必须在 Artifact Registry 中存储容器映像的位置运行批量作业的虚拟机。
- 不支持使用 Docker 映像清单版本 2、架构 1 的容器。
- 使用映像流式传输时,
容器可运行对象
仅支持以下字段:
imageUricommandsentrypointvolumesenableImageStreaming
- 不支持具有空层或重复层的容器映像。
创建使用映像流式传输的作业
如需创建使用映像流式传输的 Batch 容器作业,请执行以下操作:
使用 Google Cloud CLI 或 REST API
创建容器作业。
如需为容器可运行对象启用映像流式传输,请将
enableImageStreaming字段设置为true,并将imageUri字段设置为存储在
Artifact Registry 位置
中的映像,该位置包含作业虚拟机的所在位置。
"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 作业的虚拟机的位置相同。PROJECT-ID:包含容器映像的项目。如果您的项目 ID 包含英文冒号 (:),请参阅 网域级项目。REPOSITORY:存储映像的仓库的名称。IMAGE:容器映像的名称。TAG:应用于映像的标记。