라벨을 사용한 리소스 정리

이 문서에서는 라벨을 사용하여 Batch 리소스를 구성하는 방법을 설명합니다.

라벨은 리소스를 그룹화하고 설명하기 위해 적용되는 키-값 쌍입니다. Batch에는 리소스에 자동으로 적용되는 사전 정의된 라벨과 작업을 만들 때 정의하고 적용할 수 있는 커스텀 라벨이 있습니다.

라벨을 사용하면 리소스 목록 및 Cloud Billing 보고서의 결과를 필터링할 수 있습니다. 예를 들어 라벨을 사용하여 다음을 수행할 수 있습니다.

  • 프로젝트의 작업 목록을 명확하게 정리하고 구성합니다.

  • 라벨을 사용하여 지정한 컨테이너 또는 스크립트 유형을 설명하여 작업의 실행 가능 항목을 구분합니다.

  • Batch 또는 특정 작업으로 만든 리소스에 대한 Cloud Billing 보고서를 필터링하여 비용을 분석합니다.

라벨에 대한 자세한 내용은 라벨에 대한 Compute Engine 문서를 참조하세요.

시작하기 전에

제한사항

Compute Engine 문서에 지정된 라벨 요구사항 외에도 Batch 작업 및 리소스에 라벨을 적용하면 다음과 같은 제한사항이 있습니다.

  • Batch는 Batch를 사용하여 만든 다음 유형의 리소스에 대한 라벨만 지원합니다.

  • Batch는 작업에 자동으로 적용하는 사전 정의된 라벨을 고려한 후 다음과 같은 양의 커스텀 라벨을 정의할 수 있습니다.

    • 작업 및 실행 가능 항목에 적용할 커스텀 라벨을 최대 63개까지 정의할 수 있습니다.

    • 작업을 위해 만든 각 GPU, 영구 디스크, VM에 적용할 커스텀 라벨을 최대 61개까지 정의할 수 있습니다.

  • Batch는 고유한 이름의 커스텀 라벨 정의만 지원합니다. 이로 인한 결과는 다음과 같습니다.

    • 사전 정의된 라벨을 재정의하려고 시도하면 오류가 발생합니다.

    • 중복 커스텀 라벨을 정의하면 기존 커스텀 라벨이 재정의됩니다.

  • Batch는 작업을 만들 때 라벨 정의만 지원합니다.

    • 작업 및 실행 가능 항목의 라벨을 추가, 업데이트, 삭제할 수 없습니다.

    • Compute Engine을 사용하여 작업에 만든 영구 디스크 및 VM의 라벨을 추가, 업데이트, 삭제할 수 있지만 권장되지 않습니다. 작업 리소스가 존재하는 기간이 안정적으로 예측될 수 없으며 Batch에서 변경사항이 제대로 작동하지 않을 수 있습니다.

  • 라벨을 사용하여 작업 목록을 필터링하려면 gcloud CLI 또는 Batch API를 사용하여 작업 목록을 확인해야 합니다.

사전 정의된 라벨

사전 정의된 각 라벨에는 batch- 프리픽스로 시작하는 키가 있습니다. 기본적으로 Batch는 다음과 같은 사전 정의된 라벨을 자동으로 적용합니다.

  • 만드는 각 작업에 다음이 적용됩니다.

    • batch-job-id: 이 라벨의 값은 작업 이름으로 설정됩니다.
  • 작업을 위해 만든 각 GPU, 영구 디스크, VM에 다음이 적용됩니다.

    • batch-job-id: 이 라벨의 값은 작업 이름으로 설정됩니다.

    • batch-job-uid: 이 라벨의 값은 작업의 고유 식별자(UID)로 설정됩니다.

    • batch-node: 이 라벨의 값은 null입니다. 단순히 작업을 위해 만든 모든 GPU, 영구 디스크, VM을 그룹화합니다. 예를 들어 Cloud Billing 보고서를 볼 때 이 라벨을 사용하여 Batch에서 만든 모든 GPU, 영구 디스크, VM의 비용을 확인합니다.

커스텀 라벨 정의

