建立及管理叢集和節點集區標籤


本頁面概述 Google Kubernetes Engine (GKE) 中的叢集標籤和節點集區標籤。

GKE 叢集和節點集區標籤,以及 Kubernetes 標籤

GKE 叢集和節點集區標籤與 Kubernetes 標籤不同。這兩個標籤系統各自獨立運作,不會沿用或共用標籤。

GKE 叢集和節點集區標籤是附加到資源的任意中繼資料,您可以使用這些標籤追蹤帳單和用量資訊。

在 Kubernetes 中,系統會在內部使用標籤,建立叢集元件和資源 (例如 Pod 和節點) 彼此之間的關聯,並管理資源生命週期。您可以使用 Kubernetes API 編輯 Kubernetes 標籤。您也可以使用 GKE API,透過建立叢集更新叢集,編輯節點上的 Kubernetes 標籤。

什麼是叢集標籤?

叢集標籤是可指派給 Google Cloud 叢集的鍵/值組合。這些工具可協助您整理資源,並以所需的精細程度大規模管理費用。您可以為每一項資源加上標籤,並根據標籤來篩選資源。標籤資訊會轉送至帳單系統,方便您按標籤查看帳單費用明細。透過內建的帳單報表,您可以依資源標籤篩選及分組費用。您也可以使用標籤查詢帳單資料匯出內容

叢集標籤規定

套用到資源的叢集標籤必須符合下列規定:

  • 每項資源最多可有 64 個叢集標籤。
  • 每個叢集標籤都必須是鍵/值組合。
  • 鍵的長度下限為 1 個字元,上限為 63 個字元,不能空白。值可以空白,長度上限為 63 個字元。
  • 鍵和值只能使用小寫字母、數字字元、底線和連字號。所有字元都必須使用 UTF-8 編碼,且可使用國際字元。鍵的開頭必須是小寫字母或國際字元。
  • 叢集標籤中,鍵的部分在單一資源內不得重複。 但可讓多個資源使用相同的鍵。

這些限制適用於每個叢集標籤的鍵和值,以及具有叢集標籤的個別 Google Cloud 資源。專案中所有資源可套用的叢集標籤數量沒有上限。

叢集標籤的常見用途

以下是叢集標籤的一些常見用途:

  • 團隊或成本中心叢集標籤:根據團隊或成本中心加上標籤,以區別不同團隊擁有的叢集 (例如 team:researchteam:analytics)。這類型的標籤可用於成本會計或預算編列作業。

  • 元件叢集標籤:例如 component:rediscomponent:frontendcomponent:ingestcomponent:dashboard

  • 環境或暫存叢集標籤:例如 environment:productionenvironment:test

  • 狀態叢集標籤:例如 state:activestate:readytodeletestate:archive

  • 擁有權叢集標籤:用於識別負責作業的團隊,例如:team:shopping-cart

我們不建議您建立大量的不重複標籤,例如幫時間戳記或每個 API 呼叫的個別值建立標籤。這種做法的問題在於,如果值經常變更,或使用會使目錄雜亂的鍵,就難以有效篩選及回報資源。

標籤

標籤可用做資源的可查詢註解,但無法用來設定政策的條件。您可將資源是否具備特定標記設為條件,並按照這項條件允許或拒絕政策,進而精細控管政策。詳情請參閱「標記總覽」。

自動套用的標籤

GKE 會自動將數個標籤套用於叢集資源。

舉例來說,GKE 會將標籤套用於 Compute Engine 執行個體、永久磁碟和加速器 (TPU)。

下表列出 GKE 自動套用至資源的標籤:

標籤 已套用的資源
goog-gke-node GKE 節點底層的 Compute Engine VM 執行個體。
goog-gke-volume 連結至 GKE 節點底層 VM 執行個體的 Compute Engine 永久磁碟。
goog-gke-tpu GKE 中的 Cloud TPU
goog-k8s-cluster-name Compute Engine VM 執行個體,以及連結至 GKE 節點基礎 VM 執行個體的永久磁碟。
goog-k8s-cluster-location Compute Engine VM 執行個體,以及連結至 GKE 節點基礎 VM 執行個體的永久磁碟。
goog-k8s-node-pool-name Compute Engine VM 執行個體及其開機磁碟 (GKE 節點的基礎)。
goog-fleet-project 如果叢集已向車隊註冊,則為 Compute Engine VM 執行個體,以及連結至 GKE 節點底層 VM 執行個體的永久磁碟。
goog-gke-accelerator-type GKE 節點集區。
goog-gke-tpu-node-pool-type GKE 節點集區。
goog-gke-node-pool-provisioning-model GKE 節點集區。

請勿編輯或刪除保留標籤。系統會自動調整您對預留標籤所做的任何變更。

標籤傳播

