使用 Hyperdisk 擴充儲存空間效能


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 建立 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"
* 如果您需要強化安全性,並打算使用機密 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

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

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. 套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:

    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. 套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:

    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. 套用參照您從先前範例建立的 StorageClass 的 PersistentVolumeClaim:

    kubectl apply -f pvc-example.yaml
    

Hyperdisk Balanced HA

在本例中,您將 Hyperdisk Balanced High Availability 磁碟區的最低儲存空間容量指定為 20 GiB,存取模式則指定為 ReadWriteOnce。Hyperdisk Balanced High Availability 也支援 ReadWriteManyReadWriteOncePod 的存取模式。如要瞭解各存取模式的差異和用途,請參閱「永久磁碟區存取模式」。

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

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

    kubectl apply -f pvc-example.yaml
    

建立 Deployment 來使用 Hyperdisk 磁碟區

使用 Pod 和 PersistentVolumes 時,建議您使用工作負載控制器 (例如 DeploymentStatefulSet)。

  1. 下列範例會建立資訊清單,設定 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
    
  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 磁碟區

如要從現有的永久磁碟快照建立新的 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. 在「Disk source type」(磁碟來源類型) 下方,按一下「Snapshot」(快照)

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

Hyperdisk Extreme

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

更改下列內容:

  • DISK_NAME:新磁碟的名稱。
  • SIZE:新磁碟的大小,以 GiB 或 GB 為單位,或是以 TiB 或 TB 為單位。如要進一步瞭解容量限制,請參閱「 大小和效能限制」。
  • SNAPSHOT_NAME:要還原的快照名稱。
  • IOPS_LIMIT:選用:如果是極端超磁碟,這是磁碟每秒可達到的 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:新磁碟的大小,以 GiB 或 TiB 為單位。如需最新容量限制,請參閱 Compute Engine 說明文件
  • REGION:新磁碟的區域。如需最新區域供應情形,請參閱 Compute Engine 說明文件
  • ZONE1ZONE2:備用資源所在的區域。
  • 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 BalancedHyperdisk ThroughputHyperdisk Balanced High Availability 磁碟區的支援值。

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

  1. 前往 Google Cloud 控制台的物件瀏覽器

    前往物件瀏覽器

  2. 找出 PersistentVolumeClaim 物件的項目。

  3. 按一下「磁碟區」連結。

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

  5. 請注意這個控制代碼的最後一個元素 (值應為「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 BalancedHyperdisk Extreme 磁碟區支援的值。

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

  1. 前往 Google Cloud 控制台的物件瀏覽器

    前往物件瀏覽器

  2. 找出 PersistentVolumeClaim 物件的項目。

  3. 按一下「磁碟區」連結。

  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 處理量磁碟區佈建的處理量必須符合下列條件:

  • 每 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 小時可更新一次佈建效能。如要解決這個問題,請等待磁碟區的冷卻時間結束,然後重新發出指令。

後續步驟