Compute Engine 永久磁碟 CSI 驅動程式是存取Google Kubernetes Engine (GKE) 叢集 Hyperdisk 儲存空間的主要方式。
事前準備
開始之前,請確認你已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
- 將預設地區和區域設為其中一個支援的值。
需求條件
如要在 GKE 中使用 Hyperdisk 磁碟區,叢集必須符合下列需求:
- 使用執行 GKE 1.26 以上版本的 Linux 叢集。如果您使用發布管道,請確認管道的 GKE 版本符合或高於這個驅動程式的最低要求。如要佈建 Hyperdisk Balanced High Availability 磁碟區,必須使用 GKE 1.33 以上版本。
- 確認已啟用 Compute Engine Persistent Disk CSI 驅動程式。在新的 Autopilot 和 Standard 叢集中,Compute Engine Persistent Disk 驅動程式預設為啟用,且使用 Autopilot 時無法停用或編輯。如需從叢集啟用 Compute Engine Persistent Disk CSI 驅動程式,請參閱「在現有叢集上啟用 Compute Engine Persistent Disk CSI 驅動程式」。
為 GKE 建立 Hyperdisk 磁碟區
本節概述如何在 GKE 中,使用 Compute Engine CSI 驅動程式建立 Hyperdisk 磁碟區。
建立 StorageClass
Compute Engine 永久磁碟 CSI 驅動程式提供下列永久磁碟儲存空間Type
欄位,以支援 Hyperdisk:
hyperdisk-balanced
hyperdisk-throughput
hyperdisk-extreme
hyperdisk-ml
hyperdisk-balanced-high-availability
如要使用所需的總處理量或 IOPS 層級建立新的 StorageClass,請在供應器欄位中使用 pd.csi.storage.gke.io
,並指定其中一種 Hyperdisk 儲存空間類型。
每種 Hyperdisk 類型都有預設值,效能取決於初始佈建的磁碟大小。建立 StorageClass 時,您可以視 Hyperdisk 類型選擇指定下列參數。如果省略這些參數,GKE 會改用預設的容量型磁碟類型。如需處理量或 IOPS 允許值的相關指南,請參閱「規劃 Hyperdisk 磁碟區的效能等級」。
參數 | Hyperdisk 類型 | 用量 |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced*、Hyperdisk Balanced High Availability、Hyperdisk Throughput | 使用「Mi」限定符以 MiB/秒為單位表示處理量值。舉例來說,如果所需處理量為 250 MiB/秒,請在建立 StorageClass 時指定 "250Mi" 。 |
provisioned-iops-on-create |
Hyperdisk Balanced、Hyperdisk Balanced High Availability、Hyperdisk Extreme | IOPS 值應不含任何限定符,舉例來說,如果您需要 7,000 IOPS,請在建立 StorageClass 時指定 "7000" 。 |
下列範例說明如何為每個 Hyperdisk 類型建立 StorageClass:
Hyperdisk Balanced
將下列資訊清單儲存到名為
hdb-example-class.yaml
的檔案:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000"
建立 StorageClass:
kubectl create -f hdb-example-class.yaml
Hyperdisk Throughput
將下列資訊清單儲存到名為
hdt-example-class.yaml
的檔案:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: throughput-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-throughput provisioned-throughput-on-create: "50Mi"
建立 StorageClass:
kubectl create -f hdt-example-class.yaml
Hyperdisk Extreme
將下列資訊清單儲存到名為
hdx-example-class.yaml
的檔案:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: extreme-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-extreme provisioned-iops-on-create: "50000"
建立 StorageClass:
kubectl create -f hdx-example-class.yaml
Hyperdisk Balanced HA
將下列資訊清單儲存至名為
hdb-ha-example-class.yaml
的檔案。如果是區域叢集,請設定要建立 PersistentVolume 的可用區。
如果是地區叢集,您可以選擇不設定
allowedTopologies
欄位,在 Pod 排程時,於隨機選取的兩個可用區中建立 PersistentVolume。
如要進一步瞭解支援的區域,請參閱 Hyperdisk 區域供應情形。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-ha-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced-high-availability provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE1 - ZONE2
建立 StorageClass:
kubectl create -f hdb-ha-example-class.yaml
如要找出叢集中可用的 StorageClass 名稱,請執行下列指令:
kubectl get sc
建立 PersistentVolumeClaim
您可以建立參照 Compute Engine Persistent Disk CSI 驅動程式 StorageClass 的 PersistentVolumeClaim。
Hyperdisk Balanced
在本範例中,您將 Hyperdisk Balanced 磁碟區的目標儲存空間容量指定為 20 GiB。
將下列 PersistentVolumeClaim 資訊清單儲存到名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: balanced-storage resources: requests: storage: 20Gi
套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
Hyperdisk Throughput
在本範例中,您將 Hyperdisk Throughput 磁碟區的目標儲存空間容量指定為 2 TiB。
將以下 PersistentVolumeClaim 資訊清單儲存至名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: throughput-storage resources: requests: storage: 2Ti
套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
Hyperdisk Extreme
在本例中,您將 Hyperdisk Extreme 磁碟區的最低儲存空間容量指定為 64 GiB。
將以下 PersistentVolumeClaim 資訊清單儲存至名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: extreme-storage resources: requests: storage: 64Gi
套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
Hyperdisk Balanced HA
在本例中,您將 Hyperdisk Balanced High Availability 磁碟區的最低儲存空間容量指定為 20 GiB,存取模式則指定為 ReadWriteOnce
。Hyperdisk Balanced High Availability 也支援 ReadWriteMany
和 ReadWriteOncePod
的存取模式。如要瞭解各存取模式的差異和用途,請參閱「永久磁碟區存取模式」。
將以下 PersistentVolumeClaim 資訊清單儲存至名為
pvc-example.yaml
的檔案:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: balanced-ha-storage resources: requests: storage: 20Gi
套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
建立 Deployment 來使用 Hyperdisk 磁碟區
使用 Pod 和 PersistentVolumes 時,建議您使用工作負載控制器 (例如 Deployment 或 StatefulSet)。
下列範例會建立資訊清單,設定 Pod 以部署 Nginx 網路伺服器,並使用上節建立的 PersistentVolumeClaim。將下列範例資訊清單儲存為
hyperdisk-example-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: web-server-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc readOnly: false
如要根據
hyperdisk-example-deployment.yaml
資訊清單檔案建立 Deployment,請執行下列指令:kubectl apply -f hyperdisk-example-deployment.yaml
確認 Deployment 已成功建立:
kubectl get deployment
Hyperdisk 執行個體可能需要幾分鐘才能完成佈建。 部署作業完成佈建後,會回報
READY
狀態。如要查看進度,請執行下列指令,監控 PersistentVolumeClaim 狀態:
kubectl get pvc
從快照佈建 Hyperdisk 磁碟區
如要從現有的永久磁碟快照建立新的 Hyperdisk 磁碟區,請使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。如要瞭解如何建立永久磁碟快照,請參閱「建立及使用磁碟區快照」。
控制台
前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。
按一下「建立磁碟」。
在「Disk Type」(磁碟類型) 下方,選擇下列其中一種磁碟類型:
- Hyperdisk Balanced
- Hyperdisk Extreme
- Hyperdisk Throughput
- Hyperdisk High Availability
在「Disk source type」(磁碟來源類型) 下方,按一下「Snapshot」(快照)。
選取要還原的快照名稱。
選取新磁碟的大小 (以 GiB 為單位)。這個數字必須等於或大於快照原始來源磁碟的大小。
如果與預設值不同,請為磁碟設定所需的佈建處理量或佈建 IOPS。
按一下「建立」即可建立 Hyperdisk 磁碟區。
gcloud
執行 gcloud compute disks create
指令,從快照建立 Hyperdisk 磁碟區。
Hyperdisk Balanced
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-balanced
更改下列內容:
Hyperdisk Throughput
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--type=hyperdisk-throughput
更改下列內容:
Hyperdisk Extreme
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-extreme
更改下列內容:
Hyperdisk Balanced HA
gcloud compute disks create DISK_NAME \
--size=SIZE \
--region=REGION \
--replica-zones=('ZONE1', 'ZONE2') \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-balanced-high-availability
更改下列內容:
DISK_NAME
:新磁碟的名稱。SIZE
:新磁碟的大小,以 GiB 或 TiB 為單位。如需最新容量限制,請參閱 Compute Engine 說明文件。REGION
:新磁碟的區域。如需最新區域供應情形,請參閱 Compute Engine 說明文件。ZONE1
、ZONE2
:備用資源所在的區域。SNAPSHOT_NAME
:要還原的快照名稱。THROUGHPUT_LIMIT
:選用。如果是 Hyperdisk Balanced High Availability 磁碟,這是一個整數,代表磁碟可達到的輸送量,以 MiB/s 為單位。如要進一步瞭解容量限制,請參閱「 大小和效能限制」一文。IOPS_LIMIT
:選用。如果是 Hyperdisk Balanced High Availability 磁碟,這是磁碟可達到的最大 IOPS 數量。如要進一步瞭解容量限制,請參閱「 大小和效能限制」。
建立 Hyperdisk 磁碟區的快照
如要從 Hyperdisk 磁碟區建立快照,請按照建立 Persistent Disk 磁碟區快照的相同步驟操作:
更新現有 Hyperdisk 磁碟區的佈建輸送量或 IOPS
本節說明如何修改 Hyperdisk 磁碟區的佈建效能。
處理量
只有 Hyperdisk Balanced、Hyperdisk Balanced High Availability 和 Hyperdisk Throughput 磁碟區支援更新佈建輸送量。
如要更新 Hyperdisk 磁碟區的佈建輸送量層級,請按照「變更 Hyperdisk 磁碟區的佈建效能」一文中的 Google Cloud 主控台、gcloud CLI 或 Compute Engine API 操作說明進行。
建立 Hyperdisk 磁碟區後,您可以變更磁碟區的佈建輸送量層級 (每 4 小時最多一次)。新的輸送量等級最多可能需要 15 分鐘才會生效。在效能變更期間,任何效能服務水準協議和服務水準目標均無效。無論磁碟是否連接到執行中的執行個體,您隨時可以變更現有磁碟區的輸送量層級。
您指定的新輸送量等級必須符合 Hyperdisk Balanced、Hyperdisk Throughput 和 Hyperdisk Balanced High Availability 磁碟區的支援值。
如要更新 Hyperdisk 磁碟區的佈建輸送量層級,您必須找出支援 PersistentVolumeClaim 和 PersistentVolume 資源的 Persistent Disk 名稱:
前往 Google Cloud 控制台的物件瀏覽器。
找出 PersistentVolumeClaim 物件的項目。
按一下「磁碟區」連結。
開啟相關聯 PersistentVolume 的 YAML 分頁。在這個分頁中找出 CSI
volumeHandle
值。請注意這個控制代碼的最後一個元素 (值應為「
pvc-XXXXX
」)。這是 PersistentVolumeClaim 的名稱。您也應記下專案和區域。
IOPS
只有 Hyperdisk Balanced、Hyperdisk Balanced High Availability 和 Hyperdisk Extreme 磁碟區支援更新佈建 IOPS。
如要更新 Hyperdisk 磁碟區的佈建 IOPS 級別,請按照「變更 Hyperdisk 磁碟區的佈建效能」一文中的 Google Cloud 主控台、gcloud CLI 或 Compute Engine API 指示操作。
建立 Hyperdisk IOPS 磁碟區後,您可以變更佈建的 IOPS 級別 (每 4 小時最多一次)。新的 IOPS 層級最多可能需要 15 分鐘才會生效。在效能變更期間,任何效能服務水準協議和服務等級目標均無效。無論磁碟是否連接到執行中的執行個體,您隨時可以變更現有磁碟區的 IOPS 級別。
指定的新 IOPS 級別必須符合 Hyperdisk Balanced 或 Hyperdisk Extreme 磁碟區支援的值。
如要更新 Hyperdisk 磁碟區的佈建 IOPS 級別,請找出支援 PersistentVolumeClaim 和 PersistentVolume 資源的 Persistent Disk 名稱:
前往 Google Cloud 控制台的物件瀏覽器。
找出 PersistentVolumeClaim 物件的項目。
按一下「磁碟區」連結。
開啟相關聯 PersistentVolume 的 YAML 分頁。在這個分頁中找出 CSI
volumeHandle
值。請注意這個控制代碼的最後一個元素 (值應為「
pvc-XXXXX
」)。這是 PersistentVolumeClaim 的名稱。您也應記下專案和區域。
監控 Hyperdisk 磁碟區的總處理量或 IOPS
如要監控 Hyperdisk 磁碟區的佈建效能,請參閱 Compute Engine 說明文件中的「分析佈建的 IOPS 和總處理量」。
疑難排解
本節提供疑難排解指南,協助解決 GKE 上的 Hyperdisk 磁碟區問題。
無法變更效能或容量:比例超出範圍
嘗試變更佈建的效能等級或容量時,如果所選效能等級或容量超出磁碟區可接受的範圍,就會發生下列錯誤:
Requested provisioned throughput cannot be higher than <value>.
Requested provisioned throughput cannot be lower than <value>.
Requested provisioned throughput is too high for the requested disk size.
Requested provisioned throughput is too low for the requested disk size.
Requested disk size is too high for current provisioned throughput.
為 Hyperdisk 處理量磁碟區佈建的處理量必須符合下列條件:
- 每 TiB 容量至少 10 MiB/秒,最多 90 MiB/秒。
- 每個磁碟區最多 600 MiB/秒。
如要解決這個問題,請將要求的處理量或容量修正為允許範圍內的值,然後重新發出指令。
無法變更效能:受到速率限制
嘗試變更佈建的效能等級時,如果效能等級在過去 4 小時內已變更,就會發生下列錯誤:
Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.
Hyperdisk 處理量和 IOPS 磁碟區每 4 小時可更新一次佈建效能。如要解決這個問題,請等待磁碟區的冷卻時間結束,然後重新發出指令。