在 GKE 中,您可以將標籤套用至叢集和標準模式節點集區。為叢集加上標籤時,標籤會傳播至叢集的所有個別資源,例如節點、執行個體和永久磁碟。為節點集區加上標籤時,標籤會傳播至節點集區的所有個別資源,例如執行個體和永久磁碟。在標準叢集中,如果叢集標籤與節點集區標籤衝突 (例如標籤鍵相同但值不同),節點集區標籤會覆寫叢集標籤。

您套用至叢集或節點集區的標籤,會透過每小時執行的背景程序傳播。標籤可能需要一小時才會出現在與指定叢集相關的所有資源上。此外,標籤只會傳播至 Compute Engine 執行個體,以及附加至 Compute Engine 執行個體的永久磁碟。工作負載、轉送規則、IP 位址和未附加的永久磁碟等其他資源不會加上標籤。

如果是標準叢集,將叢集和節點集區標籤套用至 Compute Engine 資源後,您可以手動變更資源標籤,GKE 不會協調這些變更。在 Autopilot 叢集中,您無法手動修改 Compute Engine 資源的標籤,因為 GKE 會為您管理節點。不過,建議透過 GKE 管理這些標籤。除非與自動套用的標籤衝突,否則 GKE 不會移除 Compute Engine 資源上的現有標籤。

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

為 API 要求取得標籤指紋

如果您使用 Google Cloud 控制台或 gcloud CLI,可以略過這個步驟。

使用 GKE API 更新或新增叢集標籤時,您必須在要求中提供最新叢集標籤指紋,避免與其他要求發生衝突。

如要取得最新叢集標籤指紋,請為適當叢集執行 GET 要求。例如:

GET https://container.googleapis.com/v1/projects/myproject/zones/us-central1-f/clusters/example-cluster

輸出結果會與下列內容相似:

200 OK

{

 "name": "mycluster",
 "description": "production-cluster",
 "initialNodeCount": 3,
 ...
 "resourceLabels": {
    "environment": "production",
    ...
  },
  "labelFingerprint": "p1ty_9HoBk0="
}

在這個輸出內容中,labelFingerprint 屬性是叢集標籤指紋。

建立具有標籤的叢集

您可以使用 gcloud CLI、 Google Cloud 控制台、GKE API 或 Terraform,建立附有標籤的 Autopilot 和 Standard 叢集。

gcloud

執行下列指令,建立含有標籤的 Autopilot 叢集:

gcloud container clusters create-auto CLUSTER_NAME \
    --labels=KEY=VALUE

或者,執行下列指令,建立含有標籤的標準叢集:

gcloud container clusters create CLUSTER_NAME \
    --labels=KEY=VALUE

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • KEY:標籤鍵/值組合的鍵。
  • VALUE:標籤鍵/值組合的值。

控制台

如要在建立叢集時新增標籤,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 按一下「 Create」(建立)

  3. 設定叢集。

  4. 在導覽窗格的「Cluster」(叢集) 底下,按一下「Metadata」(中繼資料)

  5. 按一下 「新增標籤」

  6. 新增標籤。

  7. 點選「建立」

API

如要在建立叢集時加入標籤,請在您提供給 projects.zones.clusters.createcluster 物件內指定 resourceLabels 物件。

Terraform

如要使用 Terraform 建立具有標籤的 Autopilot 叢集,請參閱下列範例:

resource "google_container_cluster" "default" {
  name     = "gke-autopilot-labels"
  location = "us-central1"

  enable_autopilot = true

  resource_labels = {
    foo = "bar"
  }
}

如要使用 Terraform 建立含有標籤的 Standard 叢集,請參閱下列範例:

resource "google_container_cluster" "default" {
  name               = "gke-standard-regional-labels"
  location           = "us-central1"
  initial_node_count = 2

  resource_labels = {
    foo = "bar"
  }
}

如要進一步瞭解如何使用 Terraform,請參閱「GKE 的 Terraform 支援」。

為現有叢集新增或更新標籤

您可以使用 gcloud CLI、Google Cloud console 或 GKE API,為現有的 Autopilot 和標準叢集新增或更新標籤。

gcloud

執行下列指令:

gcloud container clusters update CLUSTER_NAME \
    --location =CONTROL_PLANE_LOCATION \
    --update-labels=KEY=VALUE

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • KEY:標籤鍵/值組合的鍵。
  • VALUE:標籤鍵/值組合的值。

標籤更新會覆寫叢集上的所有現有標籤。如果您想保留叢集中的一些現有標籤,則必須將這些標籤與要新增的新標籤一起納入。

控制台

如要新增或更新標籤,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在「叢集詳細資料」頁面上,選取要修改的一或多個叢集核取方塊。

  3. 按一下「標籤」

  4. 新增或更新標籤。

  5. 按一下 [儲存]

API

以最新的指紋以及要套用的完整標籤清單,對叢集的 resourceLabels 方法提出 POST 要求。

與中繼資料和標記類似,如果您想保留叢集中的一些現有標籤,則必須將這些標籤與要新增的新標籤一起納入要求中。

