透過 Hyperdisk 儲存空間集區,提升儲存空間效能和成本效益


本頁說明如何使用 GKE Hyperdisk 儲存空間集區,讓 Google Kubernetes Engine (GKE) 叢集共用磁碟的儲存空間容量、輸送量和 IOPS。

總覽

儲存空間集區會以邏輯方式將實體儲存裝置分組,方便您區隔資源。您可以在這些儲存空間集區中佈建 Google Cloud Hyperdisk,基本上就是建立 Hyperdisk 儲存空間集區。Hyperdisk 儲存空間集區提供預先佈建的容量、處理量和 IOPS,可供 GKE 叢集磁碟共用。

您可以透過 Hyperdisk 儲存空間集區,以更有效率且符合成本效益的方式管理儲存空間資源。這可讓您運用重複資料刪除和精簡佈建等效率技術。

在本指南中,您會使用 us-east4-c 可用區建立 Hyperdisk Balanced 儲存空間集區和其他資源。

規劃注意事項

在佈建及使用 Hyperdisk 儲存空間集區前,請先考量下列規定和限制。

建立及管理儲存空間集區

請務必遵守下列規定和限制:

在儲存空間集區中佈建開機磁碟

請務必遵守下列規定和限制:

在儲存空間集區中佈建附加磁碟

請務必遵守下列規定和限制:

  • 如要在儲存集區中佈建連結的磁碟,最低 GKE 版本須為 1.29.2-gke.1035000 以上。
  • 確認已啟用 Compute Engine 永久磁碟 CSI 驅動程式。根據預設,新的 Autopilot 和 Standard 叢集會啟用 Compute Engine Persistent Disk 驅動程式,且無法在 Autopilot 叢集中停用或編輯。如要啟用驅動程式,請參閱「在現有叢集上啟用 Compute Engine Persistent Disk CSI 驅動程式」。
  • 確認儲存集區位於叢集和節點集區的至少一個節點位置。
  • 您只能在儲存空間集區中佈建 Hyperdisk Throughput 和 Hyperdisk Balanced 附加磁碟。附加磁碟的類型必須與儲存空間集區的類型相符。詳情請參閱「Hyperdisk 儲存空間集區類型」。
  • 在 StorageClass 中,每個可用區只能有 1 個儲存空間集區。
  • 在 StorageClass 中,所有儲存空間集區都必須具備儲存空間集區類型。
  • 請確認執行 Pod 的機器類型支援從儲存集區附加您使用的磁碟類型。詳情請參閱「Hyperdisk 機器類型支援」。

配額

建立 Hyperdisk 儲存空間集區時,您可以為容量和效能設定標準或進階佈建。如要提高容量、總處理量或 IOPS 的配額,請為相關配額篩選器申請更多配額。

詳情請參閱「查看專案配額」和「要求調整配額」。

針對 Hyperdisk Balanced 儲存空間集區,請使用下列配額篩選器:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region:使用進階容量佈建功能增加容量。
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region:使用進階效能佈建功能增加 IOPS。
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region:透過進階效能佈建功能提高輸送量。
  • HDB-TOTAL-GB-per-project-region:使用標準容量佈建增加容量。
  • HDB-TOTAL-IOPS-per-project-region:使用標準效能佈建來增加 IOPS。
  • HDB-TOTAL-THROUGHPUT-per-project-region:使用標準效能佈建來提高輸送量。

Hyperdisk Throughput 儲存空間集區的配額篩選器如下:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region:使用進階容量佈建功能增加容量。
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region:透過進階效能佈建功能提高輸送量。
  • HDT-TOTAL-GB-per-project-region:使用標準容量佈建增加容量。
  • HDT-TOTAL-THROUGHPUT-per-project-region:使用標準效能佈建來提高輸送量。

舉例來說,如要提高每個專案和每個區域的 Hyperdisk Balanced 儲存空間集區總容量,並使用進階容量佈建功能,請為下列篩選器要求提高配額:

hdb-storage-pool-total-advanced-capacity-per-project-region

定價

如需定價詳細資料,請參閱 Hyperdisk 儲存空間集區定價

事前準備

開始之前,請確認你已完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update,取得最新版本。

建立 Hyperdisk 儲存空間集區

在該儲存空間集區中佈建開機磁碟或附加磁碟前,請先建立 Hyperdisk 儲存空間集區。詳情請參閱「建立 Hyperdisk 儲存空間集區」。

