新增及管理節點集區


本頁面說明如何新增、管理、調度、升級及刪除在 Google Kubernetes Engine (GKE) Standard 叢集中執行的節點集區。您也會瞭解如何將 Pod 部署至特定節點集區,以及節點集區升級對執行中工作負載的影響。

本頁面的資訊可協助您最佳化 GKE Standard 叢集,提升效能和可擴充性。

本頁面適用於需要建立及設定叢集,並在 GKE 上部署工作負載的作業人員、雲端架構師和開發人員。如要進一步瞭解我們在 Google Cloud內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

閱讀本頁面之前,請先熟悉節點集區

事前準備

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

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

為 GKE 設定 IAM 服務帳戶

GKE 會使用附加至節點的 IAM 服務帳戶,執行記錄和監控等系統工作。這些節點服務帳戶至少必須具備專案的「Kubernetes Engine 預設節點服務帳戶」(roles/container.defaultNodeServiceAccount) 角色。根據預設,GKE 會使用專案中自動建立的 Compute Engine 預設服務帳戶做為節點服務帳戶。

如要將 roles/container.defaultNodeServiceAccount 角色授予 Compute Engine 預設服務帳戶,請完成下列步驟:

主控台

  1. 前往「歡迎」頁面:

    前往「歡迎」

  2. 在「專案編號」欄位中,按一下「複製到剪貼簿」
  3. 前往「IAM」(身分與存取權管理)IAM 頁面:

    前往「身分與存取權管理」頁面

  4. 按一下「授予存取權」
  5. 在「New principals」(新增主體) 欄位中,指定下列值:
    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    PROJECT_NUMBER 替換為您複製的專案編號。
  6. 在「Select a role」(選取角色) 選單中,選取「Kubernetes Engine Default Node Service Account」(Kubernetes Engine 預設節點服務帳戶) 角色。
  7. 按一下 [儲存]

gcloud

  1. 找出 Google Cloud 專案編號:
    gcloud projects describe PROJECT_ID \
        --format="value(projectNumber)"

    PROJECT_ID 替換為您的專案 ID。

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

    12345678901
    
  2. roles/container.defaultNodeServiceAccount 角色指派給 Compute Engine 預設服務帳戶:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/container.defaultNodeServiceAccount"

    PROJECT_NUMBER 替換為上一步的專案編號。

將節點集區新增至標準叢集

您可以使用 gcloud CLI、 Google Cloud 控制台或 Terraform,將新節點集區新增至 GKE Standard 叢集。GKE 也支援節點自動佈建,可根據擴縮需求自動管理叢集中的節點集區。

最佳做法

建立並使用權限最小的身分與存取權管理 (IAM) 服務帳戶,供節點集區使用,不要使用 Compute Engine 預設服務帳戶。如需建立僅具備必要權限的服務帳戶的操作說明,請參閱「 強化叢集安全性」。

gcloud

如要建立節點集區,請執行 gcloud container node-pools create 指令:

gcloud container node-pools create POOL_NAME \
    --cluster CLUSTER_NAME \
    --service-account SERVICE_ACCOUNT

更改下列內容:

  • POOL_NAME:新節點集區的名稱。
  • CLUSTER_NAME:現有叢集的名稱。
  • SERVICE_ACCOUNT:節點要使用的 IAM 服務帳戶名稱。

    強烈建議您指定權限最小的 IAM 服務帳戶,供節點使用,不要使用 Compute Engine 預設服務帳戶。如要瞭解如何建立僅具備必要權限的服務帳戶,請參閱「使用最低權限的服務帳戶」。

    如要在 gcloud CLI 中指定自訂服務帳戶,請在指令中加入下列標記:

    --service-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    SERVICE_ACCOUNT_NAME 替換為具備最低權限的服務帳戶名稱。

如需可指定的完整選用旗標清單,請參閱 gcloud container node-pools create 說明文件。

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

Creating node pool POOL_NAME...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/us-central1/clusters/CLUSTER_NAME/nodePools/POOL_NAME].
NAME: POOL_NAME
MACHINE_TYPE: e2-medium
DISK_SIZE_GB: 100
NODE_VERSION: 1.21.5-gke.1302

