本文档介绍了如何使用标签整理批处理资源。
标签是应用于资源的键值对,用于对资源进行分组和描述。批处理作业具有预定义标签(自动应用于资源)和自定义标签(您可以在创建作业时定义和应用)。
借助标签,您可以过滤资源列表和 Cloud Billing 报告的结果。例如,您可以使用标签执行以下操作:
阐明并整理项目的作业列表。
使用标签来描述可运行对象指定的容器或脚本类型,从而区分作业的可运行对象。
通过过滤 Cloud Billing 报告中由批处理作业或特定作业创建的资源,分析费用。
如需详细了解标签,请参阅 Compute Engine 文档中的标签
准备工作
- 如果您之前未使用过批处理功能,请参阅开始使用批处理,并完成适用于项目和用户的前提条件,以启用批处理功能。
-
如需获得创建作业所需的权限,请让您的管理员为您授予以下 IAM 角色:
-
项目的 Batch Job Editor (
roles/batch.jobsEditor
) -
作业的服务账号(默认为默认的 Compute Engine 服务账号)上的 Service Account User (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
-
项目的 Batch Job Editor (
限制
除了 Compute Engine 文档中指定的标签要求之外,向 Batch 作业及其资源应用标签还存在以下限制:
批处理仅支持为使用批处理创建的以下类型的资源添加标签:
求职招聘
可运行对象
作业的图形处理单元 (GPU)(如果有)
作业的虚拟机 (VM) 实例
考虑到批处理工具自动应用于作业的预定义标签,您可以定义以下数量的自定义标签:
您最多可以定义 63 个自定义标签,以应用于作业及其可运行作业。
您最多可以定义 61 个自定义标签,以应用于为作业创建的每个 GPU、永久性磁盘和虚拟机。
批处理仅支持使用具有唯一名称的自定义标签进行定义。这会导致以下结果:
尝试替换预定义标签会导致错误。
如果定义了重复的自定义标签,系统会覆盖现有自定义标签。
Batch 仅支持在创建作业时定义标签。
您无法添加、更新或移除作业和可运行作业的标签。
虽然您可以使用 Compute Engine 为为作业创建的永久性磁盘和虚拟机添加、更新或移除标签,但不建议这样做。无法可靠地估算作业资源的存在时间范围,并且任何更改都可能无法与批处理正确配合使用。
如需使用标签过滤作业列表,您必须使用 gcloud CLI 或批处理 API 查看作业列表。
预定义标签
每个预定义标签都有一个以 batch-
前缀开头的键。默认情况下,批处理会自动应用以下预定义标签:
对于您创建的每个作业:
batch-job-id
:此标签的值设为作业的名称。
针对为作业创建的每个 GPU、永久性磁盘和虚拟机:
batch-job-id
:此标签的值设为作业的名称。batch-job-uid
:此标签的值设置为相应职位的唯一标识符 (UID)。batch-node
:此标签的值为 null,它只是对为作业创建的所有 GPU、永久性磁盘和虚拟机进行分组。例如,在查看 Cloud Billing 报告时,您可以使用此标签来确定由批处理作业创建的所有 GPU、永久性磁盘和虚拟机的费用。
定义自定义标签
创建作业时,您可以选择定义一个或多个自定义标签。您可以使用新密钥或项目已使用的密钥定义自定义标签。如需定义自定义标签,请根据标签的用途,从本文档中选择一种或多种方法:
-
本部分介绍了如何将一个或多个自定义标签应用于作业以及为作业创建的每个 GPU、永久性磁盘和虚拟机。创建作业后,您可以使用这些标签来过滤 Cloud Billing 报告以及项目的作业、永久性磁盘和虚拟机列表。
-
本部分介绍了如何向作业应用一个或多个自定义标签。创建作业后,您可以使用这些标签过滤项目的作业列表。
-
本部分介绍了如何将一个或多个自定义标签应用于作业的一个或多个可运行作业。创建作业后,您可以使用这些标签来过滤项目的作业列表。
为作业及其资源定义自定义标签
在labels
字段中为作业的分配政策定义的标签会应用于作业,以及为作业创建的每个 GPU(如果有)、永久性磁盘(所有启动磁盘和任何新的存储卷)和虚拟机。
使用 gcloud CLI 或 Batch API 创建作业时,您可以为作业及其资源定义标签。
gcloud
例如,如需在 us-central1
中创建一个基本容器作业,其中定义了两个适用于作业及其为作业创建的资源的自定义标签,请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详细信息和
allocationPolicy.labels
字段。{ "allocationPolicy": { "instances": [ { "policy": { "machineType": "e2-standard-4" } } ], "labels": { "VM_LABEL_NAME1": "VM_LABEL_VALUE1", "VM_LABEL_NAME2": "VM_LABEL_VALUE2" } }, "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello world!" ] } } ] } } ] }
替换以下内容:
VM_LABEL_NAME1
:要应用于为作业创建的虚拟机的第一个标签的名称。VM_LABEL_VALUE1
:要应用于为作业创建的虚拟机的第一个标签的值。VM_LABEL_NAME2
:要应用于为作业创建的虚拟机的第二个标签的名称。VM_LABEL_VALUE2
:要应用于为作业创建的虚拟机的第二个标签的值。
使用
gcloud batch jobs submit
命令在us-central1
中创建作业。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为包含您在上一步中创建的作业配置详细信息的 JSON 文件的路径。
API
例如,如需在 us-central1
中创建一个基本容器作业,其中定义了两个应用于作业及其为作业创建的资源的自定义标签,请向 jobs.create
方法发出 POST
请求,并指定 allocationPolicy.labels
字段。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"allocationPolicy": {
"instances": [
{
"policy": {
"machineType": "e2-standard-4"
}
}
],
"labels": {
"VM_LABEL_NAME1": "VM_LABEL_VALUE1",
"VM_LABEL_NAME2": "VM_LABEL_VALUE2"
}
},
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello world!"
]
}
}
]
}
}
]
}
替换以下内容:
VM_LABEL_NAME1
:要应用于为作业创建的虚拟机的第一个标签的名称。VM_LABEL_VALUE1
:要应用于为作业创建的虚拟机的第一个标签的值。VM_LABEL_NAME2
:要应用于为作业创建的虚拟机的第二个标签的名称。VM_LABEL_VALUE2
:要应用于为作业创建的虚拟机的第二个标签的值。
Java
Node.js
Python
为作业定义自定义标签
在作业的 labels
字段中定义的标签仅应用于作业。
您可以在使用 gcloud CLI 或 Batch API 创建作业时为作业定义标签。
gcloud
例如,如需在 us-central1
中创建一个基本容器作业,并定义两个应用于作业本身的自定义标签,请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详细信息和
labels
字段。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello World!" ] } } ] } } ], "labels": { "JOB_LABEL_NAME1": "JOB_LABEL_VALUE1", "JOB_LABEL_NAME2": "JOB_LABEL_VALUE2" } }
替换以下内容:
JOB_LABEL_NAME1
:要应用于作业的第一个标签的名称。JOB_LABEL_VALUE1
:要应用于作业的第一个标签的值。JOB_LABEL_NAME2
:要应用于作业的第二个标签的名称。JOB_LABEL_VALUE2
:要应用于作业的第二个标签的值。
使用带有以下标志的
gcloud batch jobs submit
命令在us-central1
中创建作业:gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为包含您在上一步中创建的作业配置详细信息的 JSON 文件的路径。
API
例如,如需在 us-central1
中创建一个容器作业,并定义要应用于作业本身的两个自定义标签,请向 jobs.create
方法发出 POST
请求,并指定 labels
字段。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello World!"
]
}
}
]
}
}
],
"labels": {
"JOB_LABEL_NAME1": "JOB_LABEL_VALUE1",
"JOB_LABEL_NAME2": "JOB_LABEL_VALUE2"
}
}
替换以下内容:
JOB_LABEL_NAME1
:要应用于作业的第一个标签的名称。JOB_LABEL_VALUE1
:要应用于作业的第一个标签的值。JOB_LABEL_NAME2
:要应用于作业的第二个标签的名称。JOB_LABEL_VALUE2
:要应用于作业的第二个标签的值。
Java
Node.js
Python
为可运行文件定义自定义标签
在labels
字段中为可运行项定义的标签仅应用于该可运行项。
使用 gcloud CLI 或 Batch API 创建作业时,您可以为一个或多个可运行作业定义标签。
gcloud
例如,如需在 us-central1
中创建一个作业,并为该作业的两个可运行对象分别定义一个自定义标签,请按以下步骤操作:
创建一个 JSON 文件,用于指定作业的配置详细信息和
runnables.labels
字段。{ "taskGroups": [ { "taskSpec": { "runnables": [ { "container": { "imageUri": "gcr.io/google-containers/busybox", "entrypoint": "/bin/sh", "commands": [ "-c", "echo Hello from task ${BATCH_TASK_INDEX}!" ] }, "labels": { "RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1" } }, { "script": { "text": "echo Hello from task ${BATCH_TASK_INDEX}!" }, "labels": { "RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1" } } ] } } ] }
替换以下内容:
RUNNABLE1_LABEL_NAME1
:要应用于作业的第一个可运行项的标签的名称。RUNNABLE1_LABEL_VALUE1
:要应用于作业的第一个可运行项的标签的值。RUNNABLE2_LABEL_NAME1
:要应用于作业的第二个可运行项的标签的名称。RUNNABLE2_LABEL_VALUE1
:要应用于作业的第二个可运行项的标签的值。
使用
gcloud batch jobs submit
命令在us-central1
中创建作业。gcloud batch jobs submit example-job \ --config=JSON_CONFIGURATION_FILE \ --location=us-central1
将
JSON_CONFIGURATION_FILE
替换为包含您在上一步中创建的作业配置详细信息的 JSON 文件的路径。
API
例如,如需在 us-central1
中创建一项作业来定义两个自定义标签(每个作业的可运行对象各有一个),请向 jobs.create
方法发出 POST
请求,并指定 runnables.labels
字段。
POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job
{
"taskGroups": [
{
"taskSpec": {
"runnables": [
{
"container": {
"imageUri": "gcr.io/google-containers/busybox",
"entrypoint": "/bin/sh",
"commands": [
"-c",
"echo Hello from ${BATCH_TASK_INDEX}!"
]
},
"labels": {
"RUNNABLE1_LABEL_NAME1": "RUNNABLE1_LABEL_VALUE1"
}
},
{
"script": {
"text": "echo Hello from ${BATCH_TASK_INDEX}!"
},
"labels": {
"RUNNABLE2_LABEL_NAME1": "RUNNABLE2_LABEL_VALUE1"
}
}
]
}
}
]
}
替换以下内容:
RUNNABLE1_LABEL_NAME1
:要应用于第一个作业的可运行项的标签的名称。RUNNABLE1_LABEL_VALUE1
:要应用于第一个作业的可运行项的标签的值。RUNNABLE2_LABEL_NAME1
:要应用于第二个作业的可运行项的标签的名称。RUNNABLE2_LABEL_VALUE1
:要应用于第二个作业的可运行项的标签的值。
Java
Node.js
Python
后续步骤
在执行以下操作时,可以使用标签作为过滤条件:
了解如何删除作业。