關於 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 記憶體的 20% (最高 8 GiB)
    • 下一個 8 GiB 記憶體的 10% (最高 16 GiB)
    • 下一個 112 GiB 記憶體的 6% (最高 128 GiB)
    • 如果記憶體大小超過 128 GiB,則保留任何記憶體的 2%
    • Pod 移除門檻的額外 100 MiB 記憶體
    • 如果啟用「圖片串流」功能,系統會預留額外緩衝區,詳情請參閱「預留圖片串流的記憶體」。

CPU 預留項目

如果是透過 1.37 以上版本的 GKE 建立的節點集區,GKE 會將標準、非分數運算執行個體的 CPU 預留總量限制為 1 個 vCPU (1000 mCPU) 以下。系統元件仍可視需要超出此限制。1 個 vCPU 的限制可確保高核心運算執行個體不會因系統預留而失去多個可分配容量的核心。在 GKE 1.36 版或更早版本建立的節點集區,不受 1 個 vCPU 的限制。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. 使用前幾節的資訊,計算所選機型上的可分配資源。並與您需要的資源和額外負荷進行比較。

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

後續步驟