使用 Hyperdisk 調整儲存空間效能

Compute Engine Persistent Disk CSI 驅動程式是透過 Google Kubernetes Engine (GKE) 叢集存取 Hyperdisk 儲存空間的主要方式。

事前準備

開始之前,請確認您已執行下列工作:

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

需求條件

如要在 GKE 中使用 Hyperdisk 磁碟區,叢集必須符合下列需求:

建立 GKE 適用的 Hyperdisk 磁碟區

本節概述如何在 GKE 中,建立由 Compute Engine CSI 驅動程式支援的 Hyperdisk 磁碟區。

建立 StorageClass

Compute Engine Persistent Disk CSI 驅動程式提供下列永久磁碟儲存空間 Type 欄位,以支援 Hyperdisk:

  • hyperdisk-balanced
  • hyperdisk-throughput
  • hyperdisk-extreme
  • hyperdisk-ml
  • hyperdisk-balanced-high-availability

如要建立新的 StorageClass,並指定所需的處理量或 IOPS 等級,請在佈建工具欄位中使用 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/s 為單位表示處理量值。舉例來說,如果所需的處理量為 250 MiB/s,請在建立 StorageClass 時指定 "250Mi"。
provisioned-iops-on-create Hyperdisk Balanced、Hyperdisk Balanced High Availability、Hyperdisk Extreme IOPS 值不應包含任何限定詞。舉例來說,如果您需要 7,000 IOPS,請在建立 StorageClass 時指定 "7000"。
* 如果您需要強化安全性,並打算使用機密 Google Kubernetes Engine 節點,請考慮為 Hyperdisk Balanced 建立機密模式、查看其他 Hyperdisk Balanced 機密模式限制,並進一步瞭解機密 Google Kubernetes Engine 節點。

以下範例說明如何為各個 Hyperdisk 類型建立 StorageClass:

Hyperdisk Balanced

  1. 將下列資訊清單儲存至名為 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"
    
  2. 建立 StorageClass:

    kubectl create -f hdb-example-class.yaml
    

Hyperdisk Throughput

  1. 將下列資訊清單儲存至名為 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"
    
  2. 建立 StorageClass:

    kubectl create -f hdt-example-class.yaml
    

Hyperdisk Extreme

  1. 將下列資訊清單儲存至名為 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"
    
  2. 建立 StorageClass:

    kubectl create -f hdx-example-class.yaml
    

Hyperdisk Balanced HA

  1. 將下列資訊清單儲存至名為 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
    
  2. 建立 StorageClass:

    kubectl create -f hdb-ha-example-class.yaml
    

如要找出叢集中可用的 StorageClass 名稱,請執行下列指令:

kubectl get sc

建立 PersistentVolumeClaim

您可以建立 PersistentVolumeClaim,參照 Compute Engine Persistent Disk CSI 驅動程式的 StorageClass。

Hyperdisk Balanced

在這個範例中,您將 Hyperdisk Balanced 磁碟區的目標儲存空間容量指定為 20 GiB。

  1. 將下列 PersistentVolumeClaim 資訊清單儲存至名為 pvc-example.yaml 的檔案:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-storage
      resources:
        requests:
          storage: 20Gi
    
  2. 套用 PersistentVolumeClaim,參照您在先前範例中建立的 StorageClass:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Throughput

在這個範例中,您將 Hyperdisk Throughput 磁碟區的目標儲存空間容量指定為 2 TiB。

  1. 將下列 PersistentVolumeClaim 資訊清單儲存至名為 pvc-example.yaml 的檔案:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: throughput-storage
      resources:
        requests:
          storage: 2Ti
    
  2. 套用 PersistentVolumeClaim,參照您在先前範例中建立的 StorageClass:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Extreme

在這個範例中,您將 Hyperdisk Extreme 磁碟區的儲存空間容量下限指定為 64 GiB。

  1. 將下列 PersistentVolumeClaim 資訊清單儲存至名為 pvc-example.yaml 的檔案:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: extreme-storage
      resources:
        requests:
          storage: 64Gi
    
  2. 套用 PersistentVolumeClaim,參照您在先前範例中建立的 StorageClass:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Balanced HA

在本範例中,您將 Hyperdisk Balanced High Availability 磁碟區的儲存空間容量下限指定為 20 GiB,並將存取模式指定為 ReadWriteOnce。Hyperdisk Balanced High Availability 也支援 ReadWriteMany 和 ReadWriteOncePod 存取模式。如要瞭解各存取模式的差異和用途,請參閱「PersistentVolume 存取模式」。