請務必在支援的可用區中建立儲存空間集區。

舉例來說,使用下列指令在 us-east4-c 區域中建立具備進階容量和進階效能的 Hyperdisk Balanced 儲存空間集區,並佈建 10 TB 容量、10000 IOPS/秒和 1024 MBps 處理量:

export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
    --provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
    --zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
    --performance-provisioning-type=advanced --provisioned-iops=10000 \
    --provisioned-throughput=1024

PROJECT_ID 替換為您的 Google Cloud 帳戶專案 ID。

檢查儲存空間集區區域

  • 如果是 Autopilot 叢集,以及啟用節點自動佈建功能的標準叢集,您可以在叢集所在區域的任何可用區中建立儲存空間集區。如果您在建立儲存空間集區的可用區中沒有任何節點集區,Pod 會維持在 Pending 狀態,直到 GKE 叢集自動調度器在該可用區中佈建新的節點集區為止。

  • 如果 Standard 叢集未啟用節點自動佈建功能,請在叢集的預設節點區域中建立儲存空間集區,因為儲存空間集區是區域資源。您可以使用 --node-locations 旗標設定叢集的節點區域。

    • 如果是區域叢集,如果您未指定 --node-locations,系統會在叢集的主要區域中建立所有節點。
    • 如果是區域叢集,如果沒有指定 --node-locations,GKE 會在區域內隨機選擇三個區域,並在其中分配工作站節點。

如要檢查叢集的預設節點區域,請執行下列指令:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

CLUSTER_NAME 換成您在佈建開機磁碟或附加磁碟時建立的叢集名稱。

在 Hyperdisk 儲存空間集區中佈建 GKE 開機磁碟

執行下列任一操作時,您可以在 Hyperdisk 儲存空間集區中佈建 GKE 開機磁碟:

  • 建立新的 GKE 叢集時
  • 建立新的節點集區時
  • 更新現有節點集區時

建立叢集時

如要建立 GKE 叢集,並在儲存集區中佈建開機磁碟,請使用下列指令:

gcloud container clusters create CLUSTER_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • CLUSTER_NAME:為要建立的叢集提供專屬名稱。
  • DISK_TYPE:設為 hyperdisk-balanced. 如果留空,磁碟類型預設為 Hyperdisk Balanced。
  • STORAGE_POOL,[...]:以半形逗號分隔的儲存集區資源路徑清單 (例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c),叢集的開機磁碟將在此佈建。請確認儲存集區資源路徑中的可用區與 --node-locations 中的可用區相符。
  • ZONE,[...]:以逗號分隔的區域清單,當中列出應複製節點足跡的區域。如果是區域叢集,則可以改為指定區域。所有可用區都必須與叢集位於相同區域,並由 --location 旗標指定。
  • MACHINE_TYPE:要用於節點的支援機器類型。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。

建立節點集區時

如要建立 GKE 節點集區,並在儲存集區中佈建開機磁碟,請使用下列指令:

gcloud container node-pools create NODE_POOL_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME

取代下列項目:

  • NODE_POOL_NAME:為要建立的節點集區提供不重複的名稱。
  • DISK_TYPE:設為 hyperdisk-balanced. 如果留空,磁碟類型預設為 Hyperdisk Balanced。
  • STORAGE_POOL,[...]:以半形逗號分隔的儲存集區資源路徑清單 (例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c),叢集的開機磁碟將在此佈建。確認儲存集區資源路徑中的區域與 --node-locations 中的值相符。
  • ZONE,[...]:以逗號分隔的區域清單,當中列出應複製節點足跡的區域。所有可用區都必須與叢集位於同一個區域,並由 -location 旗標指定。
  • MACHINE_TYPE:要用於節點的支援機器類型。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • CLUSTER_NAME:您要在其中建立節點集區的現有叢集。

更新節點集區時

您可以使用 update 指令,在節點集區中新增或取代儲存空間集區。這個指令無法用來從節點集區移除儲存空間集區。

如要更新 GKE 節點集區,讓啟動磁碟在儲存集區中佈建,請使用下列指令。

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
  • NODE_POOL_NAME:要更新為使用儲存空間集區的現有節點集區名稱。
  • STORAGE_POOL,[...]:現有儲存空間集區資源路徑的半形逗號分隔清單 (例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c)。請確認儲存空間集區資源路徑中的可用區,與您要更新的節點集區可用區相符。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • CLUSTER_NAME:這個節點集區所屬的 GKE 叢集名稱。

