設定快照 File Storage for VPC
虛擬私有雲
File Storage for VPC 卷快照提供了一種標準化的方式,讓您能在特定時間點複製卷的內容,而無需創建全新的卷。 快照功能同時支援基於區域(zonal( dp2 ))與區域性(rfs)的儲存類別。 有關快照的更多資訊,請參閱 《快照運作原理》。
如需 File Storage for VPC 的相關資訊,請參閱關於 File Storage for VPC。
此 File Storage for VPC 附加元件的快照功能目前處於測試階段。
若刪除 PVC(檔案共用),則所有由該檔案共用所擁有的對應快照皆會被刪除。 在此情況下,CSI 卷快照仍會保留,但 VPC 中的後端快照將不存在。 因此,您必須使用 oc delete vs <snapshot-name>. 來刪除卷。
必要條件
- 請確定您的群集已安裝 File Storage for VPC 附加元件。
- 確保您有 股票快照操作員 IAM 中的權限。
建立應用程式
建立一個範例的持久卷索取 (PVC),並部署一個引用該索取的 pod。
-
請確認附加元件狀態為
normal且狀態為Ready。ibmcloud oc cluster addon ls --cluster CLUSTER-IDName Version Health State Health Status vpc-file-csi-driver 2.0 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) -
請確認驅動程式 Pod 已部署且狀態為
Running。oc get pods -n kube-system | grep vpc-file-csi輸出範例
ibm-vpc-file-csi-controller-s34sw 7/7 Running 0 77s ibm-vpc-file-csi-controller-7hdhd 7/7 Running 0 77s ibm-vpc-file-csi-node-56c85 4/4 Running 0 77s ibm-vpc-file-csi-node-87j2t 4/4 Running 0 77s ibm-vpc-file-csi-node-cmh2h 4/4 Running 0 77s -
建立一個 PVC。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-file-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-min-iopsoc create -f pvc.yaml -
確認 PVC 已建立且處於
Bound狀態。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE csi-file-pvc Bound pvc-9873bd7e-41a8-4234-a9bf-271b8ca7e4f9 10Gi RWM ibmc-vpc-file-min-iops <unset> 5 -
建立一個 YAML 配置檔案,用於部署您所建立的持久化卷容器(PVC)。
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-file-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 並建立一個文字檔案,用於進行快照作業。
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
建立卷快照
建立部署與持久化卷掛載(PVC)後,即可建立卷快照。
-
確保您有 股票快照操作員 IAM 中的權限。
-
在您的叢集內建立卷快照,請使用啟用附加元件時部署的快照
ibmc-vpcfile-snapshot-delete類別。 將下列VolumeSnapshot設定儲存至名為snapvol.yaml的檔案。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-csi-file-pvc spec: volumeSnapshotClassName: ibmc-vpcfile-snapshot-delete source: persistentVolumeClaimName: csi-file-pvcoc create -f snapvol.yaml -
請確認快照已準備就緒,可供使用。
oc get volumesnapshots範例輸出,其中
READYTOUSE為true。NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE ibmc-vpcfile-snapshot-delete true csi-file-pvc 10Gi ibmc-vpcfile-snapshot-delete snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b 18h 18h
從卷快照還原
部署卷快照後,您可透過該快照將資料還原至新卷。 建立 PVC 會動態地為新卷分配快照資料。
-
建立第二個 PVC,使其參照您的卷快照。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-pvc spec: storageClassName: ibmc-vpc-file-min-iops dataSource: name: snapshot-csi-file-pvc kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteMany resources: requests: storage: 10Gi -
確認 PVC 已建立且處於
Bound狀態。oc get pvcNAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE csi-file-pvc Bound pvc-9873bd7e-41a8-4234-a9bf-271b8ca7e4f9 10Gi RWM ibmc-vpc-file-min-iops <unset> 9m16s restore-pvc Bound pvc-04dc8d6c-ac75-48b1-989d-ed67deb35911 10Gi RWM ibmc-vpc-file-min-iops <unset> 116s -
建立第二個 YAML 配置檔案,用於部署掛載您所建立的持久化卷(PVC)。
apiVersion: apps/v1 kind: Deployment metadata: name: restore-pod labels: app: restore-pod spec: replicas: 1 selector: matchLabels: app: restore-pod template: metadata: labels: app: restore-pod 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 restore-pod.yaml -
驗證已建立 Pod。
oc get podsNAME READY STATUS RESTARTS AGE restore-pod-1 1/1 Running 0 30m pod-2 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
還原靜態快照
請完成以下步驟以還原靜態快照。
-
取得快照CRN使用
ibmcloud is share-snapshot <share-id> <share-snapshot-id> | grep CRN輸出範例
CRN crn:v1:staging:public:is:us-south-3:a/77f2bceddaeb577dcaddb4073fe82c1c::share-snapshot:r134-1b3af00c-7a07-4ba7-b005-f6723c5b5e98/r134-164521b1-f5c1-4968-9605-a7aaa7e6cd2f -
建立
VolumeSnapshotContent資源。 將以下設定儲存為名為volsnapcontent.yaml. 的檔案。apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: static-file-snapshot-cnt spec: volumeSnapshotClassName: ibmc-vpcfile-snapshot-retain deletionPolicy: Retain driver: vpc.file.csi.ibm.io source: snapshotHandle: crn:v1:staging:public:is:us-south-3:a/77f2bceddaeb577dcaddb4073fe82c1c::share-snapshot:r134-1b3af00c-7a07-4ba7-b005-f6723c5b5e98/r134-164521b1-f5c1-4968-9605-a7aaa7e6cd2f # Enter the CRN of the snapshot you created earlier. For example crn:v1:public:is:us-south:a/8ee729d7f903db130b00257d91b6977f::snapshot:r134-64c3ad8e-786e-4f54-9b63-388615811ba6 volumeSnapshotRef: name: static-file-snapshot namespace: defaultoc apply -f volsnapcontent.yaml輸出範例
volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created -
建立一個 VolumeSnapshot。 將以下設定儲存為名為 volsnap.yaml. 的檔案。
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: static-file-snapshot namespace: default spec: volumeSnapshotClassName: ibmc-vpcfile-snapshot-retain source: volumeSnapshotContentName: static-file-snapshot-cnt # Enter the name of the VolumeSnapshotContent that you created in the previous step.oc apply -f volsnap.yaml -
建立一個 PVC。 將以下設定儲存為名為
pvc2.yaml. 的檔案。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restore-static-pvc spec: storageClassName: ibmc-vpc-file-min-iops dataSource: name: static-file-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io accessModes: - ReadWriteMany resources: requests: storage: 10Gioc apply -f pvc2.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: restore-static-pvc # The name of the PVC you created earlieroc create -f dep2.yaml -
確認 Pod 正在群集中執行。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
登入新建立的 Pod,並確認您先前建立的範例文字檔案已儲存至新 Pod 中。
root@my-deployment-static-768f64ffcf-h6qft:/# cd myvolumepath/ root@my-deployment-static-768f64ffcf-h6qft:/myvolumepath# ls new.txt root@my-deployment-static-768f64ffcf-h6qft:/myvolumepath# cat new.txt hi
關閉快照功能
預設情況下,使用. File Storage for VPC 時快照功能會啟用。 此功能可透過在命名 kube-system 空間的 addon-vpc-file-csi-driver-configmap 配置映射中將 IsSnapshotEnabled 改為 來 false 關閉。 請注意,此配置映射的變更將導致任何建立的快照失敗,並顯示以下訊息 CreateSnapshot functionality is disabled:
-
將叢集中的現行配置圖儲存至您的本地機器。
oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml -
編輯
IS_SNAPSHOT_ENABLED參數為false。IS_SNAPSHOT_ENABLED:false -
儲存檔案並應用您的變更。
oc apply -f snapshotconfigmap.yaml