작업을 만들 때 선택적으로 하나 이상의 커스텀 라벨을 정의할 수 있습니다. 프로젝트에서 이미 사용하는 새 키 또는 키로 커스텀 라벨을 정의할 수 있습니다. 커스텀 라벨을 정의하려면 라벨의 용도에 따라 이 문서에서 다음 방법 중 하나 이상을 선택합니다.

  • 작업 및 해당 리소스의 커스텀 라벨 정의

    이 섹션에서는 하나 이상의 커스텀 라벨을 작업과 작업용으로 만든 각 GPU, 영구 디스크, VM에 적용하는 방법을 설명합니다. 작업을 만든 후 이러한 라벨을 사용하여 Cloud Billing 보고서와 프로젝트의 작업 목록, 영구 디스크, VM을 필터링할 수 있습니다.

  • 작업의 커스텀 라벨 정의

    이 섹션에서는 작업에 하나 이상의 커스텀 라벨을 적용하는 방법을 설명합니다. 작업을 만든 후 이러한 라벨을 사용하여 프로젝트의 작업 목록을 필터링할 수 있습니다.

  • 실행 가능 항목의 커스텀 라벨 정의

    이 섹션에서는 작업에 대한 하나 이상의 실행 가능 항목에 하나 이상의 커스텀 라벨을 적용하는 방법을 설명합니다. 작업을 만든 후 이러한 라벨을 사용하여 프로젝트의 작업 목록을 필터링할 수 있습니다.

작업 및 해당 리소스의 커스텀 라벨 정의

작업의 할당 정책을 위해 labels 필드에 정의된 라벨은 작업뿐만 아니라 각 GPU(있는 경우), 영구 디스크(모든 부팅 디스크 및 새 스토리지 볼륨), 작업을 위해 만든 VM에도 적용됩니다.

작업을 만들 때 gcloud CLI 또는 Batch API를 사용하여 작업 및 해당 리소스의 라벨을 정의할 수 있습니다.

gcloud

예를 들어 us-central1에서 작업에 적용되는 두 개의 커스텀 라벨과 작업에 생성된 리소스를 정의하는 기본 컨테이너 작업을 만들려면 다음 단계를 수행합니다.

  1. 작업의 구성 세부정보와 allocationPolicy.labels 필드를 지정하는 JSON 파일을 만듭니다.

    {
      "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에 적용할 첫 번째 라벨의 이름입니다.

    • VM_LABEL_VALUE1: 작업용으로 만든 VM에 적용할 첫 번째 라벨의 값입니다.

    • VM_LABEL_NAME2: 작업용으로 만든 VM에 적용할 두 번째 라벨의 이름입니다.

    • VM_LABEL_VALUE2: 작업용으로 만든 VM에 적용할 두 번째 라벨의 값입니다.

  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에 적용할 첫 번째 라벨의 이름입니다.

  • VM_LABEL_VALUE1: 작업용으로 만든 VM에 적용할 첫 번째 라벨의 값입니다.

  • VM_LABEL_NAME2: 작업용으로 만든 VM에 적용할 두 번째 라벨의 이름입니다.

  • VM_LABEL_VALUE2: 작업용으로 만든 VM에 적용할 두 번째 라벨의 값입니다.

작업의 커스텀 라벨 정의

작업의 labels 필드에 정의된 라벨은 작업에만 적용됩니다.

gcloud CLI 또는 Batch API를 사용하여 작업을 만들 때 작업 라벨을 정의할 수 있습니다.

gcloud

예를 들어 us-central1에서 작업 자체에 적용되는 두 개의 커스텀 라벨을 정의하는 기본 컨테이너 작업을 만들려면 다음 단계를 따르세요.

  1. 작업의 구성 세부정보와 labels 필드를 지정하는 JSON 파일을 만듭니다.

    {
      "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. 작업의 구성 세부정보와 runnables.labels 필드를 지정하는 JSON 파일을 만듭니다.

    {
      "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: 두 번째 작업의 실행 가능 항목에 적용할 라벨의 값입니다.

다음 단계