スナップショットの設定 File Storage for VPC
仮想プライベートクラウド
File Storage for VPC ボリュームスナップショットは、完全に新しいボリュームを作成することなく、特定の時点におけるボリュームの内容をコピーするための標準化された方法を提供します。 スナップショットは、ゾーンベースおよび地域ベース 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)を作成し、そのクレームを参照するポッドをデプロイします。
-
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
アドオンの状態が であり
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) -
ドライバー・ポッドがデプロイされ、状況が
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 -
作成した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-file-pvc # The name of the PVC you created earlieroc create -f pod.yaml -
クラスタ内でポッドが動作していることを確認します。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
ポッドを作成したら、そのポッドにログインし、スナップショット用にテキストファイルを作成してください。
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の作成により、スナップショットデータを含む新しいボリュームが動的にプロビジョニングされます。
-
ボリュームのスナップショットを参照する2つ目の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 -
作成したPVCをマウントするデプロイメント用の2つ目のYAML設定ファイルを作成します。
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 -
ポッドが作成されたことを確認します。
oc get podsNAME READY STATUS RESTARTS AGE restore-pod-1 1/1 Running 0 30m pod-2 1/1 Running 0 46h -
新しく作成したポッドにログインし、以前に作成したサンプルテキストファイルが新しいポッドに保存されていることを確認してください。
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 -
クラスタ内でポッドが動作していることを確認します。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
新しく作成したポッドにログインし、以前に作成したサンプルテキストファイルが新しいポッドに保存されていることを確認してください。
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 になります。 この機能は、namespace kube-system``addon-vpc-file-csi-driver-configmap 内のconfigmapで `IsSnapshotEnabled` をに変更 falseすることで無効化できます。 このConfigMapの変更により、作成されるスナップショットはすべて以下のメッセージで失敗することに注意
CreateSnapshot functionality is disabled してください:
-
現在のConfigMapをクラスターからローカルマシンに保存します。
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