這項變更需要重新建立節點,可能會導致執行中的工作負載中斷。如要瞭解這項特定變更的詳細資訊,請在「手動變更,使用節點升級策略重建節點,但不遵守維護政策」表格中,找到對應的資料列。如要進一步瞭解節點更新,請參閱「規劃節點更新中斷」。

在 Hyperdisk 儲存空間集區中佈建 GKE 附加磁碟

本節將說明:

  • 建立新的 GKE 叢集,並在儲存空間集區中佈建附加磁碟。
  • 建立 StorageClass,在 Pod 透過 PersistentVolumeClaim (PVC) 要求時,動態佈建 PersistentVolume (PV)。如要讓 PV 使用儲存空間集區的共用資源,請在 StorageClass 中使用 storage-pools 參數指定儲存空間集區。然後,PVC 會使用 StorageClass 佈建 Pod 將使用的 Hyperdisk Balanced 磁碟區。
  • 建立 PVC,為 GKE 叢集中的 Pod 要求 PV (一塊 Hyperdisk 儲存空間)。這樣一來,您就能享有儲存空間集區的共用資源。
  • 建立 Deployment,使用 PVC 確保應用程式在 Pod 重新啟動和重新排程後,仍可存取永久儲存空間。

建立 GKE 叢集

開始之前,請先詳閱佈建附加磁碟的注意事項

Autopilot

如要使用 gcloud CLI 建立 Autopilot 叢集,請參閱「建立 Autopilot 叢集」。

範例:

gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • CLUSTER_NAME:為要建立的叢集提供不重複的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 區域

如要選取支援的機器類型,請在建立 Deployment 時指定 cloud.google.com/compute-class: Performance nodeSelector。如需 Performance 計算類別適用的 Compute Engine 機器系列清單,請參閱「支援的機器系列」。

標準

如要使用 gcloud CLI 建立 Standard 可用區叢集,請參閱「建立可用區叢集」。

如要使用 gcloud CLI 建立 Standard 區域叢集,請參閱「建立區域叢集」。

範例:

gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

更改下列內容:

  • CLUSTER_NAME:為要建立的叢集提供不重複的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供地區,或為區域叢集提供區域。
  • PROJECT_ID:您的 Google Cloud 帳戶專案 ID。
  • MACHINE_TYPE:要用於節點的支援機器類型。
  • DISK_TYPE:設為 hyperdisk-balanced. 如果留空,磁碟類型預設為 Hyperdisk Balanced。

建立 StorageClass

在 Kubernetes 中,如要指出您希望在儲存空間集區內建立 PV,請使用 StorageClass。詳情請參閱「StorageClasses」。

如要建立具有所需輸送量或 IOPS 層級的新 StorageClass,請按照下列步驟操作:

  • 在供應商欄位中使用 pd.csi.storage.gke.io
  • 指定 Hyperdisk Balanced 儲存空間類型。
  • 請指定 storage-pools 參數,並將值設為要使用的特定儲存集區清單。清單中的每個儲存集區都必須以以下格式指定: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • (選用) 指定效能參數 provisioned-throughput-on-createprovisioned-iops-on-create.

每種 Hyperdisk 類型都有預設值,效能取決於初始磁碟大小。建立 StorageClass 時,您可以視 Hyperdisk 類型選擇指定下列參數。如果省略這些參數,GKE 會使用以容量為準的磁碟類型預設值。

參數 Hyperdisk 類型 用量
provisioned-throughput-on-create Hyperdisk Balanced、Hyperdisk Throughput 使用「Mi」限定符以 MiB/秒為單位表示處理量值。舉例來說,如果所需處理量為 250 MiB/秒,請在建立 StorageClass 時指定 "250Mi"
provisioned-iops-on-create Hyperdisk Balanced、Hyperdisk IOPS IOPS 值應不含任何限定符,舉例來說,如果您需要 7,000 IOPS,請在建立 StorageClass 時指定 "7000"

如需處理量或 IOPS 允許值的相關指引,請參閱「規劃 Hyperdisk 磁碟區的效能等級」。

