Einrichten von Snapshots für File Storage for VPC

Virtuelle private Cloud

File Storage for VPC Volume-Snapshots bieten Ihnen eine standardisierte Möglichkeit, den Inhalt eines Volumes zu einem bestimmten Zeitpunkt zu kopieren, ohne ein völlig neues Volume zu erstellen. Snapshots werden sowohl für zonal( dp2 )- als auch für regional (rfs)-basierte Speicherklassen unterstützt. Weitere Informationen zu Snapshots finden Sie unter So funktionieren Snapshots.

Weitere Informationen zu File Storage for VPC finden Sie unter Informationen zu File Storage for VPC.

Die Unterstützung von Snapshots für das File Storage for VPC Add-on befindet sich derzeit in der Beta-Phase.

Wenn die PVC (Dateifreigabe) gelöscht wird, werden alle zugehörigen Snapshots, die sich im Besitz der Dateifreigabe befinden, gelöscht. In diesem Fall bleiben die CSI-Volume-Snapshots erhalten, aber die Backend-Snapshots in VPC existieren nicht mehr. Daher müssen Sie Volumes mit Hilfe von oc delete vs <snapshot-name> löschen.

Voraussetzungen

  • Vergewissern Sie sich, dass Sie das Add-on File Storage for VPC in Ihrem Cluster installiert haben.
  • Stellen Sie sicher, dass Sie Aktie Snapshot Operator berechtigungen in IAM haben.

App erstellen

Erstellen Sie ein Beispiel für einen Persistent Volume Claim (PVC) und stellen Sie einen Pod bereit, der auf diesen Claim verweist.

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Überprüfen Sie, ob der Add-on-Status und der Status normal ist 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. Überprüfen Sie, dass die Treiber-Pods bereitgestellt sind und ihr Status Running (aktiv) lautet.

    oc get pods -n kube-system | grep vpc-file-csi
    

    Beispielausgabe

    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. Erstellen Sie ein 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. Überprüfen Sie, ob das PVC erstellt wurde und sich in einem Bound Zustand befindet.

    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. Erstellen Sie eine YAML-Konfigurationsdatei für eine Bereitstellung, die die von Ihnen erstellte PVC einbindet.

    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. Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  8. Nachdem Sie den Pod erstellt haben, melden Sie sich beim Pod an und erstellen Sie eine Textdatei, die für den Snapshot verwendet werden soll.

    oc exec -it POD_NAME -- /bin/bash
    

    Beispielbefehle zum Erstellen einer neuen Textdatei.

    root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/
    root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt
    root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
    

Erstellen eines Volume-Snapshots

Nachdem Sie eine Bereitstellung und ein PVC erstellt haben, können Sie die Volume-Snapshots erstellen.

  1. Stellen Sie sicher, dass Sie Aktie Snapshot Operator berechtigungen in IAM haben.

  2. Erstellen Sie einen Volume-Snapshot in Ihrem Cluster, indem Sie die ibmc-vpcfile-snapshot-delete Snapshot-Klasse verwenden, die bereitgestellt wird, wenn Sie das Add-on aktivieren. Speichern Sie die folgende VolumeSnapshot Konfiguration in einer Datei namens 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. Überprüfen Sie, ob der Snapshot einsatzbereit ist.

    oc get volumesnapshots
    

    Beispielausgabe, wobei READYTOUSE ist 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
    

Wiederherstellung aus einem Volume-Snapshot

Nachdem Sie den Volume-Snapshot bereitgestellt haben, können Sie Daten mithilfe des Snapshots auf einem neuen Volume wiederherstellen. Durch das Erstellen eines PVC wird dynamisch ein neues Volume mit Snapshot-Daten bereitgestellt.

  1. Erstellen Sie ein zweites PVC, das auf Ihren Volume-Snapshot verweist.

    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. Überprüfen Sie, ob das PVC erstellt wurde und sich in einem Bound Zustand befindet.

    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. Erstellen Sie eine zweite YAML-Konfigurationsdatei für ein Deployment, das die von Ihnen erstellte PVC einbindet.

    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. Stellen Sie sicher, dass der Pod erstellt wurde.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    restore-pod-1                      1/1     Running   0          30m
    pod-2                     1/1     Running   0          46h
    
  5. Melden Sie sich bei dem neu erstellten Pod an und überprüfen Sie, ob die zuvor erstellte Beispieltextdatei im neuen Pod gespeichert ist.

    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
    

    Beispielausgabe

    hi
    

Wiederherstellung statischer Snapshots

Führen Sie die folgenden Schritte aus, um einen statischen Snapshot wiederherzustellen.

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Momentaufnahme CRN abrufen mit

    ibmcloud is share-snapshot <share-id> <share-snapshot-id> | grep CRN
    

    Beispielausgabe

    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. Erstellen Sie eine Ressource VolumeSnapshotContent. Speichern Sie die folgende Konfiguration als Datei mit dem Namen 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
    

    Beispielausgabe

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Erstellen Sie eine VolumeSnapshot. Speichern Sie die folgende Konfiguration als Datei mit dem Namen 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. Erstellen Sie ein PVC. Speichern Sie die folgende Konfiguration als Datei mit dem Namen 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
    

    Stellen Sie Ihre App erneut bereit.

    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. Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  7. Melden Sie sich bei dem neu erstellten Pod an und überprüfen Sie, ob die zuvor erstellte Beispieltextdatei im neuen Pod gespeichert ist.

    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
    

Schnappschüsse deaktivieren

Standardmäßig ist die Snapshot-Funktion bei Verwendung der File Storage for VPC. Diese Funktion kann in der Konfigurationszuordnung addon-vpc-file-csi-driver-configmap im kube-system Namespace deaktiviert werden, indem man den Wert IsSnapshotEnabled von in ändert false. Beachten Sie, dass mit dieser Änderung in der Konfigurationszuordnung alle erstellten Snapshots mit der folgenden CreateSnapshot functionality is disabled Meldung fehlschlagen:

  1. Speichern Sie die aktuelle Konfigurationskarte aus Ihrem Cluster auf Ihrem lokalen Rechner.

    oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Ändern Sie den Parameter IS_SNAPSHOT_ENABLED in false.

    IS_SNAPSHOT_ENABLED:false
    
  3. Speichern Sie die Datei und übernehmen Sie Ihre Änderungen.

    oc apply -f snapshotconfigmap.yaml