佈建及使用本機 SSD 支援的臨時儲存空間

本頁面說明如何在 Google Kubernetes Engine (GKE) 叢集佈建本機 SSD 儲存空間,以及如何設定工作負載,以便從連接至叢集節點、由本機 SSD 支援的臨時儲存空間中取用資料。

如要進一步瞭解 GKE 的本機 SSD 支援功能,請參閱「關於本機 SSD 儲存空間」。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文中的指令。

建立叢集或節點集區,並使用本機 SSD 支援的臨時儲存空間

使用 Google Cloud CLI 建立叢集或節點集區,並採用本機 SSD 支援的臨時儲存空間。

使用 --ephemeral-storage-local-ssd 選項,即可連接由本機 SSD 磁碟區支援的全代管本機臨時儲存空間。這個儲存空間與 Pod 的生命週期息息相關。 當 Pod 要求臨時儲存空間時,GKE 會將 Pod 排程至已將本機 SSD 磁碟區設定為臨時儲存空間的節點上執行。如要更精細地控制本機 SSD,建議改用本機 SSD 支援的原始區塊儲存空間。

如果您已啟用叢集自動調度資源功能,GKE 會在叢集需要更多臨時儲存空間時,自動調度節點資源。Pod 可透過 emptyDir 磁碟區存取本機 SSD 磁碟區中的資料。

您執行的 gcloud CLI 指令會因所選機型的機器系列代別而異,取決於您要建立的叢集或節點集區。舉例來說,N1 和 N2 機型分別屬於第一代和第二代機器系列,而 C3 機型則屬於第三代機器系列。

建立具有本機 SSD 的叢集

第 1 代或第 2 代

如果您使用的是第一代或第二代機器系列的機型,請指定 --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS 選項來建立叢集。這個選項會在每個節點上佈建指定數量的本機 SSD 磁碟區,供 kubelet 暫時性儲存空間使用。

這些設定僅適用於預設節點集區。如果後續節點集區需要本機 SSD,請在建立節點集區時指定。

如要建立在 GKE 1.25.3-gke.1800 以上版本執行的叢集,且預設集區使用本機 SSD 磁碟區,請執行下列指令:

gcloud container clusters create CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE \
    --release-channel CHANNEL_NAME

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • NUMBER_OF_DISKS:要在每個節點上佈建的本機 SSD 磁碟區數量。在節點設定期間,這些磁碟區會合併為單一邏輯磁碟區。磁碟區數量上限會因機器類型和區域而異。請注意,部分本機 SSD 容量會保留供系統使用。
  • MACHINE_TYPE:要使用的機器類型。這個欄位為必填,因為本機 SSD 無法搭配預設的 e2-medium 類型使用。
  • CHANNEL_NAME:發布管道,包含 1.25.3-gke.1800 以上的 GKE 版本。如果您不想使用發布管道,也可以使用 --cluster-version 標記 (而非 --release-channel),並指定 1.25.3-gke.1800 以上的有效版本。如要判斷有效版本,請使用 gcloud container get-server-config 指令。

第 3 代或第 4 代

如果您使用第三代或第四代機器系列的機器類型,建立叢集時不必指定任何本機 SSD 選項。每個節點可連結的磁碟數量取決於機型。

如要建立叢集,請執行下列指令:

gcloud container clusters create CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --cluster-version CLUSTER_VERSION

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • MACHINE_TYPE:要使用的機型,來自第三代或第四代機器系列。
  • CLUSTER_VERSION:GKE 叢集版本,支援在第三代或第四代機器系列的機器類型上使用本機 SSD。

建立使用本機 SSD 的節點集區

第 1 代或第 2 代

如要建立在 GKE 1.25.3-gke.1800 以上版本運作,且使用本機 SSD 磁碟區的節點集區,請執行下列指令:

gcloud container node-pools create POOL_NAME \
    --cluster=CLUSTER_NAME \
    --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
    --machine-type=MACHINE_TYPE

更改下列內容:

  • POOL_NAME:新節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • NUMBER_OF_DISKS:要在各節點佈建的本機 SSD 磁碟區數量。節點設定期間,這些磁碟區會合併為單一邏輯磁碟區。磁碟區數量上限因機型和區域而異。請注意,部分本機 SSD 容量會保留給系統使用。
  • MACHINE_TYPE:要使用的機型。這是必填欄位,因為本機 SSD 無法與預設 e2-medium 類型搭配使用。

第 3 代或第 4 代

如果您使用第三代或第四代機器系列的機器類型,建立節點集區時不必指定任何本機 SSD 選項。每個節點可附加的磁碟區數量取決於機型。

如要建立節點集區,請執行下列指令:

gcloud container node-pools create POOL_NAME \
  --cluster=CLUSTER_NAME \
  --machine-type=MACHINE_TYPE \
  --node-version NODE_VERSION

更改下列內容:

  • POOL_NAME:新節點集區的名稱。
  • CLUSTER_NAME:叢集名稱。
  • MACHINE_TYPE:要使用的機型,來自第三代或第四代機器系列。
  • NODE_VERSION:GKE 節點集區版本,支援第 3 代或第 4 代機器系列的機器類型本機 SSD。

節點集區中的節點會使用cloud.google.com/gke-ephemeral-storage-local-ssd=true標籤建立。執行下列指令,即可驗證標籤:

kubectl describe node NODE_NAME

在 Autopilot 叢集使用本機 SSD 支援的臨時儲存空間

