スナップショットの設定 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)を作成し、そのクレームを参照するポッドをデプロイします。

  1. アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  2. アドオンの状態が であり normal 、ステータスが であることを確認してください Ready

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                    Version                     Health State   Health Status   
    vpc-file-csi-driver     2.0                         normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
    
  3. ドライバー・ポッドがデプロイされ、状況が 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
    
  4. PVCを作成する。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-file-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-file-min-iops
    
    oc create -f pvc.yaml
    
  5. PVCが作成され、状態 Bound にあることを確認してください。

    oc get pvc
    
    NAME           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
    
  6. 作成した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 earlier
    
    
    oc create -f pod.yaml
    
  7. クラスタ内でポッドが動作していることを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  8. ポッドを作成したら、そのポッドにログインし、スナップショット用にテキストファイルを作成してください。

    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を作成した後、ボリュームスナップショットを作成できます。

  1. シェア・スナップショット・オペレーター IAMのパーミッション

  2. アドオンを有効化した際にデプロイされるスナップショット 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-pvc
    
    oc create -f snapvol.yaml
    
  3. スナップショットが使用可能な状態であることを確認してください。

    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の作成により、スナップショットデータを含む新しいボリュームが動的にプロビジョニングされます。

  1. ボリュームのスナップショットを参照する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
    
  2. PVCが作成され、状態 Bound にあることを確認してください。

    oc get pvc
    
    NAME           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
    
  3. 作成した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 earlier
    
    oc create -f restore-pod.yaml
    
  4. ポッドが作成されたことを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    restore-pod-1                      1/1     Running   0          30m
    pod-2                     1/1     Running   0          46h
    
  5. 新しく作成したポッドにログインし、以前に作成したサンプルテキストファイルが新しいポッドに保存されていることを確認してください。

    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
    

静的スナップショットの復元

静的スナップショットを復元するには、次の手順を完了してください。

  1. アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  2. スナップショット 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
    
  3. 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: default
    
    oc apply -f volsnapcontent.yaml
    

    出力例

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. 作成する 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
    
  5. 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: 10Gi
    
    oc 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 earlier
    
    oc create -f dep2.yaml
    
  6. クラスタ内でポッドが動作していることを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  7. 新しく作成したポッドにログインし、以前に作成したサンプルテキストファイルが新しいポッドに保存されていることを確認してください。

    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 してください:

  1. 現在のConfigMapをクラスターからローカルマシンに保存します。

    oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IS_SNAPSHOT_ENABLED パラメーターを false に編集する。

    IS_SNAPSHOT_ENABLED:false
    
  3. ファイルを保存し、変更を適用する。

    oc apply -f snapshotconfigmap.yaml