使用 Block Storage for VPC 叢集附加程式來設定 Snapshot
虛擬私有雲
Block Storage for VPC 卷快照提供了一種標準化的方式,讓您能在特定時間點複製卷的內容,而無需創建全新的卷。 如需有關快照的詳細資訊,請參閱 快照如何運作。 如需 Block Storage for VPC 的相關資訊,請參閱關於 Block Storage for VPC。
根據預設,Block Storage for VPC 群集附加元件會在部署群集的相同 VPC 資源群組中建立磁碟區和快照。 但是,從附加元件版本 5.2.46 及更新版本開始,您可以在 VolumeSnapshotClass 中指定 resourceGroup 參數,在不同的資源群組中建立快照。 如需詳細資訊,請參閱 在不同資源群組中建立快照。
建立應用程式
建立持續性磁區要求 (PVC) 範例,並部署參照該要求的 Pod。
-
驗證附加程式狀態為
normal,且狀態為Ready。ibmcloud oc cluster addon ls --cluster CLUSTER-IDName Version Health State Health Status vpc-block-csi-driver 5.2 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) -
驗證已部署驅動程式 Pod,且狀態為
Running。oc get pods -n kube-system | grep vpc-block-csi輸出範例
ibm-vpc-block-csi-controller-0 7/7 Running 0 77s ibm-vpc-block-csi-node-56c85 4/4 Running 0 77s ibm-vpc-block-csi-node-87j2t 4/4 Running 0 77s ibm-vpc-block-csi-node-cmh2h 4/4 Running 0 77s -
建立 PVC。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ibmc-vpc-block-5iops-tieroc create -f pvc.yaml -
驗證 PVC 已建立且處於
Bound狀態。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE csi-block-pvc Bound pvc-0798b499-0b61-4f57-a184-4caeb7b9298d 10Gi RWO ibmc-vpc-block-5iops-tier 4m22s -
為裝載您所建立之 PVC 的部署建立 YAML 配置檔。
apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: replicas: 1 selector: matchLabels: app: my-deployment template: metadata: labels: app: my-deployment spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for PVC name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: csi-block-pvc # The name of the PVC you created earlieroc create -f pod.yaml -
驗證 Pod 是否在群集中執行。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
既然您已建立 Pod,請登入該 Pod,並建立要用於 Snapshot 的文字檔。
oc exec -it POD_NAME /bin/bash輸出範例
root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/ root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
建立磁區 Snapshot
建立部署和 PVC 之後,您可以建立磁區 Snapshot 資源。
只有當磁碟區連接到 pod 時,才能建立快照。
-
確保您在 IAM 中擁有 Share Snapshot Operator(共用快照操作員) 權限。
-
使用啟用附加程式時所部署的
ibmc-vpcblock-snapshotSnapshot 類別,在叢集裡建立磁區 Snapshot 資源。 將下列VolumeSnapshot設定儲存至名為snapvol.yaml的檔案。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-csi-block-pvc spec: volumeSnapshotClassName: ibmc-vpcblock-snapshot source: persistentVolumeClaimName: csi-block-pvcoc create -f snapvol.yaml -
驗證 Snapshot 已備妥可供使用。
oc get volumesnapshotsREADYTOUSE為true的輸出範例:NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE snapshot-csi-block-pvc true csi-block-pvc 1Gi ibmc-vpcblock-snapshot snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b 18h 18h
在不同的資源群組中建立快照
從 Block Storage for VPC 群集附加元件版本 5.2.46 及更新版本開始,您可以在與群集資源群組不同的資源群組中建立磁碟區快照。 此功能可在資源組織、配額管理和存取控制方面提供更大的靈活性。
- 版本需求:此功能僅在附加元件 5.2.46 及更新版本中支援。
- 預設行為:如果未指定
resourceGroup參數或指定空字串,則會在群集的資源群組中建立快照。
必要條件
開始之前,請確認您在 IAM 中擁有下列權限:
- VPC 基礎設施服務(是):編輯與作家
- Kubernetes Service (container-kubernetes):操作員
- 資源群組:要建立快照的每個資源群組的檢視器
建立自訂 VolumeSnapshotClass
若要在不同的資源群組中建立快照,您必須建立指定目標資源群組 ID 的自訂 VolumeSnapshotClass。
-
取得要建立快照的資源群組 ID。
ibmcloud resource groups -
建立
VolumeSnapshotClass配置檔案。 將下列 YAML 儲存到名為vpc-snap-custom-rg.yaml的檔案中。 將<RESOURCE_GROUP_ID>改為您的目標資源群組 ID。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: vpc-snap-custom-rg driver: vpc.block.csi.ibm.io deletionPolicy: Delete parameters: resourceGroup: <RESOURCE_GROUP_ID>resourceGroup參數必須是資源群組 ID,而不是資源群組名稱。 -
在群集中建立
VolumeSnapshotClass。oc create -f vpc-snap-custom-rg.yaml -
確認
VolumeSnapshotClass已建立。oc get volumesnapshotclass
使用自訂資源群組建立快照
建立自訂 VolumeSnapshotClass 之後,您可以建立引用它的快照。
-
建立
VolumeSnapshot配置檔案,引用您的自訂快照類別。 將下列 YAML 儲存到名為snapshot-custom-rg.yaml的檔案中。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-custom-rg spec: volumeSnapshotClassName: vpc-snap-custom-rg source: persistentVolumeClaimName: csi-block-pvc -
建立快照。
oc create -f snapshot-custom-rg.yaml -
驗證 Snapshot 已備妥可供使用。
oc get volumesnapshots -
使用 IBM Cloud CLI 驗證是否已在目標資源群組中建立快照。
ibmcloud target -g <RESOURCE_GROUP_NAME> ibmcloud is snapshots
從磁區 Snapshot 還原
部署 Snapshot 資源之後,您可以使用 Snapshot 將資料還原至新磁區。 建立 PVC 會動態佈建具有 Snapshot 資料的新磁區。
-
建立參照磁區 Snapshot 的第二個 PVC。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-pvc spec: storageClassName: ibmc-vpc-block-5iops-tier dataSource: name: snapshot-csi-block-pvc kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteOnce resources: requests: storage: 10Gi -
驗證 PVC 已建立且處於
Bound狀態。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE restore-pvc Bound pvc-4ede7630-5a49-4bae-b34d-dc528acfb884 10Gi RWO ibmc-vpc-block-5iops-tier 18h -
為裝載您所建立 PVC 的部署建立第二個 YAML 配置檔。
apiVersion: apps/v1 kind: Deployment metadata: name: podtwo labels: app: podtwo spec: replicas: 1 selector: matchLabels: app: podtwo template: metadata: labels: app: podtwo spec: containers: - image: nginx # Your containerized app image name: container-name volumeMounts: - mountPath: /myvolumepath # Mount path for pvc from container name: my-vol # Volume mount name volumes: - name: my-vol # Volume resource name persistentVolumeClaim: claimName: restore-pvc # The name of the PVC that you created earlieroc create -f podtwo.yaml -
驗證已建立 Pod。
oc get podsNAME READY STATUS RESTARTS AGE POD_NAME 1/1 Running 0 30m POD2_NAME 1/1 Running 0 46h -
登入新建立的 Pod,並驗證您先前建立的範例文字檔已儲存至新的 Pod。
oc exec -it POD_NAME /bin/bash root@POD_NAME :/# cd myvolumepath/ root@POD_NAME :/myvolumepath# ls lost+found new.txt root@POD_NAME :/myvolumepath# cat new.txt輸出範例
hi
關閉 Snapshot
依預設,當使用 Block Storage for VPC時,會啟用 Snapshot 功能。 透過將 IsSnapshotEnabled 變更為 false,可以在 kube-system 名稱空間中的 configmap addon-vpc-block-csi-driver-configmap 中關閉此功能。 請注意,在 configmap 中進行這項變更之後,任何建立的
Snapshot 都會失敗,並出現下列訊息:CreateSnapshot functionality is disabled。
-
將現行 configmap 從叢集儲存至本端機器。
oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml -
將
IsSnapshotEnabled參數編輯為false。 -
儲存檔案並應用您的變更。
oc apply -f snapshotconfigmap.yaml
下一步
部署 Snapshot 驗證 Webhook 以驗證使用者輸入。 如需相關資訊,請參閱 部署 Snapshot 驗證 Webhook。
疑難排解 Snapshot
檢視下列疑難排解主題。