本頁說明如何在 Google Kubernetes Engine (GKE) 工作負載中使用外部儲存空間硬體 (例如 Compute Engine 永久磁碟) 做為暫時性磁碟區。您應該已熟悉 Kubernetes Volume 和 StorageClasses。
何時在 Kubernetes 中使用暫存空間
如果工作負載只需要在應用程式生命週期內使用資料,例如資料處理管道、機器學習工作、批次處理、本機快取或分析,就適合使用暫時性儲存空間。根據預設,GKE 節點開機磁碟的一部分可用於 Pod 中的臨時儲存空間。這種做法通常需要審慎規劃空間。
Kubernetes 一般暫時性磁碟區可讓您使用 PersistentVolumeClaim,明確要求 Pod 的暫時性儲存空間。GKE 會動態佈建 Compute Engine 永久磁碟,並將磁碟附加至節點。這類臨時儲存空間適用於下列情況:
- 您的工作負載對效能有高度要求,因此需要控管儲存空間硬體。
- 您需要短期、容器專用的暫存空間。
- 您想避免使用
emptyDir
佈建臨時儲存空間。emptyDir
在您希望多個容器共用暫時性儲存空間中的資料時,磁碟區仍相當實用。 - 您需要的暫時性儲存空間容量超過 GKE 內建預設值。
- 您不想預先為 Standard 模式 GKE 叢集規劃節點開機磁碟大小和類型。
GKE 中的臨時儲存空間類型
一般來說,您可以使用開機磁碟儲存空間容量或專用永久磁碟,做為 Pod 和容器中的暫時性儲存空間。下表說明兩者的差異:
儲存空間類型 | 使用方法 | 說明 |
---|---|---|
開機磁碟 - 永久磁碟 | 在 Pod 規格中使用 如需操作說明,請參閱「建立磁碟區」。 |
要求的臨時儲存空間取自節點開機磁碟的保留部分。Autopilot 和 Standard 叢集預設都會啟用這項功能。 如果 Pod 要求的臨時儲存空間較小,或是您想在 Pod 中的多個容器之間共用臨時資料,就很適合使用這項功能。 Autopilot
標準 沒有大小限制,但需要審慎規劃節點開機磁碟大小和儲存硬體類型。 如要瞭解 GKE 如何計算節點開機磁碟中的臨時儲存空間預留量,請參閱本機臨時儲存空間預留量。 |
本機固態硬碟磁碟 |
如需操作說明,請參閱「使用本機 SSD 佈建暫時性儲存空間」。 |
本機 SSD 磁碟使用固定的 375 GB 增量,支援標準模式 GKE 叢集,以及執行 A100 (80 GB) GPU 的 Autopilot 節點。 需要高處理量的臨時儲存空間時,請使用本機 SSD。 詳情請參閱「關於 GKE 的本機 SSD」。 |
專屬永久磁碟 |
本文說明如何要求這類暫時性儲存空間。 |
Google Cloud 動態佈建所要求的外部硬體、將其附加至節點,並將所要求的磁碟區掛接至 Pod。 當 Pod 有大量臨時儲存空間要求,或您想控管基礎永久磁碟類型時,請使用這項功能。這些磁碟區具有下列屬性:
如要進一步瞭解這類暫時磁碟區,請參閱「一般暫時磁碟區」。 |
定價
如本指南所述,透過一般暫時性磁碟區佈建的儲存空間會依據 Compute Engine 磁碟定價計費。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 確認您有執行 1.23 以上版本的 GKE Autopilot 或 Standard 叢集。
- 請確認專案 Google Cloud 有足夠的配額,可供儲存硬體使用。如要管理配額,請參閱查看專案的配額。
建立 StorageClass
建立自訂 Kubernetes StorageClass 時,您可以根據價格和效能需求,指定要佈建的儲存空間類型。這是選用步驟,但建議執行。如要使用 GKE 預設的 StorageClass (採用 pd-balanced
永久磁碟類型),請略過這個步驟。
將下列資訊清單儲存為
ephemeral-pd-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ephemeral-ssd provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: STORAGE_TYPE
將
STORAGE_TYPE
替換成您想要的永久磁碟類型名稱,例如pd-ssd
。如需支援的類型清單,請參閱 Compute Engine 說明文件中的「永久磁碟類型」。建立 StorageClass:
kubectl create -f ephemeral-pd-class.yaml
在 Pod 中要求暫存儲存空間容量
如要佈建、連結及使用外部硬體做為暫時性儲存空間,請將相應的磁碟區新增至 Pod 資訊清單,並將磁碟區掛接項目新增至容器規格。
將下列資訊清單儲存為
ephemeral-ssd-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-deployment spec: replicas: 1 selector: matchLabels: storage: ephemeral template: metadata: labels: storage: ephemeral spec: containers: - name: ephemeral-container image: nginx resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/short-term" name: ephemeral-volume volumes: - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "ephemeral-ssd" resources: requests: storage: 1Ti
這份資訊清單會建立新的 Kubernetes PersistentVolumeClaim,要求名為
ephemeral-volume
的新 PersistentVolume,並具備下列屬性:spec.volumes.ephemeral
:ephemeral
磁碟區類型。.spec.accessModes
:磁碟區存取模式,可決定 Pod 的讀取/寫入存取權,以及節點間的磁碟區共用情形。本範例使用ReadWriteOnce
,將 PersistentVolume 掛接到單一節點,供節點上的一或多個 Pod 存取。詳情請參閱「存取模式」。.spec.storageClassName
:(選用) 您建立的 StorageClass 名稱。如果省略這個欄位,GKE 會使用預設的 StorageClass,並佈建pd-balanced
永久磁碟。.spec.resources.requests.storage
:所需的儲存空間容量。
建立 Deployment:
kubectl create -f ephemeral-ssd-deployment.yaml
GKE 會佈建符合 PersistentVolumeClaim 需求的 Compute Engine 磁碟,並將磁碟附加至節點。GKE 會將磁碟區掛接到 Pod,並為容器提供要求的容量。
確認 GKE 已掛接暫時磁碟區
在 Pod 中建立殼層工作階段:
kubectl exec -it deploy/ephemeral-deployment -- bash
檢查已掛接的磁碟區:
df -h
輸出結果會與下列內容相似:
Filesystem Size Used Available Use% Mounted on ... /dev/sdb 1006.9G 28.0K 1006.8G 0% /short-term /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hosts /dev/sda1 94.3G 3.6G 90.6G 4% /dev/termination-log /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hostname /dev/sda1 94.3G 3.6G 90.6G 4% /etc/resolv.conf ...
結束殼層工作階段:
exit