本頁說明如何使用 GKE Hyperdisk 儲存空間集區,讓 Google Kubernetes Engine (GKE) 叢集共用磁碟的儲存空間容量、輸送量和 IOPS。
總覽
儲存空間集區會以邏輯方式將實體儲存裝置分組,方便您區隔資源。您可以在這些儲存空間集區中佈建 Google Cloud Hyperdisk,基本上就是建立 Hyperdisk 儲存空間集區。Hyperdisk 儲存空間集區提供預先佈建的容量、處理量和 IOPS,可供 GKE 叢集磁碟共用。
您可以透過 Hyperdisk 儲存空間集區,以更有效率且符合成本效益的方式管理儲存空間資源。這可讓您運用重複資料刪除和精簡佈建等效率技術。
在本指南中,您會使用 us-east4-c
可用區建立 Hyperdisk Balanced 儲存空間集區和其他資源。
規劃注意事項
在佈建及使用 Hyperdisk 儲存空間集區前,請先考量下列規定和限制。
建立及管理儲存空間集區
請務必遵守下列規定和限制:
- 適用於 Compute Engine Hyperdisk 儲存空間集區的所有限制。
- 適用於在 Hyperdisk 儲存空間集區中建立磁碟的所有限制。
- 您建立的 Hyperdisk 儲存空間集區類型,決定了您可以在儲存空間集區中建立的磁碟類型。請參閱「Hyperdisk 儲存空間集區類型」。
在儲存空間集區中佈建開機磁碟
請務必遵守下列規定和限制:
- 啟用節點自動佈建功能的節點集區,不支援在儲存空間集區中佈建開機磁碟。
- 請確保叢集的節點位置和節點集區的節點位置與儲存集區的可用區完全相符。
- 確認執行 Pod 的機器類型支援連結 Hyperdisk Balanced 磁碟類型。Hyperdisk Throughput 不支援做為開機磁碟。 請參閱 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 Balanced 儲存空間集區。
建立 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-create
和provisioned-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 時,請使用工作負載控制器,例如 Deployment 或 StatefulSet。
如要確保 Pod 可以排定在支援 Hyperdisk Balanced 的機器系列節點集區上,請使用cloud.google.com/machine-family
節點選取器設定 Deployment。詳情請參閱支援 Hyperdisk 的機器類型。您會在下列範例 Deployment 中使用 c3
機型系列。
建立並套用下列資訊清單,設定 Pod 以部署 Postgres 網頁伺服器,並使用上節建立的 PVC:
Autopilot
在 Autopilot 叢集上,指定 cloud.google.com/compute-class: Performance
nodeSelector 即可佈建 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
狀態。
確認附加的磁碟是否已佈建
檢查名為
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
檢查磁碟區是否已按照 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
建立儲存集區中附加磁碟的快照並還原
不允許在儲存空間集區中移動磁碟。如要將磁碟移進或移出儲存集區,請透過快照重新建立磁碟。詳情請參閱「變更磁碟類型」。
本節將說明:
建立測試檔案
如要建立及驗證測試檔案,請按照下列步驟操作:
取得 Postgres Deployment 的 Pod 名稱:
kubectl get pods -l app=postgres
輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
在 Pod 中建立測試檔案
hello.txt
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
確認測試檔案已建立:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
建立磁碟區快照並刪除測試檔案
如何建立及驗證快照:
建立 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
建立 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
確認已建立磁碟區快照內容:
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
確認快照已可使用:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
輸出結果會與下列內容相似:
NAME READY my-snapshot true
刪除在 Pod
postgres-78fc84c9ff-77vx6
中建立的原始測試檔案hello.txt
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
還原磁碟區快照
如要還原磁碟區快照和資料,請按照下列步驟操作:
建立新的 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
更新名為
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
取得屬於
postgres
Deployment 的新建立 Pod 名稱:kubectl get pods -l app=postgres
輸出結果會與下列內容相似:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
從快照還原磁碟區後,確認先前刪除的
hello.txt
檔案現在是否位於新 Pod (postgres-59f89cfd8c-42qtj
):kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
這會驗證快照和還原程序是否已順利完成,以及快照中的資料是否已還原至 Pod 可存取的新 PV。
確認從快照建立的磁碟區位於儲存空間集區中:
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
檢查新磁碟區是否已按照 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 儲存空間集區中佈建的附加磁碟,請按照下列步驟操作:
刪除使用 PVC 的 Pod:
kubectl delete deployments postgres
刪除使用 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
後續步驟
- 請參閱「排解 GKE 中的儲存空間問題」。
- 如要進一步瞭解 Persistent Disk CSI 驅動程式,請前往 GitHub。