關於 GKE 節點大小

本頁面說明如何規劃 Google Kubernetes Engine (GKE) Standard 節點集區中的節點大小,降低工作負載中斷和資源不足終止的風險。

在 GKE Autopilot 中,由於 Google Cloud 會為您管理節點,因此不需要進行這項規劃。不過,本文可協助 Autopilot 叢集運算子瞭解節點中有多少資源容量可供工作負載使用。

適當大小節點的優點

確保節點大小適中,足以容納工作負載並處理活動尖峰,可帶來下列好處:

  • 降低資源不足而遭到淘汰的風險,提高工作負載可靠性。
  • 在流量高峰期擴充工作負載時,可獲得更出色的擴充性。
  • 節點不會過大而浪費資源,因此成本較低。

可分配的節點資源

GKE 節點會執行系統元件,讓節點做為叢集的一部分運作。這些元件會使用節點資源,例如 CPU 和記憶體。您可能會發現節點的總資源 (以基礎 Compute Engine 執行個體的大小為準),與 GKE 工作負載可要求的可用資源之間存在差異。這是因為 GKE 會預先保留一定數量的資源,確保系統功能和節點可靠性。GKE 為系統資源保留的磁碟空間會因節點映像檔而異。工作負載可用的剩餘資源稱為「可分配資源」。

在資訊清單中定義 Pod 時,您可以在 Pod 規格中指定資源要求和限制。GKE 將 Pod 放在節點上時,Pod 會向節點上可分配的資源要求這些指定資源。規劃節點集區中的節點大小時,應考量工作負載需要多少資源才能正常運作。

檢查節點上的可分配資源

如要檢查現有節點上可分配的資源,請執行下列指令:

kubectl get node NODE_NAME \
    -o=yaml | grep -A 7 -B 7 capacity

將 NODE_NAME 替換為節點名稱。

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

allocatable:
  attachable-volumes-gce-pd: "127"
  cpu: 3920m
  ephemeral-storage: "47060071478"
  hugepages-1Gi: "0"
  hugepages-2Mi: "0"
  memory: 13498416Ki
  pods: "110"
capacity:
  attachable-volumes-gce-pd: "127"
  cpu: "4"
  ephemeral-storage: 98831908Ki
  hugepages-1Gi: "0"
  hugepages-2Mi: "0"
  memory: 16393264Ki
  pods: "110"

在這個輸出內容中,allocatable 區段中的值是節點上可分配的資源。「capacity」部分中的值是節點上的資源總數。臨時儲存空間的單位為位元組。

GKE 資源預留項目

GKE 會根據節點上可用的資源總大小,在節點上保留特定數量的記憶體和 CPU 資源。大型機型可執行更多容器和 Pod,因此 GKE 為大型機器預留的資源量也會隨之增加。Windows Server 節點也需要比同等 Linux 節點更多的資源,才能執行 Windows OS 和無法在容器中執行的 Windows Server 元件。

記憶體和 CPU 保留

以下各節說明根據機型設定的預設記憶體和 CPU 預留量。

如果 Standard 節點集區執行的是 GKE 1.37 以上版本,您可以自訂為系統元件保留的 CPU 和記憶體量。詳情請參閱「系統資源預留」(預先發布版)。

記憶體預留

GKE 會根據節點集區建立時使用的 GKE 版本,以不同方式計算記憶體預留量:

  • 如果建立節點集區時,執行的是 GKE 1.37 以上版本,GKE 會使用下列公式:

    MemoryReserved = Min(EarlierMemoryReservation, (15 MiB * MaxPodsPerNode) + BaseOverhead)
    

    GKE 會使用 Pod 密度或 EarlierMemoryReservation 的計算結果 (以較低者為準),這是為執行 1.36 以上版本建立的節點集區進行預留計算。

    在這個公式中,BaseOverhead 的值取決於節點設定,如下所示:

    • Container-Optimized OS 節點映像檔:500 MiB
    • Ubuntu 節點映像檔:700 MiB
    • 已啟用映像檔串流:額外緩衝區,如「為映像檔串流保留記憶體」一節所述。

    系統會額外保留 100 MiB 的記憶體,做為 Pod 驅逐門檻。

  • 如果節點集區是在執行 GKE 1.36 版或更早版本時建立,GKE 會使用下列公式。即使節點集區後來升級至 1.37 以上版本,GKE 仍會使用這個公式:

    • 記憶體小於 1 GiB 的機器為 255 MiB
    • 前 4 GiB 記憶體的 25%
    • 接下來 4 GiB 記憶體 (最多 8 GiB) 的 20%
    • 接下來 8 GiB 記憶體的 10% (最多 16 GiB)
    • 接下來 112 GiB 記憶體 (最高 128 GiB) 的 6%
    • 記憶體超過 128 GiB 的部分:2%
    • Pod 驅逐閾值的額外 100 MiB 記憶體
    • 如果啟用圖片串流,則會如「圖片串流的記憶體保留」所述,使用額外的緩衝區。

