Configuration des instantanés pour File Storage for VPC

Cloud privé virtuel

File Storage for VPC Les instantanés de volume vous offrent un moyen standardisé de copier le contenu d'un volume à un moment donné sans créer un volume entièrement nouveau. Les instantanés sont pris en charge pour les classes de stockage basées sur les zones (zonal( dp2 )) et les régions (rfs). Pour plus d'informations sur les instantanés, consultez la section Fonctionnement des instantanés.

Pour plus d'informations sur File Storage for VPC, voir A propos de File Storage for VPC.

La prise en charge des instantanés pour le File Storage for VPC module complémentaire est actuellement en version bêta.

Si le PVC (partage de fichiers) est supprimé, tous les instantanés correspondants appartenant au partage de fichiers sont supprimés. Dans ce cas, les instantanés de volume CSI restent, mais les instantanés backend dans VPC n'existent pas. Par conséquent, vous devez supprimer les volumes à l'aide de oc delete vs <snapshot-name>.

Prérequis

  • Assurez-vous que le module complémentaire File Storage for VPC est installé dans votre cluster.
  • Assurez-vous que vous disposez de Opérateur d'instantanés d'actions autorisations dans IAM.

Création d'une application

Créez un exemple de revendication de volume persistant (PVC) et déployez un pod qui fait référence à cette revendication.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Vérifiez que l'état du module complémentaire est normal et que le statut est 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. Vérifiez que les pods du pilote sont déployés et à l'état Running.

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

    Exemple de sortie

    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. Créer un 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. Vérifiez que le PVC est créé et qu'il est dans un Bound état.

    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. Créez un fichier de configuration YAML pour un déploiement qui monte le PVC que vous avez créé.

    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. Vérifiez que le pod fonctionne dans votre cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  8. Maintenant que vous avez créé le pod, connectez-vous à celui-ci et créez un fichier texte à utiliser pour le snapshot.

    oc exec -it POD_NAME -- /bin/bash
    

    Exemples de commandes pour créer un nouveau fichier texte.

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

Création d'un instantané de volume

Après avoir créé un déploiement et un PVC, vous pouvez créer les instantanés de volume.

  1. Assurez-vous que vous disposez de Opérateur d'instantanés d'actions autorisations dans IAM.

  2. Créez un instantané de volume dans votre cluster à l'aide de la classe ibmc-vpcfile-snapshot-delete snapshot déployée lorsque vous avez activé le module complémentaire. Enregistrez la configuration suivante de VolumeSnapshot dans un fichier appelé 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. Vérifiez que l'instantané est prêt à être utilisé.

    oc get volumesnapshots
    

    Exemple de résultat où READYTOUSE est 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
    

Restauration à partir d'un instantané de volume

Après avoir déployé l'instantané du volume, vous pouvez restaurer les données sur un nouveau volume à l'aide de l'instantané. La création d'un PVC provisionne dynamiquement un nouveau volume avec les données de snapshot.

  1. Créez un deuxième PVC qui fait référence à votre instantané de volume.

    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. Vérifiez que le PVC est créé et qu'il est dans un Bound état.

    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. Créez un deuxième fichier de configuration YAML pour un déploiement qui monte le PVC que vous avez créé.

    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. Vérifiez que le pod a bien été créé.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    restore-pod-1                      1/1     Running   0          30m
    pod-2                     1/1     Running   0          46h
    
  5. Connectez-vous au pod nouvellement créé et vérifiez que le fichier texte d'exemple que vous avez créé précédemment est enregistré dans le nouveau 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
    

    Exemple de sortie

    hi
    

Restauration d'instantanés statiques

Suivez les étapes suivantes pour restaurer un instantané statique.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Obtenir un instantané CRN à l'aide de

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

    Exemple de sortie

    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. Créer une ressource VolumeSnapshotContent. Enregistrez la configuration suivante dans un fichier nommé 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
    

    Exemple de sortie

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Créer un VolumeSnapshot. Enregistrez la configuration suivante dans un fichier nommé 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. Créer un PVC. Enregistrez la configuration suivante dans un fichier nommé 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
    

    Redéployez votre application.

    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. Vérifiez que le pod fonctionne dans votre cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  7. Connectez-vous au pod nouvellement créé et vérifiez que le fichier texte d'exemple que vous avez créé précédemment est enregistré dans le nouveau 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
    

Désactiver les instantanés

Par défaut, la fonctionnalité de capture instantanée est activée lors de l'utilisation du File Storage for VPC. Cette fonctionnalité peut être désactivée dans le configmap addon-vpc-file-csi-driver-configmap dans l'espace kube-system de noms en remplaçant IsSnapshotEnabled par false. Notez qu'avec cette modification dans le configmap, tous les instantanés créés échouent avec le message CreateSnapshot functionality is disabled suivant :.

  1. Enregistrez la configuration actuelle de votre cluster sur votre ordinateur local.

    oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Modifiez le paramètre IS_SNAPSHOT_ENABLED en le remplaçant par false.

    IS_SNAPSHOT_ENABLED:false
    
  3. Enregistrez le fichier et appliquez vos modifications.

    oc apply -f snapshotconfigmap.yaml