本文档介绍如何使用映像流式传输将容器映像拉取到 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,请运行以下命令以启用该 API:
gcloud services enable containerfilesystem.googleapis.com
- 如果您的容器映像受 VPC Service Controls 保护,请更新您的服务边界以包含
containerfilesystem.googleapis.com
。
限制
批量映像流式传输具有以下限制:
- Batch 仅支持存储在 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
:应用于映像的标记。