在這個輸出內容中,您會看到節點集區的詳細資料,例如機器類型和節點上執行的 GKE 版本。

有時候,節點集區已成功建立,但是 gcloud 指令會逾時,而非自伺服器回報狀態。如要檢查所有節點集區 (包括尚未佈建完成的集區) 的狀態,請使用下列指令:

gcloud container node-pools list --cluster CLUSTER_NAME

控制台

如要在現有 Standard 叢集中新增節點集區,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要修改的 Standard 叢集名稱。

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

  4. 設定節點集區。

  5. 按一下導覽選單中的「Security」(安全性)

  6. (選用) 為節點指定自訂 IAM 服務帳戶:
    1. 在「進階設定」頁面中,展開「安全性」部分。
    2. 在「服務帳戶」選單中,選取偏好的服務帳戶。

    強烈建議您指定權限最小的 IAM 服務帳戶,供節點使用,不要使用 Compute Engine 預設服務帳戶。如要瞭解如何建立僅具備必要權限的服務帳戶,請參閱「使用最低權限的服務帳戶」。

  7. 按一下「建立」即可新增節點集區。

Terraform

如要使用 Terraform 將節點集區新增至現有 Standard 叢集,請參閱下列範例:

resource "google_container_node_pool" "default" {
  name    = "gke-standard-regional-node-pool"
  cluster = google_container_cluster.default.name

  node_config {
    service_account = google_service_account.default.email
  }
}

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

查看標準叢集中的節點集區

gcloud

如要列出標準叢集中的所有節點集區,請執行 gcloud container node-pools list 指令:

gcloud container node-pools list --cluster CLUSTER_NAME

如要查看特定節點集區的詳細資料,請執行 gcloud container node-pools describe 指令:

gcloud container node-pools describe POOL_NAME \
    --cluster CLUSTER_NAME

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • POOL_NAME:要查看的節點集區名稱。

控制台

如要查看標準叢集的節點集區,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下「標準」叢集名稱。

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

  4. 在「Node Pools」(節點集區) 下方,按一下要查看的節點集區名稱。

調整節點集區的大小

您可以視需求擴大或縮減節點集區,以提升效能並節省成本。使用 GKE Standard 節點集區時,您可以變更節點集區中的節點數量,水平調整節點集區大小,也可以變更節點的機器屬性設定,垂直調整節點集區大小

變更節點數量,即可水平縮放

gcloud

如要調整叢集節點集區的大小,請執行 gcloud container clusters resize 指令:

gcloud container clusters resize CLUSTER_NAME \
    --node-pool POOL_NAME \
    --num-nodes NUM_NODES

更改下列內容:

  • CLUSTER_NAME:要調整大小的叢集名稱。
  • POOL_NAME:要調整大小的節點集區名稱。
  • NUM_NODES:區域叢集中的集區節點數量。如果您使用多區域或地區叢集,NUM_NODES 是節點集區所在每個區域的節點數量。

針對每個節點集區重複執行這個指令。如果您的叢集只有一個節點集區,請省略 --node-pool 旗標。

控制台

如要調整叢集的節點集區大小,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要修改的 Standard 叢集名稱。

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

  4. 在「Node Pools」(節點集區) 區段中,按一下要調整大小的節點集區名稱。

  5. 按一下 「Resize」(調整大小)

  6. 在「Number of nodes」(節點數量) 欄位中,輸入節點集區中您想要的節點數量,然後按一下「Resiz」(調整大小)

  7. 視需要在每個節點集區重複操作。

變更節點機器屬性,垂直調度資源

您可以修改節點集區設定的機器類型、磁碟類型和磁碟大小。

編輯一或多個機器屬性時,GKE 會使用為節點集區設定的升級策略,將節點更新為新設定。如果您設定藍綠升級策略,就能將工作負載從原始節點遷移至新節點,同時在遷移失敗時還能還原原始節點。檢查節點集區的升級設定,確認設定的策略符合節點更新需求。

在下列指令中,更新至少一個醒目顯示的機器屬性:

