本文說明節點集區在 Google Kubernetes Engine (GKE) 中的運作方式。節點集區是標準叢集內的一組節點,全部採用相同的設定。在 GKE Standard 模式中,您可以依據工作負載需求,從多個選項中選擇節點集區。如果您選擇使用 Autopilot,就不必設定節點集區:GKE 會為您管理節點,但如有需要,您可以在標準叢集中手動升級 Autopilot 管理的節點集區。
如要進一步瞭解如何建立標準模式叢集,請參閱「建立區域叢集」和「建立區域叢集」。如要瞭解如何管理現有 Standard 叢集中的節點集區,請參閱「新增及管理節點集區」。
總覽
節點集區是叢集中具有相同設定的一組節點。節點集區會使用 NodeConfig 規格。集區中的每個節點都有 Kubernetes 節點標籤 cloud.google.com/gke-nodepool,其值為節點集區的名稱。
建立標準模式叢集時,系統會使用您指定的節點數量和節點類型,建立叢集的第一個節點集區。根據預設,第一個節點集區 (稱為「預設節點集區」) 包含叢集各個運算可用區中的三個節點,並採用預設節點映像檔 cos_containerd 和一般用途機型。您可以根據工作負載需求,為節點集區指定各種屬性。舉例來說,您可以在叢集中建立節點集區,並使用本機 SSD、最低 CPU 平台、Spot VM、其他節點映像檔、其他機型,或更有效率的虛擬網路介面。
然後,您可以將不同大小和類型的其他節點集區新增至叢集。任何節點集區中的所有節點都相同。
如果您需要排程的 Pod 比其他 Pod 需要更多資源 (例如更多記憶體或本機磁碟空間),自訂節點集區就非常實用。如要進一步控管 Pod 的排程位置,可以使用節點汙點。
您可以個別建立、升級及刪除節點集區,而不影響整個叢集。您無法在節點集區中設定單一節點,任何設定變更都會影響節點集區中的所有節點。
您可以新增或移除節點,調整叢集中的節點集區大小。
根據預設,所有新的節點集區都會執行與控制平面相同的 Kubernetes 版本。現有節點集區可以手動升級或自動升級。您也可以在叢集的每個節點集區中執行多個 Kubernetes 節點版本、獨立升級每個節點集區,以及針對特定部署作業指定不同的節點集區。
Autopilot 代管的節點集區
在 Standard 叢集中,除了本文所述的 Standard 節點集區外,您也可以使用 Autopilot 管理的節點集區,這類集區由 GKE 為 Autopilot ComputeClass 建立及管理。詳情請參閱「關於 GKE Standard 中的 Autopilot 模式工作負載」。
您可以手動升級這類節點集區。不過,您無法執行升級 (版本變更) 以外的其他類型更新。您也無法刪除節點集區。
將服務部署至特定節點集區
定義服務時,您可以間接控制要將服務部署至哪個節點集區。節點集區不會依附於服務設定,而是依附於 Pod 設定。
您可以在 Pod 資訊清單中設定
nodeSelector,將 Pod 明確部署至特定節點集區。這會強制 Pod 只能在該節點集區的節點上執行。 如需範例,請參閱「將 Pod 部署至特定節點集區」。您可以為容器指定資源要求。Pod 只會在滿足資源要求的節點上執行。舉例來說,如果 Pod 定義包含需要四個 CPU 的容器,Service 就不會選取在具有兩個 CPU 的節點上執行的 Pod。
多區域叢集中的節點
如果您建立多可用區叢集,所有節點集區都會自動複製到這些可用區。系統會在這些可用區中自動建立任何新的節點集區。同樣地,任何刪除作業也會從額外可用區中刪除這些節點集區。
請注意,由於這種乘法效應,建立節點集區時,這可能會消耗專案在特定區域的更多配額。
刪除節點集區
刪除節點集區時,GKE 會排空節點集區中的所有節點,刪除並重新排定所有 Pod。在排除程序中,GKE 會刪除節點集區中各個節點上的 Pod。刪除節點時,GKE 會執行下列兩項作業:
- GKE 會刪除 Pod,並分配
MAX_POD的安全終止期限,藉此排空節點集區中的每個節點。MAX_POD是節點上排定 Pod 的最長terminationGracePeriodSeconds時間,上限為一小時。 - 根據預設,GKE 在刪除節點集區時不會遵循
PodDisruptionBudget(PDB) 設定。不過,您可以更新節點集區的設定,讓 GKE 在刪除節點集區時遵守 PDB,但上限為一小時。遵守 PDB 可讓工作負載有機會移至叢集中的其他節點。如要進一步瞭解如何設定這項設定,請參閱「更新節點集區,在刪除節點集區時遵守 PDB」。
如果 Pod 有特定節點選取器,且叢集中沒有其他節點符合條件,Pod 可能會維持在無法排程的狀態。
刪除叢集時,GKE 不會按照這個程序,透過排空節點來妥善終止節點。如果叢集上執行的工作負載必須安全終止,請先使用 kubectl
drain 清理工作負載,再刪除叢集。
如要刪除節點集區,請參閱「刪除節點集區」。您無法刪除 Autopilot 代管的節點集區。