舉例來說,下列程式碼片段會向 resourceLabels 方法提出要求:

POST https://container.googleapis.com/v1/projects/myproject/zones/us-central1-f/clusters/example-cluster/resourceLabels

{
 "resourceLabels": {
  "environment": "production",
  "an-existing-tag": ""
 },
 "labelFingerprint": "42WmSpB8rSM="
}

移除叢集標籤

您可以使用 gcloud CLI、 Google Cloud 控制台或 GKE API,從 Autopilot 和標準叢集移除標籤。

gcloud

執行加上 --remove-labels 旗標的 update 指令:

gcloud container clusters update CLUSTER_NAME \
    --remove-labels=KEYS

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • KEYS:以半形逗號分隔的清單,當中列有要移除的標籤鍵。

控制台

如要移除標籤,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,選取一或多個要修改的叢集,勾選對應的核取方塊。

  3. 按一下「標籤」

  4. 找出要刪除的標籤,然後點選「值」欄位旁邊的「刪除項目」

  5. 按一下 [儲存]

API

對適當叢集的 resourceLabels 方法提出 POST 要求。如要移除所有標籤,請提供目前的 labelsFingerprint 和空白標籤清單。如果只要移除部分標籤,則請提供要保留的標籤清單 (省略要移除的標籤)。例如:

Request

POST https://container.googleapis.com/v1/projects/myproject/zones/us-central1-f/clusters/example-cluster/resourceLabels

{
 "resourceLabels": { },
 "labelFingerprint": "42WmSpB8rSM="
}

建立含有標籤的標準節點集區

您可以使用 gcloud CLI、 Google Cloud 控制台或 GKE API,在標準叢集中建立附有標籤的節點集區。

gcloud

執行下列指令:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --labels=KEY=VALUE

更改下列內容:

  • NODE_POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • KEY:標籤鍵/值組合的鍵。
  • VALUE:標籤鍵/值組合的值。

API

如要在建立節點集區時加入標籤,請在您提供給 projects.zones.clusters.nodePools.create 的節點集區物件內指定 resourceLabels 物件。

主控台

如要為新的節點集區新增標籤,請執行下列步驟:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在「叢集詳細資料」頁面中,按一下要修改的叢集名稱。

  3. 按一下 「Add Node Pool」(新增節點集區)

  4. 設定新的節點集區。

  5. 按一下導覽窗格中的「中繼資料」

  6. 按一下 「新增標籤」

  7. 新增標籤。

  8. 點選「建立」

為現有節點集區新增或更新標籤

您可以使用 gcloud CLI、 Google Cloud 控制台或 GKE API,為現有節點集區新增或更新標籤。

這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要瞭解這項特定變更的詳細資訊,請在「手動變更,使用節點升級策略重建節點,但不遵守維護政策」表格中,找到對應的資料列。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。

gcloud

執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --labels=KEY=VALUE

更改下列內容:

  • NODE_POOL_NAME:節點集區的名稱
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • KEY:標籤鍵/值組合的鍵。
  • VALUE:標籤鍵/值組合的值。

標籤更新會覆寫節點集區上的所有現有標籤。如果您想保留節點集區中的一些現有標籤,則必須將這些標籤與要新增的新標籤一起納入。

API

如要在修改節點集區時加入標籤,請在您提供給 projects.zones.clusters.nodePools.update 的節點集區物件內指定 resourceLabels 物件。

主控台

如要新增或更新標籤,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要修改的節點集區所屬叢集名稱。

  3. 在「Node Pools」(節點集區) 區段中,按一下要修改的節點集區名稱。

  4. 按一下「編輯」

  5. 在「標籤」部分新增或更新標籤。

  6. 按一下 [儲存]

移除節點集區標籤

您可以使用 gcloud CLI、 Google Cloud 控制台或 GKE API,從節點集區移除標籤。

gcloud

執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION \
    --labels=KEY=VALUE

更改下列內容:

  • NODE_POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • KEY:標籤鍵/值組合的鍵。
  • VALUE:標籤鍵/值組合的值。

標籤更新會覆寫節點集區上的所有現有標籤。如果節點集區含有您要保留的現有標籤,則必須排除要移除的標籤。如要移除所有標籤,請使用不含任何鍵/值組合的 --labels=

API

如要在修改節點集區時加入標籤,請在您提供給 projects.zones.clusters.nodePools.update 的節點集區物件內指定 resourceLabels 物件。如要移除所有標籤,請提供空白標籤清單。如果只要移除部分標籤,則請提供要保留的標籤清單。省略要移除的標籤。

主控台

如要從節點集區移除標籤,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要修改的節點集區所屬叢集名稱。

  3. 在「Node Pools」(節點集區) 區段中,按一下要修改的節點集區名稱。

  4. 找出要刪除的標籤,然後點選「值」欄位旁邊的 「刪除項目」

  5. 按一下 [儲存]

後續步驟

閱讀 GKE 總覽