gcloud container node-pools update POOL_NAME \
    --cluster CLUSTER_NAME \
    --machine-type MACHINE_TYPE \
    --disk-type DISK_TYPE \
    --disk-size DISK_SIZE

如要保留機器屬性,請省略對應的旗標。不過,您必須使用至少一個機器屬性旗標,否則指令會失敗。

更改下列內容:

  • POOL_NAME:要調整大小的節點集區名稱。
  • CLUSTER_NAME:要調整大小的叢集名稱。
  • MACHINE_TYPE:節點使用的機器類型。 詳情請參閱 gcloud container node-pools update
  • DISK_TYPE:節點 VM 開機磁碟的類型,必須是 pd-standardpd-ssdpd-balanced
  • DISK_SIZE:節點 VM 開機磁碟的大小 (單位為 GB)。預設值為 100 GB。

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

升級節點集區

根據預設,叢集的節點會啟用自動升級功能。節點自動升級功能可確保叢集的控制層和節點版本保持同步,並符合 Kubernetes 版本偏差政策,確保控制層與低於自己兩個次要版本之內的節點相容。舉例來說,Kubernetes 1.29 控制層與 Kubernetes 1.27 節點相容。

最佳做法

請勿停用節點自動升級功能,確保叢集能享有上段列出的升級優勢。

使用 GKE 節點集區升級時,您可以選擇兩種可設定的升級策略,分別是節點數擴充升級藍綠升級

選擇策略,並使用參數調整策略,以充分滿足叢集環境的需求。

節點升級的運作方式

節點升級時,GKE 會停止將新的 Pod 排定到該節點上,並嘗試將正在執行的 Pod 排定到其他節點上。這與其他會重新建立節點的事件類似,例如啟用或停用節點集區的功能。

在節點的自動或手動升級期間,可接受的 PodDisruptionBudgets (PDB)Pod 終止寬限期最多為 1 小時。如果系統無法在 1 小時內把在節點上執行的 Pod 排定到新的節點上,GKE 仍會啟動升級作業。即使您將 PDB 設定為一律提供所有副本 (將 maxUnavailable 欄位設為 00%,或將 minAvailable 欄位設為 100% 或副本數量),這個行為仍適用。在上述所有情況中,GKE 會在一小時後刪除 Pod,以便刪除節點。

最佳做法

如果工作負載需要更彈性的正常終止機制,請使用藍綠升級,這項功能提供額外的浸泡時間設定,可將 PDB 檢查時間延長超過預設的一小時。

如要進一步瞭解在節點停止運作期間通常會發生什麼事,請參閱關於 Pod 的文章。

只有在所有節點都重新建立完畢且叢集處於所需狀態的情況下,升級作業才算完成。當剛升級的節點向控制層註冊之後,GKE 就會將該節點標記為可排定。

新節點執行個體會執行需要的 Kubernetes 版本,以及:

如要視為完成節點集區升級,節點集區中的所有節點都必須重建。如果升級作業已啟動,但未完成且處於部分升級狀態,節點集區版本可能無法反映所有節點的版本。詳情請參閱「節點集區升級作業不完整,導致部分節點版本與節點集區版本不符」。如要判斷節點集區升級是否完成,請檢查節點集區升級狀態。如果升級作業超出保留期限,請檢查每個節點的版本是否與節點集區版本相符。

手動升級節點集區

您可以手動升級節點集區版本,使其與控制層版本一致,或是升級至仍可使用且與控制層相容的舊版。您可以平行手動升級多個節點集區,但 GKE 一次只會自動升級一個節點集區。

手動升級節點集區時,GKE 會移除您使用 kubectl 新增至個別節點的所有標籤。為避免這種情況,請改為將標籤套用至節點集區

手動升級節點集區前,請先考量下列條件:

  • 當節點集區升級時,在該節點集區中執行的工作負載可能會受到干擾。如要避免這種情況發生,請建立採用所需版本的新節點集區,並把工作負載遷移過去,遷移完成後,即可刪除舊節點集區。
  • 如果升級的節點集區含有處於錯誤狀態的 Ingress,執行個體群組就不會進行同步處理。如要解決此問題,請先使用 kubectl get ing 指令檢查狀態。如果執行個體群組並未同步,則可將用於建立輸入的資訊清單重新套用,以解決此問題。

