本頁面說明如何新增、管理、調度、升級及刪除在 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 預設服務帳戶,請完成下列步驟:
主控台
- 前往「歡迎」頁面:
- 在「專案編號」欄位中,按一下 「複製到剪貼簿」。
- 前往「IAM」(身分與存取權管理)IAM 頁面:
- 按一下「授予存取權」 。
- 在「New principals」(新增主體) 欄位中,指定下列值:
將PROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
替換為您複製的專案編號。 - 在「Select a role」(選取角色) 選單中,選取「Kubernetes Engine Default Node Service Account」(Kubernetes Engine 預設節點服務帳戶) 角色。
- 按一下 [儲存]。
gcloud
- 找出 Google Cloud 專案編號:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
將
PROJECT_ID
替換為您的專案 ID。輸出結果會與下列內容相似:
12345678901
- 將
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 叢集中新增節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下要修改的 Standard 叢集名稱。
按一下 add_box「Add node pool」(新增節點集區)。
設定節點集區。
按一下導覽選單中的「Security」(安全性)。
- (選用) 為節點指定自訂 IAM 服務帳戶:
- 在「進階設定」頁面中,展開「安全性」部分。
- 在「服務帳戶」選單中,選取偏好的服務帳戶。
強烈建議您指定權限最小的 IAM 服務帳戶,供節點使用,不要使用 Compute Engine 預設服務帳戶。如要瞭解如何建立僅具備必要權限的服務帳戶,請參閱「使用最低權限的服務帳戶」。
按一下「建立」即可新增節點集區。
Terraform
如要使用 Terraform 將節點集區新增至現有 Standard 叢集,請參閱下列範例:
如要進一步瞭解如何使用 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
:要查看的節點集區名稱。
控制台
如要查看標準叢集的節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下「標準」叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「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
旗標。
控制台
如要調整叢集的節點集區大小,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下要修改的 Standard 叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 區段中,按一下要調整大小的節點集區名稱。
按一下 edit「Resize」(調整大小)。
在「Number of nodes」(節點數量) 欄位中,輸入節點集區中您想要的節點數量,然後按一下「Resiz」(調整大小)。
視需要在每個節點集區重複操作。
變更節點機器屬性,垂直調度資源
您可以修改節點集區設定的機器類型、磁碟類型和磁碟大小。
編輯一或多個機器屬性時,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-standard
、pd-ssd
或pd-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
欄位設為 0
或 0%
,或將 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.2
或cluster-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 控制台升級節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
按一下叢集名稱。
在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 區段中,按一下要升級的節點集區名稱。
按一下「Edit」(編輯)edit。
按一下「Node version」(節點版本) 下方的「Change」(變更)。
從「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 嘗試滿足限制,但即使無法滿足限制,仍會排程,請使用節點相依性。詳情請參閱「節點相依性」。您也可以指定容器對資源的要求。
降級節點集區
您可以降級節點集區,例如為了減輕節點集區升級失敗的影響。降級節點集區前,請先查看限制。
如果需要針對影響工作負載的節點集區升級作業,盡量降低風險,請使用藍綠節點升級策略。如果升級失敗,您可以使用這項策略復原原始節點的升級作業。
刪除節點集區
刪除節點集區時,系統會刪除節點和所有執行中的工作負載,不會遵守PodDisruptionBudget
設定。如要進一步瞭解這項作業對工作負載的影響,包括與節點選取器的互動,請參閱「刪除節點集區」。
gcloud
如要刪除節點集區,請執行 gcloud container node-pools delete
指令:
gcloud container node-pools delete POOL_NAME \
--cluster CLUSTER_NAME
控制台
如要刪除節點集區,請執行下列步驟:
前往 Google Cloud 控制台的「Google Kubernetes Engine」頁面。
在叢集清單中,按一下要修改的 Standard 叢集名稱。
按一下「Nodes」(節點) 分頁標籤。
在「Node Pools」(節點集區) 區段中,按一下要刪除的節點集區旁邊的 delete。
當系統提示時,按一下「Delete」(刪除)。
將節點遷移至其他機器類型
如要瞭解在機器類型之間移動工作負載的不同方法 (例如遷移至較新的機器類型),請參閱「將節點遷移至其他機器類型」。
在節點集區之間遷移工作負載
如要將工作負載從一個節點集區遷移至另一個節點集區,請參閱「在節點集區之間遷移工作負載」。舉例來說,如果您要以新的節點集區取代現有節點集區,並確保工作負載從現有節點移至新節點,就可以按照這些操作說明進行。
疑難排解
如需疑難排解資訊,請參閱「排解標準節點集區問題」和「排解節點註冊問題」。