使用标签整理资源

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

标签是应用于资源的键值对,用于分组和描述资源。Batch 具有预定义标签(自动应用于资源)和自定义标签(您可以在创建作业时定义和应用)。

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

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

  • 使用标签来描述作业指定的容器或脚本的类型,以区分作业的可运行对象。

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

如需详细了解标签,另请参阅关于标签的 Compute Engine 文档

准备工作

限制

除了 Compute Engine 文档中指定的标签要求外,向 Batch 作业及其资源添加标签还存在以下限制:

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

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

    • 您最多可以定义 63 个自定义标签,以应用于作业及其可运行对象。

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

  • Batch 仅支持定义名称唯一的自定义标签。这会导致以下结果:

    • 尝试覆盖预定义标签会导致错误。

    • 定义重复的自定义标签会覆盖现有自定义标签。

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

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

    • 虽然可以使用 Compute Engine 为作业创建的永久性磁盘和虚拟机添加、更新或移除标签,但建议这样做。无法准确估算作业资源存在的时间范围,并且任何更改都可能无法与 Batch 正常配合使用。

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

预定义标签

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

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

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

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

    • batch-job-uid:此标签的值设置为作业的唯一标识符 (UID)。

    • batch-node:此标签的值为 null,它只会对为作业创建的所有 GPU、永久性磁盘和虚拟机进行分组。例如,在查看 Cloud Billing 报告时,您可以使用此标签来确定 Batch 创建的所有 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. 使用 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:要应用于为作业创建的虚拟机的第二个标签的值。

为作业定义自定义标签

作业的 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. 使用带有以下标志的 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:要应用于作业的第二个标签的值。

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

可运行对象的 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. 使用 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:要应用于第二个作业的可运行标签的标签值。

后续步骤