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