關於 GKE 的本機 SSD

本機固態硬碟 (SSD) 是固定大小的 SSD 磁碟機,可掛接至單一 Compute Engine VM。您可以在 GKE 上使用本機 SSD,取得高效能的非持續性 (臨時) 儲存空間,並將其附加至叢集中的每個節點。本機 SSD 的處理量也比標準磁碟高,延遲時間也較短。

在 1.25.3-gke.1800 以上版本中,您可以設定 GKE 節點集區,透過 NVMe 介面使用本機 SSD 做為本機臨時儲存空間或原始區塊儲存空間。

如果您使用 GKE 搭配 Standard 叢集,可以在建立節點集區時,將本機 SSD 磁碟區附加至節點。這項功能可提升工作負載的臨時儲存空間效能,適用於使用 emptyDir 磁碟區或本機 PersistentVolumes 的工作負載。您可以在叢集的機型限制和專案的配額內,使用本機 SSD 建立節點集區。

本機 SSD 磁碟只會附加至一個節點。節點本身是暫時性的,也就是說,工作負載可以排定在不同節點上。如要確保需要本機 SSD 的工作負載排定至適當的節點,請使用節點親和性。舉例來說,使用節點標籤 cloud.google.com/gke-ephemeral-storage-local-ssd: "true"。

設定本機 SSD 時,GKE 會自動將下列目錄掛接至本機 SSD 磁碟區,以提升效能:/var/lib/kubelet、/var/log/pods 和 /var/lib/containerd。這種做法有助於確保能更快存取重要的 kubelet 資料、Pod 記錄和容器執行階段檔案。

如要進一步瞭解本機 SSD 的優點和限制 (例如效能,以及每個機型允許的 SSD 磁碟數量),請參閱 Compute Engine 說明文件中的「本機 SSD」。

選擇 GKE 本機 SSD 的原因

如果工作負載有下列任何需求,本機 SSD 都是不錯的選擇:

  • 您想執行下載及處理資料的應用程式,例如 AI 或機器學習、數據分析、批次處理、本機快取和記憶體內資料庫。
  • 您的應用程式有特殊儲存需求,且您希望在高效能臨時儲存空間上存取原始區塊。
  • 您想執行專門的資料應用程式,並想將本機 SSD 磁碟區當做 Pod 的節點層級快取運作。您可以運用這種方法,提升 Aerospike 或 Redis 等記憶體內建資料庫應用程式的效能。

臨時儲存空間

建議使用 --ephemeral-storage-local-ssd 選項,為節點暫時性儲存空間佈建本機 SSD (如果您使用第三代機器系列,這是預設選項)。 這種做法會將 emptyDir 磁碟區、可寫入資料的容器層和映像檔置於本機 SSD,這些項目共同構成節點的臨時儲存空間。與預設的永久磁碟相比,這項功能可提升 I/O 頻寬,並縮短 Pod 啟動時間。

將本機 SSD 用於節點臨時儲存空間,表示開機磁碟本機 SSD 磁碟區無法用於其他用途。請勿直接使用具備權限的 Daemonset、HostPath 或其他機制,修改本機 SSD 裝置 (例如 /dev/nvme*),否則節點可能會失敗。如要精細控管本機 SSD 磁碟區,請改用原始區塊方法。

區塊裝置儲存空間

區塊裝置儲存空間可隨機存取固定大小區塊中的資料。某些專門的應用程式需要直接存取區塊裝置儲存空間,例如檔案系統層會造成不必要的負擔。

使用區塊裝置儲存空間的常見情境包括:

  • 資料庫:資料直接整理在基礎儲存空間中。
  • 實作某種儲存服務的軟體 (軟體定義的儲存系統)。