如果使用 ReadWriteMany 存取模式,則必須在 PersistentVolumeClaim 中設定 volumeMode: Block 欄位值組合。使用這項設定時,磁碟區會公開為原始區塊裝置,而非共用檔案系統,且應用程式必須自行管理資料一致性。如需範例,請參閱「佈建區域性永久磁碟和 Hyperdisk Balanced High Availability 磁碟區」。

  1. 將下列 PersistentVolumeClaim 資訊清單儲存至名為 pvc-example.yaml 的檔案:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: balanced-ha-storage
      resources:
        requests:
          storage: 20Gi
    
  2. 套用 PersistentVolumeClaim,參照您在先前範例中建立的 StorageClass:

    kubectl apply -f pvc-example.yaml
    

建立 Deployment 來使用 Hyperdisk 磁碟區

搭配使用 Pod 和 PersistentVolume 時,建議您使用工作負載控制器 (例如部署作業或 StatefulSet)。

  1. 下列範例會建立資訊清單,設定 Pod 以使用上一節建立的 PersistentVolumeClaim 部署 Nginx 網路伺服器。將下列範例資訊清單儲存為 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:
              # Reference the PVC created earlier.
              claimName: podpvc
              readOnly: false
    
  2. 如要根據 hyperdisk-example-deployment.yaml 資訊清單檔案建立 Deployment,請執行下列指令:

    kubectl apply -f hyperdisk-example-deployment.yaml
    
  3. 確認 Deployment 已成功建立:

    kubectl get deployment
    

    Hyperdisk 執行個體可能需要幾分鐘才能完成佈建。部署作業完成佈建後,會回報 READY 狀態。

  4. 如要查看進度,請執行下列指令,監控 PersistentVolumeClaim 狀態:

    kubectl get pvc
    

透過快照佈建 Hyperdisk 磁碟區

如要從現有的 Persistent Disk 快照建立新的 Hyperdisk 磁碟區,請使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。如要瞭解如何建立永久磁碟快照,請參閱「建立及使用磁碟區快照」。

控制台

  1. 前往 Google Cloud 控制台的「Disks」(磁碟) 頁面。

    前往「Disks」(磁碟) 頁面

  2. 按一下「建立磁碟」。

  3. 在「Disk Type」(磁碟類型) 下方,選擇下列其中一種磁碟類型:

    • Hyperdisk Balanced
    • Hyperdisk Extreme
    • Hyperdisk Throughput
    • Hyperdisk High Availability
  4. 在「磁碟來源類型」下方,點選「快照」。

  5. 選取要還原的快照名稱。

  6. 選取新磁碟的大小 (以 GiB 為單位)。這個數字必須等於或大於快照的原始來源磁碟。

  7. 設定磁碟所需的「佈建輸送量」或「佈建 IOPS」(如與預設值不同)。

  8. 按一下「建立」,建立 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

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • SIZE:新磁碟的大小,以 gibibyte (GiB) 或 tebibyte (TiB) 為單位。如要進一步瞭解容量限制,請參閱「大小和效能限制」。
  • SNAPSHOT_NAME:要還原的快照名稱。
  • THROUGHPUT_LIMIT:選用。如果是 Hyperdisk Balanced 磁碟,這個整數代表磁碟可達到的輸送量,以 MiB/s 為單位。如要進一步瞭解容量限制,請參閱「大小和效能限制」。
  • IOPS_LIMIT:選用。如果是 Hyperdisk Balanced 磁碟,則代表磁碟可達到的 IOPS 上限。如要進一步瞭解容量限制,請參閱「大小和效能限制」。

Hyperdisk Throughput

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-throughput=TRHROUGHPUT_LIMIT \
    --type=hyperdisk-throughput

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • SIZE:新磁碟的大小,以 gibibyte (GiB 或 GB) 或 tebibyte (TiB 或 TB) 為單位。如要進一步瞭解容量限制,請參閱「大小和效能限制」。
  • SNAPSHOT_NAME:要還原的快照名稱。
  • THROUGHPUT_LIMIT:選用:如果是 Hyperdisk Throughput 磁碟,這個整數代表磁碟可達到的處理量,以 MiB/s 為單位。如要進一步瞭解容量限制,請參閱「大小和效能限制」。

Hyperdisk Extreme

