使用标签整理资源

本文档介绍了如何使用标签来整理您的 Batch。 资源。

标签是应用于资源以进行分组和描述的键值对 。Batch 具有预定义标签,这些标签会自动 以及自定义标签(可在您使用 创建作业的过程。

通过标签,您可以过滤资源列表和 Cloud Billing 的结果 报告。例如,您可以使用标签执行以下操作:

  • 阐明并整理项目的作业列表。

  • 通过使用标签来描述作业的可运行对象, 容器或脚本。

  • 通过过滤所创建的资源的 Cloud Billing 报告来分析费用 批量作业或特定作业。

有关标签的详细信息,另请参阅 关于标签的 Compute Engine 文档

准备工作

  1. 如果您以前没有使用过 Batch,请参阅 Batch 使用入门 并通过填写 针对项目和用户的前提条件
  2. 如需获取创建作业所需的权限, 请让管理员授予您 以下 IAM 角色:

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

限制

除了 针对标签的要求 为 Compute Engine 应用标签 批量作业及其资源具有以下限制:

  • Batch 仅支持已创建的资源的标签 使用 Batch 和以下类型:

  • 在考虑预定义标签 批量自动应用于作业时,可以定义 以下数量的自定义标签:

    • 您最多可以定义 63 个自定义标签应用于作业及其 Runnable

    • 您最多可以定义 61 个自定义标签应用于每个 GPU, 永久性磁盘和为该作业创建的虚拟机

  • 批处理仅支持使用具有唯一名称的自定义标签进行定义。这会导致以下结果:

    • 尝试替换预定义标签会导致错误。

    • 如果定义了重复的自定义标签,系统会覆盖现有自定义标签。

  • Batch 仅支持在创建作业时定义标签。

    • 无法添加、更新或移除作业和可运行对象的标签。

    • 虽然您可以使用 Compute Engine 添加、更新 移除为作业创建的永久性磁盘和虚拟机的标签,这是 推荐使用。作业资源存在的时间范围不能是 因此这些更改可能无法正确 批处理。

  • 如需使用标签过滤作业列表,您必须 使用 gcloud CLI 或 Batch API 查看作业列表

预定义的标签

每个预定义标签都有一个以 batch- 前缀开头的键。修改者 默认情况下,Batch 会自动应用以下预定义 标签:

  • 对于您创建的每个作业:

    • batch-job-id:此标签的值设置为作业的名称。
  • 对于为作业创建的每个 GPU、永久性磁盘和虚拟机,请执行以下操作:

    • batch-job-id:此标签的值设置为作业的名称。

    • batch-job-uid:此标签的值设置为相应职位的唯一标识符 (UID)。

    • batch-node:此标签的值为 null,它只将 为作业创建的 GPU、永久性磁盘和虚拟机。例如: 使用此标签 查看 Cloud Billing 报告 确定使用 Cloud Storage 存储分区创建的所有 GPU、永久性磁盘和虚拟机 批处理。

定义自定义标签

您可以选择在创建作业时定义一个或多个自定义标签。您可以 使用新键或项目已在使用的键定义自定义标签。接收者 定义自定义标签,请在此 指定文档:

  • 为作业及其资源定义自定义标签

    本部分介绍如何将一个或多个自定义标签应用于作业以及如何 为作业创建的每个 GPU、永久性磁盘和虚拟机。创建作业后 可以使用这些标签来过滤 Cloud Billing 报告和 项目的作业、永久性磁盘和虚拟机列表。

  • 为作业定义自定义标签

    本部分介绍了如何向作业应用一个或多个自定义标签。更新后 可以使用这些标签来过滤项目的 作业。

  • 为可运行对象定义自定义标签

    本部分介绍了如何将一个或多个自定义标签应用于一个或多个 该作业的可运行对象创建作业后,您可以使用这些标签 过滤项目的作业列表。

为作业及其资源定义自定义标签

作业分配政策的 labels 字段 还会应用于每个 GPU(如果有)、永久性磁盘(全部 启动磁盘和任何新的存储卷)以及为作业创建的虚拟机。

使用 gcloud CLI 或 Batch API。

gcloud

例如,如需在 us-central1 中创建基本容器作业,该作业定义两个 为作业创建的自定义标签以及为作业创建的资源的 请按以下步骤操作:

  1. 创建一个 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:要设置的第二个标签的值 应用于为该作业创建的虚拟机。

  2. 使用us-central1 gcloud batch jobs submit 命令

    gcloud batch jobs submit example-job \
        --config=JSON_CONFIGURATION_FILE \
        --location=us-central1
    

    JSON_CONFIGURATION_FILE 替换为 JSON 文件,其中包含您在上一部分中创建的作业配置详情 操作。

API

例如,如需在 us-central1 中创建基本容器作业,该作业定义两个 为作业创建的自定义标签以及为作业创建的资源的 请POSTjobs.create 方法 并指定 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:要应用于为作业创建的虚拟机的第二个标签的值。

为作业定义自定义标签

作业的 labels 字段中定义的标签 只会应用于相应作业

在创建作业时,您可以使用 gcloud CLI 或 Batch API。

gcloud

例如,如需在 us-central1 中创建一个基本容器作业,并定义两个应用于作业本身的自定义标签,请按以下步骤操作:

  1. 创建一个 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:要设置的第二个标签的值 都适用于您的工作

  2. 使用us-central1 gcloud batch jobs submit 命令 替换为以下标志:

    gcloud batch jobs submit example-job \
        --config=JSON_CONFIGURATION_FILE \
        --location=us-central1
    

    JSON_CONFIGURATION_FILE 替换为 JSON 文件,其中包含您在上一部分中创建的作业配置详情 操作。

API

例如,如需在 us-central1 中创建容器作业,该作业定义两个 自定义标签,请发送 POST 请求至 jobs.create 方法 并指定 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:要应用的第二个标签的值 自己的工作

为可运行对象定义自定义标签

可运行对象的 labels 字段 只会应用于这个可运行对象

使用 gcloud CLI 或 Batch API。

gcloud

例如,如需在 us-central1 中创建定义两个自定义标签的作业, 为两个作业的可运行对象分别创建一个自定义标签,请按以下步骤操作:

  1. 创建一个 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:要 应用于作业的第二个可运行对象。

  2. 使用us-central1 gcloud batch jobs submit 命令

    gcloud batch jobs submit example-job \
        --config=JSON_CONFIGURATION_FILE \
        --location=us-central1
    

    JSON_CONFIGURATION_FILE 替换为包含您在上一步中创建的作业配置详细信息的 JSON 文件的路径。

API

例如,如需在 us-central1 中创建定义两个自定义标签的作业, 将 POST 请求发送到 jobs.create 方法 并指定 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:要应用于第二个作业的可运行项的标签的值。

后续步骤