在 GKE v1.25.3-gke.1800 以上版本中,您可以使用 --local-nvme-ssd-block 選項,建立叢集和節點集區,並附加原始區塊本機 NVMe SSD。接著,您可以格式化所選檔案系統 (例如 ZFS 或 HDFS) 並設定 RAID,藉此自訂區塊儲存空間。如果您需要額外控管機制,來執行特別需要存取本機 SSD 支援區塊儲存空間的工作負載,這個選項就很合適。

如要使用統一的資料快取在 Pod 之間共用資料,且資料與節點生命週期相關聯,也可以搭配本機 SSD 使用封鎖存取方法。如要這麼做,請安裝具有 RAID 設定的 DaemonSet、格式化檔案系統,並使用本機 PersistentVolume 在 Pod 之間共用資料。

機器需求

為 GKE 叢集和節點集區佈建本機 SSD 的方式,取決於基礎機型。GKE 支援 Compute Engine 的第 1、2 和 3 代機器系列本機 SSD 磁碟區。本機 SSD 磁碟區需要 n1-standard-1 以上的機器類型。 系統不支援預設機型「e2-medium」。如要找出機器系列,請查看機型名稱中的數字。舉例來說,N1 機器是第一代,N2 機器是第二代。如需可用機器系列和類型的清單,請參閱 Compute Engine 說明文件中的機器家族資源與比較指南。

GKE 不支援搭配本機 SSD 使用 C4N 系列機器。在 Compute Engine 中,這個機器系列支援本機 SSD,但目前為預先發布版。

第一代和第二代機器系列需求

如要搭配本機 SSD 使用第 1 代或第 2 代機器系列,叢集或節點集區必須執行 GKE 1.25.3-gke.1800 以上版本。

如要在第 1 代或第 2 代機器系列上佈建本機 SSD,請指定要搭配 VM 使用的本機 SSD 磁碟區數量。如要查看機器系列清單和對應的本機 SSD 允許數量,請參閱 Compute Engine 說明文件中的「選擇有效的本機 SSD 數量」。

第 3 代和第 4 代機器系列規定

如要搭配使用第三代機器系列和本機 SSD,叢集或節點集區必須執行下列其中一個 GKE 版本或更新版本:

  • 1.25.13-gke.200 至 1.26
  • 1.26.8-gke.200 至 1.27
  • 1.27.5-gke.200 至 1.28
  • 1.28.1-gke.200 至 1.29

如要搭配使用第四代機器系列和本機 SSD,叢集或節點集區必須執行下列其中一個 GKE 版本或更新版本:

  • 1.32.1-gke.1357000

對於第 3 代和第 4 代機器系列,每個機器類型都預先設定為不含本機 SSD,或是含有固定數量的本機 SSD 磁碟區。您未指定要納入的本機 SSD 磁碟區數量。而是隱含定義為 VM 形狀的一部分,供叢集使用。

如要查看機器系列和對應的本機 SSD 允許數量,請參閱 Compute Engine 說明文件中的「選擇有效的本機 SSD 數量」。

本機 SSD 磁碟區的使用模式

如要在叢集中使用本機 SSD 磁碟區,請按照下列一般步驟操作:

  1. 佈建附加本機 SSD 的節點集區:如要建立附加本機 SSD 的 GKE 節點集區,請在呼叫 create cluster 指令時,傳遞暫時性儲存空間或原始區塊儲存空間參數。設定本機 SSD 參數後,系統會建立 GKE 節點集區,並視您選擇的參數,將本機 SSD 附加為本機暫時儲存空間或原始區塊儲存空間。如要進一步瞭解本機 SSD 的佈建選項,請參閱本機 SSD 參數。
  2. 存取本機 SSD 磁碟區中的資料:如要使用本機 SSD 磁碟區中的資料,您可以使用 Kubernetes 建構,例如 emptyDir 或本機永久磁碟區。如要進一步瞭解這些選項,請參閱「本機 SSD 存取權」。

GKE 的本機 SSD 參數

下表匯總 GKE 建議的參數,用於在叢集佈建本機 SSD 儲存空間。您可以使用 gcloud CLI 傳遞這些參數。