gcloud compute disks create DISK_NAME \
    --size=SIZE \
    --source-snapshot=SNAPSHOT_NAME \
    --provisioned-iops=IOPS_LIMIT \
    --type=hyperdisk-extreme

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • SIZE:新磁碟的大小,以 gibibyte (GiB 或 GB) 或 tebibyte (TiB 或 TB) 為單位。如要進一步瞭解容量限制,請參閱「大小和效能限制」。
  • SNAPSHOT_NAME:要還原的快照名稱。
  • IOPS_LIMIT:選用:如果是 Hyperdisk Extreme 磁碟,這是磁碟每秒可達到的 I/O 作業數量上限。如要進一步瞭解容量限制,請參閱「大小和效能限制」。

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:新磁碟的大小,以 gibibyte (GiB) 或 tebibyte (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 磁碟區的佈建輸送量等級,請按照 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 操作說明,變更 Hyperdisk 磁碟區的佈建效能。

建立 Hyperdisk 磁碟區後,您可以變更佈建輸送量等級 (每 4 小時最多一次)。新的處理量等級最多可能需要 15 分鐘才會生效。在效能變更期間,任何效能服務水準協議和服務等級目標均不生效。無論磁碟是否連接至執行中的執行個體,您隨時可以變更現有磁碟區的處理量等級。

您指定的新處理量等級必須符合 Hyperdisk Balanced、Hyperdisk Throughput 和 Hyperdisk Balanced High Availability 磁碟區支援的值。

如要更新 Hyperdisk 磁碟區的佈建輸送量等級,您必須找出支援 PersistentVolumeClaim 和 PersistentVolume 資源的 Persistent Disk 名稱:

  1. 前往 Google Cloud 控制台的「Object browser」(物件瀏覽器)。

    前往「Object Browser」(物件瀏覽器) 頁面

  2. 找出 PersistentVolumeClaim 物件的項目。

  3. 按一下「Volume」連結。

  4. 開啟相關 PersistentVolume 的「YAML」分頁。在這個分頁中找出 CSI volumeHandle 值。

  5. 請記下這個控制代碼的最後一個元素 (其值應類似「pvc-XXXXX」),這就是 PersistentVolumeClaim 的名稱。也請記下專案和可用區。

IOPS

只有 Hyperdisk Balanced、Hyperdisk Balanced High Availability 和 Hyperdisk Extreme 磁碟區,支援更新佈建的 IOPS。

如要更新 Hyperdisk 磁碟區的佈建 IOPS 級別,請按照 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 操作說明,變更 Hyperdisk 磁碟區的佈建效能。

建立 Hyperdisk IOPS 磁碟區後,您可以變更佈建的 IOPS 等級 (每 4 小時最多一次)。新的 IOPS 級別最多可能需要 15 分鐘才會生效。在效能變更期間,任何效能服務水準協議和服務等級目標均不生效。無論磁碟是否已連接至執行中的執行個體,您隨時可以變更現有磁碟區的 IOPS 級別。

指定的新 IOPS 等級必須符合 Hyperdisk Balanced 或 Hyperdisk Extreme 磁碟區支援的值。

如要更新 Hyperdisk 磁碟區的佈建 IOPS 級別,您必須找出支援 PersistentVolumeClaim 和 PersistentVolume 資源的 Persistent Disk 名稱:

  1. 前往 Google Cloud 控制台的「Object browser」(物件瀏覽器)。

    前往「Object Browser」(物件瀏覽器) 頁面

  2. 找出 PersistentVolumeClaim 物件的項目。

  3. 按一下「Volume」連結。

  4. 開啟相關 PersistentVolume 的「YAML」分頁。在這個分頁中找出 CSI volumeHandle 值。

  5. 請記下這個控制代碼的最後一個元素 (其值應類似「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 Throughput 磁碟區佈建的處理量必須符合下列規定:

  • 每 TiB 容量至少 10 MiB/s,且每 TiB 容量不超過 90 MiB/s。
  • 每個磁碟區最多 600 MiB/秒。

如要解決這個問題,請將要求的處理量或容量修正為允許範圍內的值,然後重新發出指令。

無法變更效能:頻率受限

如果您嘗試變更佈建效能等級,但過去 4 小時內已變更過,就會發生下列錯誤:

Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.

Hyperdisk Throughput 和 IOPS 磁碟區的佈建效能每 4 小時可更新一次。如要解決這個問題,請等待磁碟區的冷卻計時器結束,然後重新發出指令。

後續步驟