透過 Hyperdisk 儲存空間集區,獲得最佳儲存空間效能與成本效益

本文說明如何使用 Hyperdisk 儲存空間集區,在 GKE 中提升 Google Kubernetes Engine (GKE) 儲存空間效能並降低成本。

對於 GKE 叢集中的具狀態工作負載,請使用 GKE Hyperdisk 儲存空間集區,盡可能提升儲存空間效能並降低成本。透過這些集區,您可以在多個 Hyperdisk 磁碟區之間,有效共用儲存空間容量、處理量和 IOPS。Hyperdisk 支援功能取決於節點的機器類型。詳情請參閱「支援 Hyperdisk 的機器系列」。

本文件適用於部署 GKE 有狀態工作負載的儲存空間專家。如要進一步瞭解我們在內容 中 Google Cloud 提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和 工作」。

總覽

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

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

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

規畫考量

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

建立及管理儲存空間集區

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

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

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

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

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

  • 如要在儲存集區中佈建附加磁碟,最低 GKE 版本須為 1.29.2-gke.1035000 以上。
  • 確認已啟用 Compute Engine Persistent Disk 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 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。

建立 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。如需可搭配高效能運算類別使用的 Compute Engine 機器系列清單,請參閱「支援的機器系列」。

標準

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

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

範例:

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

標準

在未啟用節點自動佈建功能的標準叢集上,請先確認指定機器系列的節點集區已啟動並執行,再建立 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

後續步驟