本機 SSD 類型 gcloud CLI 指令 GKE 適用情形 本機 SSD 設定檔
臨時儲存空間本機 SSD gcloud container clusters create
--ephemeral-storage-local-ssd
v1.25.3-gke.1800 以上版本

儲存技術: NVMe

跨 Pod 共用資料:否

資料生命週期:Pod

大小和 RAID 設定需求:最多 9 TiB。GKE 會在幕後自動設定 RAID。

格式: 檔案系統 (Kubernetes emptyDir)

整合 Kubernetes 排程器: 預設為完全整合。Kubernetes 排程器可確保節點上有可用空間,然後再放置 Pod,並視需要調整節點大小。

如要瞭解如何使用這個 API 參數,請參閱「佈建及使用本機 SSD 支援的暫時儲存空間」。

本機 NVMe SSD 區塊 gcloud container clusters create
--local-nvme-ssd-block
v1.25.3-gke.1800 以上版本

儲存技術: NVMe

跨 Pod 共用資料:是,透過本機 PV。

資料生命週期:節點

RAID 設定的大小和需求:最多 9 TiB。如要使用較大的大小,請手動設定 RAID。

格式: 原始區塊

Kubernetes 排程器整合: 預設為「否」。您需要確保節點上的容量,並處理干擾鄰居。如果選擇加入當地 PV,系統會整合排程。

如要瞭解如何使用這個 API 參數,請參閱「佈建及使用本機 SSD 支援的原始區塊儲存空間」。

支援現有的本機 SSD 參數

下表總結這些現有的本機 SSD 參數,以及建議的替代參數:

現有的本機 SSD 參數 gcloud CLI 指令 本機 SSD 設定檔 建議使用的本機 SSD 參數正式版
本機 SSD 數量參數 gcloud container clusters create
--local-ssd-count

儲存技術: SCSI

跨 Pod 共用資料: 是,透過本機 PV

資料生命週期:節點

RAID 設定的大小和需求: 375 GiB。如要使用較大的大小,則須手動設定 RAID。

格式: 檔案系統 (ext-4)

Kubernetes 排程器整合: 預設為「否」。您需要確保節點上的容量,並處理干擾鄰居。如果選擇加入本地 PV,系統會整合排程。

gcloud container clusters create
--ephemeral-storage-local-ssd
暫時儲存空間參數 (Beta 版) gcloud beta container clusters create
--ephemeral-storage

儲存技術: NVMe

跨 Pod 共用資料: 無

資料生命週期:Pod

大小和 RAID 設定需求: 最多 9 TiB。GKE 會自動在背景設定 RAID。

格式: 檔案系統 (Kubernetes emptyDir)

Kubernetes 排程器整合: 預設為完全整合。Kubernetes 排程器可確保節點上有可用空間,然後再進行放置作業,並視需要擴充節點。

gcloud container clusters create
--ephemeral-storage-local-ssd
本機 SSD 磁碟區參數 (Alpha 版) gcloud alpha container clusters create
--local-ssd-volumes

儲存技術: NVMe 或 SCSI

跨 Pod 共用資料: 無

資料生命週期:節點

大小和 RAID 設定需求:

375 GiB。如要使用更大的大小,請手動設定 RAID。

格式: 檔案系統 (ext-4) 或原始區塊

Kubernetes 排程器整合: 預設為否。您需要確保節點上的容量,並處理干擾鄰居。

gcloud container clusters create
--local-nvme-ssd-block

本機 SSD 存取權

您可以使用下列任一方法存取本機 SSD 磁碟區。

emptyDir 磁碟區

在 GKE v1.25.3-gke.1800 以上版本中,您可以透過 --ephemeral-storage-local-ssd 選項,將臨時儲存空間做為本機 SSD 支援的emptyDir 卷宗使用。在大多數情況下,我們建議採用這種做法,包括需要高效能暫時性暫存空間的應用程式。

