Configuración de instantáneas para File Storage for VPC

Nube privada virtual

File Storage for VPC Las instantáneas de volumen le proporcionan una forma estandarizada de copiar el contenido de un volumen en un momento determinado sin crear un volumen completamente nuevo. Las instantáneas son compatibles tanto con las clases de almacenamiento basadas en zonas (zonal dp2 ()) como en regiones (rfs). Para obtener más información sobre las instantáneas, consulte Cómo funcionan las instantáneas.

Para obtener más información sobre File Storage for VPC, consulte Acerca de File Storage for VPC.

La compatibilidad con instantáneas para el File Storage for VPC complemento se encuentra actualmente en fase beta.

Si se elimina el PVC (recurso compartido de archivos), se eliminarán todas las instantáneas correspondientes que pertenezcan al recurso compartido de archivos. En este caso, las instantáneas de volumen CSI permanecen, pero las instantáneas de backend en VPC no existirán. Por lo tanto, debe eliminar los volúmenes utilizando oc delete vs <snapshot-name>.

Requisitos previos

  • Asegúrese de que tiene instalado el complemento File Storage for VPC en su clúster.
  • Asegúrese de que dispone de Compartir Instantánea Operador permisos en IAM.

Creación de una app

Cree un ejemplo de reclamación de volumen persistente (PVC) e implemente un pod que haga referencia a esa reclamación.

  1. Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  2. Verifique que el estado del complemento sea normal y que el estado sea 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. Verifique que los pods del controlador están desplegados y el estado es Running.

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

    Salida de ejemplo

    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. Crear 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. Verifique que el PVC se haya creado y se encuentre en estado 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. Crea un archivo de configuración YAML para un despliegue que monte el PVC que has creado.

    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. Compruebe que el pod se está ejecutando en su clúster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  8. Ahora que ha creado el pod, inicie sesión en él y cree un archivo de texto para utilizarlo en la instantánea.

    oc exec -it POD_NAME -- /bin/bash
    

    Ejemplos comandos para crear un nuevo archivo de texto.

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

Creación de una instantánea de volumen

Después de crear una implementación y un PVC, puede crear las instantáneas de volumen.

  1. Asegúrese de que dispone de Compartir Instantánea Operador permisos en IAM.

  2. Cree una instantánea de volumen en su clúster utilizando la clase ibmc-vpcfile-snapshot-delete de instantánea que se implementa al habilitar el complemento. Guarde la siguiente configuración de VolumeSnapshot en un archivo llamado 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. Verifique que la instantánea esté lista para usar.

    oc get volumesnapshots
    

    Ejemplo de salida donde READYTOUSE es 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
    

Restaurar desde una instantánea de volumen

Después de implementar la instantánea del volumen, puede restaurar los datos en un nuevo volumen utilizando la instantánea. La creación de un PVC aprovisiona dinámicamente un nuevo volumen con datos de instantáneas.

  1. Cree un segundo PVC que haga referencia a su instantánea de volumen.

    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. Verifique que el PVC se haya creado y se encuentre en estado 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. Crea un segundo archivo de configuración YAML para un despliegue que monte el PVC que has creado.

    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. Verifique que se ha creado el pod.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    restore-pod-1                      1/1     Running   0          30m
    pod-2                     1/1     Running   0          46h
    
  5. Inicie sesión en el pod recién creado y compruebe que el archivo de texto de muestra que creó anteriormente se ha guardado en el nuevo 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
    

    Salida de ejemplo

    hi
    

Restaurar instantáneas estáticas

Siga los siguientes pasos para restaurar una instantánea estática.

  1. Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  2. Obtenga el CRN instantáneo utilizando

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

    Salida de ejemplo

    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. Cree un recurso VolumeSnapshotContent. Guarde la siguiente configuración como un archivo llamado 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
    

    Salida de ejemplo

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Crear un VolumeSnapshot. Guarde la siguiente configuración como un archivo llamado 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. Crear un PVC. Guarde la siguiente configuración como un archivo llamado 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
    

    Vuelva a implementar su aplicación.

    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. Compruebe que el pod se está ejecutando en su clúster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  7. Inicie sesión en el pod recién creado y compruebe que el archivo de texto de muestra que creó anteriormente se ha guardado en el nuevo 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
    

Desactivar instantáneas

De forma predeterminada, la funcionalidad de instantánea está habilitada cuando se utiliza el File Storage for VPC. Esta funcionalidad se puede desactivar en el mapa de configuración addon-vpc-file-csi-driver-configmap del kube-system espacio de nombres cambiando el IsSnapshotEnabled a false. Tenga en cuenta que con este cambio en el mapa de configuración, cualquier instantánea que se cree fallará con el mensaje CreateSnapshot functionality is disabled:

  1. Guarde el mapa de configuración actual de su clúster en su máquina local.

    oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Edita el parámetro IS_SNAPSHOT_ENABLED a false.

    IS_SNAPSHOT_ENABLED:false
    
  3. Guarde el archivo y aplique los cambios.

    oc apply -f snapshotconfigmap.yaml