使用下列資訊清單建立並套用名為 storage-pools-sc 的 StorageClass,以便在儲存空間集區 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c 中動態佈建 PV:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: hyperdisk-balanced
  provisioned-throughput-on-create: "140Mi"
  provisioned-iops-on-create: "3000"
  storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF

透過這個 StorageClass 中的 volumeBindingMode: WaitForFirstConsumer,系統會延遲 PVC 的繫結和佈建作業,直到建立使用 PVC 的 Pod 為止。這個方法可確保 PV 不會過早佈建,且 PV 與使用該 PV 的 Pod 之間有區域相符。如果區域不符,Pod 會維持 Pending 狀態。

建立 PersistentVolumeClaim (PVC)

建立參照您建立的 storage-pools-sc StorageClass 的 PVC。

使用下列資訊清單建立名為 my-pvc 的 PVC,並將 Hyperdisk Balanced 磁碟區的目標儲存空間容量設為 2048 GiB:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-pools-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2048Gi
EOF

建立使用 PVC 的 Deployment

最佳做法

使用 Pod 搭配 PersistentVolumes 時,請使用工作負載控制器,例如 DeploymentStatefulSet

如要確保 Pod 可以排定在支援 Hyperdisk Balanced 的機器系列節點集區上,請使用cloud.google.com/machine-family節點選取器設定 Deployment。詳情請參閱支援 Hyperdisk 的機器類型。您會在下列範例 Deployment 中使用 c3 機型系列。

建立並套用下列資訊清單,設定 Pod 以部署 Postgres 網頁伺服器,並使用上節建立的 PVC:

Autopilot

在 Autopilot 叢集上,指定 cloud.google.com/compute-class: PerformancenodeSelector 即可佈建 Hyperdisk Balanced 磁碟區。詳情請參閱「為 Pod 要求專屬節點」。

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
        cloud.google.com/compute-class: Performance
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

標準

在未啟用節點自動佈建功能的 Standard 叢集上,請先確認指定機器系列的節點集區已啟動並執行,再建立 Deployment。否則 Pod 無法排程。

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

確認 Deployment 是否已成功建立:

  kubectl get deployment

Hyperdisk 執行個體可能需要幾分鐘才能完成佈建,並顯示 READY 狀態。

確認附加的磁碟是否已佈建

  1. 檢查名為 my-pvc 的 PVC 是否已成功繫結至 PV:

    kubectl get pvc my-pvc
    

    輸出結果會與下列內容相似:

    
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            storage-pools-sc   2m24s
    
  2. 檢查磁碟區是否已按照 StorageClass 和 PVC 中的指定方式佈建:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    輸出結果會與下列內容相似:

    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    

建立儲存集區中附加磁碟的快照並還原

不允許在儲存空間集區中移動磁碟。如要將磁碟移進或移出儲存集區,請透過快照重新建立磁碟。詳情請參閱「變更磁碟類型」。

本節將說明:

建立測試檔案

如要建立及驗證測試檔案,請按照下列步驟操作:

  1. 取得 Postgres Deployment 的 Pod 名稱:

    kubectl get pods -l app=postgres
    

    輸出結果會與下列內容相似:

    NAME                         READY   STATUS    RESTARTS   AGE
    postgres-78fc84c9ff-77vx6   1/1     Running   0          44s
    
  2. 在 Pod 中建立測試檔案 hello.txt

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. 確認測試檔案已建立:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

建立磁碟區快照並刪除測試檔案

如何建立及驗證快照:

  1. 建立 VolumeSnapshotClass,指定磁碟區快照的擷取和管理方式:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: my-snapshotclass
    driver: pd.csi.storage.gke.io
    deletionPolicy: Delete
    EOF
    
  2. 建立 VolumeSnapshot,並從繫結至 my-pvc PersistentVolumeClaim 的磁碟區建立快照:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: my-snapshot
    spec:
      volumeSnapshotClassName: my-snapshotclass
      source:
        persistentVolumeClaimName: my-pvc
    EOF
    
  3. 確認已建立磁碟區快照內容:

    kubectl get volumesnapshotcontents
    

    輸出結果會與下列內容相似:

    NAME                                               READYTOUSE   RESTORESIZE     DELETIONPOLICY   DRIVER                  VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT   VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da   false        2199023255552   Delete           pd.csi.storage.gke.io   my-snapshotclass      my-snapshot      default                   33s
    
  4. 確認快照已可使用:

    kubectl get volumesnapshot \
      -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    輸出結果會與下列內容相似:

    NAME          READY
    my-snapshot   true
    
  5. 刪除在 Pod postgres-78fc84c9ff-77vx6 中建立的原始測試檔案 hello.txt

    kubectl exec postgres-78fc84c9ff-77vx6 \
        -- sh -c 'rm /usr/share/data/hello.txt'
    