CPU 預留項目

如果節點集區是在 GKE 1.37 以上版本建立,GKE 會將標準非分數運算執行個體的 CPU 預留總量限制在 1 個 vCPU (1000 mCPU) 以下。系統元件仍可視需要超出此限制。1 個 vCPU 的限制可確保高核心運算執行個體不會因系統預留而失去多個可分配容量的核心。1 個 vCPU 的限制不適用於在 GKE 1.36 版或更早版本建立的節點集區。GKE 會使用下列公式計算 CPU 預留量:

  • 第一個核心的 6%
  • 下一個核心的 1% (最多 2 個核心)
  • 後兩個核心的 0.5% (最多 4 個核心)
  • 超過 4 個核心的部分,每個核心 0.25%

如果是共用核心 E2 機型,GKE 仍會保留總共 1060 毫核心。

預留本機暫時儲存空間

GKE 為節點提供本機臨時儲存空間,由節點的開機磁碟或本機 SSD 等本機連接裝置支援。暫時性儲存空間無法保證可用性,如果節點故障並遭到刪除,暫時性儲存空間中的資料可能會遺失。

GKE 會保留節點總暫時儲存空間的一部分,做為單一檔案系統,供 Kubelet 在 Pod 逐出期間使用,以及供節點上執行的其他系統元件使用。您可以將剩餘的暫時性儲存空間分配給 Pod,用於記錄檔等用途。如要瞭解如何在 Pod 中指定暫時性儲存空間要求和限制,請參閱「本機暫時性儲存空間」。

GKE 會依下列方式計算本機暫存空間預留量:

EVICTION_THRESHOLD + SYSTEM_RESERVATION

實際值會因支援儲存空間的裝置大小和類型而異。

節點開機磁碟支援的臨時儲存空間

根據預設,臨時儲存空間是由節點開機磁碟提供支援。在這種情況下,GKE 會按照下列方式決定驅逐門檻值:

EVICTION_THRESHOLD = 10% * BOOT_DISK_CAPACITY

驅逐門檻一律為開機磁碟總容量的 10%。

GKE 會依下列方式判斷系統預留空間的值:

SYSTEM_RESERVATION = Min(50% * BOOT_DISK_CAPACITY, 6GiB + 35% * BOOT_DISK_CAPACITY, 100 GiB)

系統預留金額為下列金額的最低值:

  • 開機磁碟容量的 50%
  • 開機磁碟容量的 35% + 6 GiB
  • 100 GiB

舉例來說,如果開機磁碟為 300 GiB,則適用下列值:

  • 50% 容量:150 GiB
  • 容量的 35% + 6 GiB:111 GiB
  • 100 GiB

GKE 會保留下列項目:

  • 系統保留:100 GiB (最低值)
  • 逐出門檻:30 GiB

保留的暫時儲存空間總容量為 130 GiB。剩餘容量 170 GiB 為可分配的暫時儲存空間。

以本機 SSD 為基礎的暫時儲存空間

如果臨時儲存空間採用本機 SSD,GKE 會依下列方式計算驅逐門檻:

EVICTION_THRESHOLD = 10% * SSD_NUMBER * 375 GiB

在這個計算中,SSD_NUMBER 是指附加的本機 SSD 數量。所有本機 SSD 的大小都是 375 GiB,因此驅逐門檻為暫時儲存空間總容量的 10%。請注意,這是指格式化磁碟機前的容量,因此可用容量會減少幾個百分比,視節點映像檔版本而定。

GKE 會根據所連結的 SSD 數量計算系統預留空間,計算方式如下:

本機固態硬碟數量 系統預留空間 (GiB)
1 50 GiB
2 75 GiB
3 個以上 100 GiB

使用資源預留項目規劃節點大小

  1. 請考量工作負載在部署時和負載下的資源需求。包括工作負載的要求和預計限制,以及因應擴充而產生的額外負荷。

  2. 請考慮要使用少量大型節點,還是大量小型節點來執行工作負載。

    • 如果資源密集型工作負載不需要高可用性,少量的大型節點就已足夠。節點自動調度資源較不靈活,因為必須撤除更多 Pod 才能縮減資源。
    • 如果工作負載可用性高,且不耗用大量資源,則適合使用大量的小型節點。節點自動調度資源更靈活,因為縮減作業發生時,必須排空的 Pod 數量較少。
  3. 請參閱 Compute Engine 機器家族比較指南,為節點選擇合適的機器系列和家族。

  4. 請考量工作負載的臨時儲存空間需求。節點開機磁碟是否足夠?您是否需要本機 SSD?

  5. 使用前幾節的資訊,計算所選機型可分配的資源。並與您需要的資源和額外負荷進行比較。

    • 如果所選機型過大,建議改用較小的機型,以免支付額外資源費用。
    • 如果選取的機型太小,請考慮使用較大的機型,以降低工作負載中斷的風險。

後續步驟