您可以使用 Google Cloud 控制台或 Google Cloud CLI,手動將節點集區升級至與控制平面相容的版本。

gcloud

本節指令會使用下列變數:

  • CLUSTER_NAME:要升級節點集區的叢集名稱。
  • NODE_POOL_NAME:要升級的節點集區名稱。
  • VERSION:節點升級到的 Kubernetes 版本。例如 --cluster-version=1.7.2cluster-version=latest

升級節點集區:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME

如要在節點上指定不同版本的 GKE,請使用選用的 --cluster-version 標記:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --cluster-version VERSION

如要進一步瞭解如何指定版本,請參閱「版本管理」。

詳情請參閱 gcloud container clusters upgrade 說明文件。

控制台

如要使用 Google Cloud 控制台升級節點集區,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

  2. 按一下叢集名稱。

  3. 在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 區段中,按一下要升級的節點集區名稱。

  5. 按一下「Edit」(編輯)

  6. 按一下「Node version」(節點版本) 下方的「Change」(變更)

  7. 從「Node version」(節點版本) 下拉式清單中選取所需版本,然後按一下「Change」(變更)

節點的版本可能需要幾分鐘的時間才能變更完畢。

將 Pod 部署至特定節點集區

您可以在 Pod 資訊清單中使用 nodeSelector,明確地將 Pod 部署至特定節點集區。nodeSelector 將 Pod 排程至具有相符標籤的節點。

所有 GKE 節點集區的標籤格式如下: cloud.google.com/gke-nodepool: POOL_NAME。 將這個標籤新增至 Pod 的 nodeSelector 欄位,如下例所示:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  nodeSelector:
    cloud.google.com/gke-nodepool: POOL_NAME

詳情請參閱「將 Pod 指派給節點」。

除了節點選取器,您也可以使用節點親和性。如要使用「軟性」規則,讓 Pod 嘗試滿足限制,但即使無法滿足限制,仍會排程,請使用節點相依性。詳情請參閱「節點相依性」。您也可以指定容器對資源的要求

降級節點集區

您可以降級節點集區,例如為了減輕節點集區升級失敗的影響。降級節點集區前,請先查看限制

最佳做法

如果需要針對影響工作負載的節點集區升級作業,盡量降低風險,請使用藍綠節點升級策略。如果升級失敗,您可以使用這項策略復原原始節點的升級作業。

  1. 為叢集設定維護作業排除項目,避免節點集區在降級後,由 GKE 自動升級。
  2. 如要降級節點集區,請按照「手動升級節點集區」一文的說明,指定較早的版本。

刪除節點集區

刪除節點集區時,系統會刪除節點和所有執行中的工作負載,不會遵守PodDisruptionBudget設定。如要進一步瞭解這項作業對工作負載的影響,包括與節點選取器的互動,請參閱「刪除節點集區」。

gcloud

如要刪除節點集區,請執行 gcloud container node-pools delete 指令:

gcloud container node-pools delete POOL_NAME \
    --cluster CLUSTER_NAME

控制台

如要刪除節點集區,請執行下列步驟:

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

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要修改的 Standard 叢集名稱。

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

  4. 在「Node Pools」(節點集區) 區段中,按一下要刪除的節點集區旁邊的

  5. 當系統提示時,按一下「Delete」(刪除)

將節點遷移至其他機器類型

如要瞭解在機器類型之間移動工作負載的不同方法 (例如遷移至較新的機器類型),請參閱「將節點遷移至其他機器類型」。

在節點集區之間遷移工作負載

如要將工作負載從一個節點集區遷移至另一個節點集區,請參閱「在節點集區之間遷移工作負載」。舉例來說,如果您要以新的節點集區取代現有節點集區,並確保工作負載從現有節點移至新節點,就可以按照這些操作說明進行。

疑難排解

如需疑難排解資訊,請參閱「排解標準節點集區問題」和「排解節點註冊問題」。

後續步驟