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

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

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

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

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

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

什麼是叢集標籤?

叢集標籤是可指派給 Google Cloud 叢集的鍵/值組合。有助於在大規模環境下整理資源,並依所需精細程度管理成本。每項資源均可加上標籤,並根據標籤篩選資源。標籤相關資訊會轉送到帳單系統,方便依照標籤詳細分析帳單費用。使用內建的帳單報表,可依資源標籤篩選成本並加以分組。 此外,亦可使用標籤查詢帳單資料匯出檔。

叢集標籤規定

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

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

上述限制適用於各個叢集標籤的鍵和值,以及帶有叢集標籤的個別 Google Cloud 資源;但是每項專案內,所有資源可套用的叢集標籤總數並無上限。

叢集標籤的常見用途

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

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

  • 元件叢集標籤:例如 component:redis、component:frontend、component:ingest 和 component:dashboard。

  • 環境或暫存叢集標籤:例如 environment:production 和 environment:test。

  • 狀態叢集標籤:例如 state:active、state:readytodelete 和 state: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 節點集區。
goog-gke-node-pool-protection-tier GKE 節點集區。

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

標籤傳播

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

您套用至叢集或節點集區的任何標籤,都會透過每小時執行一次的背景程序傳播。標籤最多可能需要一小時,才會顯示在與特定叢集相關聯的所有資源上。此外,標籤只會傳播至已連結至 Compute Engine 執行個體的 Compute Engine 執行個體和永久磁碟。其他資源 (例如工作負載、轉送規則、IP 位址和未附加的永久磁碟) 則不會加上標籤。

如果是 Standard 叢集,當叢集和節點集區標籤套用至 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 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

取得 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

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

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

更改下列內容:

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

控制台

如要在建立叢集時新增標籤,請按照下列步驟操作:

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

    前往「Google Kubernetes Engine」

  2. 按一下「建立」,然後在「標準」或「Autopilot」部分中,按一下「設定」。

  3. 設定叢集。

  4. 在導覽窗格中,按一下「進階設定」,然後執行下列任一操作:

    • Autopilot:展開「中繼資料」,按一下「新增標籤」,然後新增標籤。
    • 標準:在「中繼資料屬性」列中,按一下「編輯設定」,然後按一下「新增標籤」,新增標籤並按一下「儲存」。
  5. 點選「建立」。

API

如要在建立叢集時加入標籤,請在您提供給 projects.zones.clusters.create 的 cluster 物件內指定 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 控制台或 GKE API,為現有的 Autopilot 和 Standard 叢集新增或更新標籤。

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 和 Standard 叢集移除標籤。

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. 找出要刪除的標籤,然後按一下「Value」(值) 欄位旁的 「Delete item」(刪除項目)。

  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,在 Standard 叢集中建立含有標籤的節點集區。

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. 在「Cluster details」(叢集詳細資料) 頁面中,按一下要修改的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 按一下「建立由使用者管理的節點集區」。

  5. 設定新的節點集區。

  6. 按一下導覽窗格中的「Metadata」(中繼資料)。

  7. 按一下 「新增標籤」。

  8. 新增標籤。

  9. 點選「建立」。

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

您可以使用 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. 找出要刪除的標籤,然後按一下「Value」(值) 欄位旁的 「Delete item」(刪除項目)。

  5. 按一下 [儲存]。

後續步驟

閱讀 GKE 總覽。