GKE 可讓您設定節點集區,將節點臨時儲存空間掛接至本機 SSD,並使用 NVMe 介面。

詳情請參閱這個範例。

本機永久磁碟區

本機永久磁碟區代表連接至單一節點的本機磁碟。本機永久磁碟區可讓您在 Pod 之間共用本機 SSD 資源。由於本機磁碟是本機 SSD 磁碟,資料仍為暫時性。

如果叢集上執行下列任一項目,建議您採用這種做法:

  • 使用 StatefulSets 和 volumeClaimTemplates 的工作負載。
  • 共用節點集區的工作負載。每個本機 SSD 磁碟區都可以透過 PersistentVolumeClaim 預留,而且特定 HostPath 不會直接編碼至 Pod 規格中。
  • 需要資料引力至相同本機 SSD 的 Pod。Pod 一律會排定在與本機 PersistentVolume 相同的節點上。

詳情請參閱這個範例,以及開放原始碼 Kubernetes Volumes 說明文件。

處理主機維護作業

部分使用本機 SSD 的 GKE 節點 (例如附加超過 18 TiB Titanium SSD 的 Z3 機器類型) 不支援在主機維護期間即時遷移。VM 會停止並在原地重新啟動,如要查看在維護事件期間有特定行為的機器家族清單,請參閱 Compute Engine 說明文件中的「主機事件簡介」。

由於重新啟動的機型可能會導致節點停機時間延長,因此您應設計具備復原能力的應用程式,並預期 Pod 會終止並重新排定在其他節點上。

與附加 GPU 和 TPU 的節點類似,您可以設定叢集,妥善管理這些維護事件。GKE 維護作業處理常式元件會自動偵測本機 SSD 節點即將進行的維護作業。維護作業開始前,處理常式會汙損節點,防止排定新的 Pod,然後安全地逐出現有 Pod。這樣一來,Pod 就能在叢集中的其他可用節點上重新排程,並遵守您設定的任何 PodDisruptionBudgets。

如需設定工作負載來管理這些事件的詳細操作說明,請參閱「管理未即時遷移的 GKE 節點中斷情形」。

限制

  • 應用程式必須妥善處理無法存取本機 SSD 磁碟區資料的情況。如果 Pod 或節點遭到刪除、修復、升級,或發生無法復原的錯誤,寫入本機 SSD 磁碟的資料不會保留。

    臨時儲存空間本機 SSD 參數會將本機 SSD 磁碟區設定為以 Pod 為基礎的資料生命週期,而 NVMe 本機 SSD 區塊參數則會將本機 SSD 磁碟區設定為以節點為基礎的資料生命週期。

    如需永久儲存空間,建議使用耐用的儲存空間選項 (例如 Persistent Disk、Filestore 或 Cloud Storage)。您也可以使用區域副本,盡量降低叢集生命週期或應用程式生命週期作業期間的資料遺失風險。

  • 節點集區建立後,即無法修改本機 SSD 設定。您無法為現有節點集區啟用、停用或更新本機 SSD 設定。如要變更任何內容,請刪除節點集區並重新建立。

  • 使用 emptyDir 的 Pod 會以透明方式使用本機 SSD,但該節點集區中所有節點上的所有 Pod 都是如此。在同一個節點集區中,GKE 不支援部分 Pod 使用本機 SSD 支援的本機 SSD emptyDir 磁碟區,其他 Pod 則使用節點開機磁碟支援的 emptyDir 磁碟區。如果工作負載使用的 emptyDir 磁碟區是由節點開機磁碟提供支援,請將工作負載排定在其他節點集區上。

  • Autopilot 叢集和自動佈建節點功能僅支援透過自訂 ComputeClasses 使用本機 SSD

  • 建議您將本機 SSD 做為臨時儲存空間,用於在儲存空間最佳化 Z3 VM 上執行的工作負載。這些機器支援即時遷移,但須符合下列條件:

後續步驟