還原磁碟區快照

如要還原磁碟區快照和資料,請按照下列步驟操作:

  1. 建立新的 PVC,從快照還原資料,並確保新磁碟區佈建在與原始磁碟區相同的儲存空間集區 (storage-pools-sc) 中。套用下列資訊清單:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-restore
    spec:
      dataSource:
        name: my-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: storage-pools-sc
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2048Gi
    EOF
    
  2. 更新名為 postgres 的現有 Deployment,使其使用您剛建立的新還原 PVC。套用下列資訊清單:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgres
    spec:
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          nodeSelector:
            cloud.google.com/machine-family: c3
          containers:
          - name: postgres
            image: google/cloud-sdk:slim
            args: [ "sleep", "3600" ]
            volumeMounts:
            - name: sdk-volume
              mountPath: /usr/share/data/
          volumes:
          - name: sdk-volume
            persistentVolumeClaim:
              claimName: pvc-restore
    EOF
    
  3. 取得屬於 postgres Deployment 的新建立 Pod 名稱:

    kubectl get pods -l app=postgres
    

    輸出結果會與下列內容相似:

    NAME                         READY   STATUS        RESTARTS   AGE
    postgres-59f89cfd8c-42qtj   1/1     Running       0          40s
    
  4. 從快照還原磁碟區後,確認先前刪除的 hello.txt 檔案現在是否位於新 Pod (postgres-59f89cfd8c-42qtj):

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    這會驗證快照和還原程序是否已順利完成,以及快照中的資料是否已還原至 Pod 可存取的新 PV。

  5. 確認從快照建立的磁碟區位於儲存空間集區中:

    kubectl get pvc pvc-restore
    

    輸出結果會與下列內容相似:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    pvc-restore   Bound    pvc-b287c387-bc51-4100-a00e-b5241d411c82   2Ti        RWO            storage-pools-sc   2m24s
    
  6. 檢查新磁碟區是否已按照 StorageClass 和 PVC 中的指定項目佈建:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    輸出內容會與以下所示內容類似,您可以在同一個儲存空間集區中看到新佈建的磁碟區。pvc-b287c387-bc51-4100-a00e-b5241d411c82

    
    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    pvc-b287c387-bc51-4100-a00e-b5241d411c82  READY   3000              140                     2048
    

    這樣可確保還原的磁碟區能享有集區的共用資源和功能。

將現有磁碟區遷移至儲存空間集區

使用快照和還原功能,將儲存空間集區外部的磁碟區遷移至儲存空間集區。

請確認符合下列條件:

  • 新的 PVC pvc-restore 參照指定 storage-pools 參數的 StorageClass,指向要將磁碟區移入的儲存空間集區。
  • 要建立快照的來源 PV 應與 PVC 相關聯,且 PVC 具有未指定 storage-pools 參數的 StorageClass。

將快照還原到新磁碟區後,即可刪除來源 PVC 和 PV。

清除所用資源

如要避免系統向您的 Google Cloud 帳戶收取費用,請刪除您在本指南中建立的儲存空間資源。請先刪除儲存空間集區中的所有磁碟,然後再刪除儲存空間集區。

刪除開機磁碟

刪除節點 (縮減節點集區) 或整個節點集區時,系統會自動刪除相關聯的開機磁碟。您也可以刪除叢集,系統會自動刪除其中所有節點集區的開機磁碟。

如需詳細資訊,請參閱:

刪除附加磁碟

如要刪除在 Hyperdisk 儲存空間集區中佈建的附加磁碟,請按照下列步驟操作:

  1. 刪除使用 PVC 的 Pod:

    kubectl delete deployments postgres
    
  2. 刪除使用 Hyperdisk 儲存空間集區 StorageClass 的 PVC。

    kubectl delete pvc my-pvc
    

    確認 PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 已刪除:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

刪除 Hyperdisk 儲存空間集區

使用下列指令刪除 Hyperdisk 儲存空間集區:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

後續步驟