为...设置快照 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
创建卷快照
创建部署和持久化卷控制项后,即可创建卷快照。
-
确保您有 共享快照操作员 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