本文說明如何使用標籤整理 Batch 資源。
標籤是套用至資源的鍵/值組合,用於分組及說明資源。Batch 具有預先定義的標籤 (會自動套用至資源) 和自訂標籤 (可在建立工作時定義及套用)。
標籤可讓您篩選資源清單和 Cloud Billing 報表的結果。舉例來說,你可以使用標籤執行下列操作:
釐清及整理專案的工作清單。
使用標籤描述指定容器或指令碼的類型,藉此區分工作中的可執行項目。
篩選 Batch 或特定工作建立的資源,藉此分析費用。
如要進一步瞭解標籤,請參閱 Compute Engine 標籤說明文件。
事前準備
- 如果您從未使用過 Batch,請參閱「開始使用 Batch」,並完成專案和使用者的必要條件,啟用 Batch。
-
如要取得建立作業所需的權限,請要求管理員授予下列 IAM 角色:
-
批次工作編輯者 (
roles/batch.jobsEditor
) 專案 -
服務帳戶使用者 (
roles/iam.serviceAccountUser
) 在作業的服務帳戶上,預設為預設 Compute Engine 服務帳戶
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
-
批次工作編輯者 (
限制
除了 Compute Engine 說明文件中指定的標籤規定外,將標籤套用至 Batch 工作及其資源時,也須遵守下列限制:
Batch 僅支援使用 Batch 建立的資源標籤,且資源類型須為下列類型:
工作
可執行檔
作業的圖形處理器 (GPU) (如有)
作業的虛擬機器 (VM) 執行個體
考量 Batch 自動套用至工作的預先定義標籤後,您可以定義下列自訂標籤數量:
您最多可以定義 63 個自訂標籤,套用至工作及其可執行檔。
您最多可定義 61 個自訂標籤,並套用至為工作建立的每個 GPU、永久磁碟和 VM。
批次作業僅支援定義名稱不重複的自訂標籤。 這會產生下列結果:
嘗試覆寫預先定義的標籤會導致錯誤。
定義重複的自訂標籤會覆寫現有的自訂標籤。
Batch 僅支援在建立工作時定義標籤。
您無法新增、更新或移除工作和可執行檔的標籤。
雖然可以使用 Compute Engine 為作業建立的永久磁碟和 VM 新增、更新或移除標籤,但不建議這麼做。無法可靠地估算工作資源的存續時間範圍,且任何變更可能無法在 Batch 中正常運作。
如要使用標籤篩選工作清單,請使用 gcloud CLI 或 Batch API 查看工作清單。
預先定義的標籤
每個預先定義的標籤都有以 batch-
字首開頭的鍵。根據預設,Batch 會自動套用下列預先定義的標籤:
為您建立的每個工作:
batch-job-id
:這個標籤的值會設為工作名稱。
針對為工作建立的每個 GPU、永久磁碟和 VM:
batch-job-id
:這個標籤的值會設為工作名稱。batch-job-uid
:這個標籤的值會設為工作的專屬 ID (UID)。batch-node
:這個標籤的值為空值,僅用於將為工作建立的所有 GPU、永久磁碟和 VM 分組。舉例來說,您可以在查看 Cloud Billing 報表時使用這個標籤,找出 Batch 建立的所有 GPU、永久磁碟和 VM 費用。
定義自訂標籤
建立工作時,您可以選擇定義一或多個自訂標籤。您可以透過新金鑰或專案已使用的金鑰定義自訂標籤。如要定義自訂標籤,請根據標籤用途,選取本文中的一或多個方法:
-
本節說明如何將一或多個自訂標籤套用至工作,以及為工作建立的每個 GPU、永久磁碟和 VM。建立工作後,您可以使用這些標籤篩選 Cloud 帳單報表,以及專案的工作、永久磁碟和 VM 清單。
-
本節說明如何將一或多個自訂標籤套用至工作。建立工作後,您可以使用這些標籤篩選專案的工作清單。
-
本節說明如何將一或多個自訂標籤套用至工作的一或多個可執行檔。建立工作後,您可以使用這些標籤篩選專案的工作清單。
為工作及其資源定義自訂標籤
系統會將作業分配政策的 labels
欄位中定義的標籤套用至作業,以及每個 GPU (如有)、永久磁碟 (所有開機磁碟和任何新的儲存空間磁碟區),以及為作業建立的 VM。
使用 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 的第一個標籤名稱。VM_LABEL_VALUE1
:要套用至為工作建立的 VM 的第一個標籤值。VM_LABEL_NAME2
:要套用至作業所建立 VM 的第二個標籤名稱。VM_LABEL_VALUE2
:要套用至為工作建立的 VM 的第二個標籤值。
使用
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 的第二個標籤值。
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
:要套用至工作的第二個標籤值。
在
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
中建立容器工作,並定義要套用至工作本身的兩個自訂標籤,請對 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
後續步驟
在下列情況下,標籤可做為篩選器:
瞭解如何刪除工作。