以其中一種方式設定 Pod 時,您可以使用本機 SSD 做為臨時儲存空間:

  • 您明確選取要執行 Pod 的機器系列,並指定cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector 或具有本機 SSD 的容量預留項目。如要進一步瞭解如何在 Autopilot 中選取機器系列,請參閱「選擇機器系列,將 Autopilot Pod 效能最佳化」。
  • 您要求支援本機 SSD 的 GPU 類型,並指定cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector 或具有本機 SSD 的容量預留項目。NVIDIA H100 (80GB) GPU 和 NVIDIA A100 (80GB) GPU 一律會使用本機固態硬碟做為暫時性儲存空間,且您無法為這些 GPU 指定節點選取器。如要進一步瞭解如何在 Autopilot 中要求 GPU,請參閱「在容器中要求 GPU」。

如需與本機 SSD 相容的機器系列清單,請參閱「支援 Autopilot 本機 SSD 的機器系列」。

直接在工作負載資訊清單中要求本機 SSD

如要使用本機 SSD 做為臨時儲存空間,請將 cloud.google.com/gke-ephemeral-storage-local-ssd: "true" nodeSelector 新增至工作負載資訊清單。舉例來說,下列 Pod 資訊清單會選取本機 SSD 做為 GPU Pod 的臨時儲存空間:

apiVersion: v1
kind: Pod
metadata:
  name: l4-localssd-pod
spec:
  containers:
  - name: my-gpu-container
    image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["while true; do sleep 600; done;"]
    resources:
      requests:
        cpu: 16
        memory: 64Gi
        ephemeral-storage: 800Gi
      limits:
       cpu: 16
       memory: 64Gi
       ephemeral-storage: 800Gi
       nvidia.com/gpu: 8
  nodeSelector:
    cloud.google.com/gke-accelerator: nvidia-l4
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"

透過容量預留項目要求本機 SSD

如果您使用 Compute Engine 容量預留項目預留具有本機 SSD 的機器,Autopilot 會將預留項目中的可用本機 SSD 連接至節點,您不需要在工作負載資訊清單中明確選取本機 SSD。如要進一步瞭解如何搭配 Autopilot 使用預留項目,請參閱「在 Autopilot 叢集中使用容量預留項目」。

舉例來說,下列 Pod 資訊清單會選取具有本機 SSD 的特定預留項目:

apiVersion: v1
kind: Pod
metadata:
  name: local-ssd-pod
spec:
  nodeSelector:
    cloud.google.com/machine-family: MACHINE_SERIES
    cloud.google.com/reservation-name: localssd-count-reservation
    cloud.google.com/reservation-affinity: "specific"
  containers:
  - name: my-container
    image: "k8s.gcr.io/pause"
    resources:
      requests:
        cpu: 6
        memory: "25Gi"
        ephemeral-storage: "100Gi"
      limits:
        cpu: 12
        memory: "50Gi"
        ephemeral-storage: "200Gi"

將 MACHINE_SERIES 替換為支援的機器系列,該系列也支援本機 SSD。如果指定的機器系列不支援本機 SSD,部署作業就會失敗並顯示錯誤。

Autopilot 中支援本機 SSD 的機器系列

Autopilot 叢集支援使用本機 SSD 做為臨時儲存空間,但僅限下列機器系列:

(僅限運算資源預留項目)
(僅限運算資源預留項目)
(僅限運算資源預留項目)
(僅限運算資源預留項目)
(僅限具備運算資源預留項目)
(一律會隨附)
(一律綁定)
(僅限運算資源預留項目)
(一律會隨附)
(一律綁定)
(一律會隨附)
(一律綁定)
(八分之一 GPU 設定除外,g4-standard-6)

使用舊版 API 參數

--local-ssd-count 選項是舊版 API 參數,支援 SCSI 本機 SSD。Compute Engine 第 3 代機器系列不支援 SCSI,僅支援 NVMe。這個選項僅適用於 Windows Server 叢集。如果您目前在 Linux 叢集上使用舊版 API 參數,建議改用 --ephemeral-storage-local-ssd 選項。

Windows Server 叢集上的本機 SSD

如果叢集執行 Windows Server 節點集區,並搭配使用本機 SSD,您必須先登入節點並格式化磁碟區,才能使用。在下列範例中,本機 SSD 磁碟區會以 NTFS 檔案系統格式化。您也可以在磁碟區下建立目錄。在本例中,目錄位於 D 磁碟下。

PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd

存取本機 SSD 磁碟區

以下範例說明如何存取本機 SSD 支援的臨時儲存空間。

以 emptyDir 磁碟區形式提供的暫時儲存空間

您可以設定 GKE 節點集區,使用本機 SSD 做為臨時儲存空間,包括 emptyDir 磁碟區。

下列 Pod 資訊清單使用 emptyDir 和節點選取器 cloud.google.com/gke-ephemeral-storage-local-ssd。您也可以對 Deployment 資訊清單或 StatefulSet 資訊清單套用類似技巧。

選擇臨時儲存空間資源要求時,請考量系統預留的本機 SSD 容量。

apiVersion: v1
kind: Pod
metadata:
  name: POD_NAME
spec:
  containers:
    - name: CONTAINER_NAME
      image: "registry.k8s.io/pause"
      resources:
        requests:
          ephemeral-storage: "200Gi"
      volumeMounts:
        - mountPath: /cache
          name: scratch-volume
  nodeSelector:
    cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
  volumes:
    - name: scratch-volume
      emptyDir: {}

疑難排解

如需疑難排解操作說明,請參閱「排解 GKE 儲存空間問題」。

後續步驟