Configuración de instantáneas con el complemento de clúster Block Storage for VPC

Nube privada virtual

Block 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. Para obtener más información sobre las instantáneas, consulte Cómo funcionan las instantáneas. Para obtener más información sobre Block Storage for VPC, consulte Acerca de Block Storage for VPC.

Por defecto, el complemento de clúster Block Storage for VPC crea volúmenes e instantáneas en el mismo grupo de recursos VPC en el que se despliega el clúster. Sin embargo, a partir de la versión del complemento 5.2.46 y posteriores, puede crear instantáneas en un grupo de recursos diferente especificando el parámetro resourceGroup en su VolumeSnapshotClass. Para obtener más información, consulte Creación de instantáneas en un grupo de recursos diferente.

Creación de una app

Cree un ejemplo de reclamación de volumen persistente (PVC) y despliegue un pod que haga referencia a dicha 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 el estado sea Ready.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                   Version                     Health State   Health Status   
    vpc-block-csi-driver   5.2   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-block-csi
    

    Salida de ejemplo

    ibm-vpc-block-csi-controller-0                        7/7     Running   0          77s
    ibm-vpc-block-csi-node-56c85                          4/4     Running   0          77s
    ibm-vpc-block-csi-node-87j2t                          4/4     Running   0          77s
    ibm-vpc-block-csi-node-cmh2h                          4/4     Running   0          77s
    
  4. Crea un PVC.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-block-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-block-5iops-tier
    
    oc create -f pvc.yaml
    
  5. Verifique que la PVC se ha creado y está en un estado Bound.

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    csi-block-pvc   Bound    pvc-0798b499-0b61-4f57-a184-4caeb7b9298d   10Gi       RWO            ibmc-vpc-block-5iops-tier   4m22s
    
  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-block-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 el pod y cree un archivo de texto para utilizarlo para la instantánea.

    oc exec -it POD_NAME /bin/bash
    

    Salida de ejemplo

    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 un despliegue y una PVC, puede crear los recursos de instantánea de volumen.

Sólo se pueden crear instantáneas cuando un volumen está conectado a un pod.

  1. Asegúrese de que tiene permisos de Operador de instantáneas compartidas en IAM.

  2. Cree un recurso de instantánea de volumen en el clúster utilizando la clase de instantánea ibmc-vpcblock-snapshot que se despliega 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-block-pvc
    spec:
      volumeSnapshotClassName: ibmc-vpcblock-snapshot
      source:
        persistentVolumeClaimName: csi-block-pvc
    
    oc create -f snapvol.yaml
    
  3. Verifique que la instantánea está lista para su uso.

    oc get volumesnapshots
    

    Ejemplo de salida donde READYTOUSE es true:

    NAME                       READYTOUSE   SOURCEPVC       SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS           SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    snapshot-csi-block-pvc     true         csi-block-pvc                           1Gi           ibmc-vpcblock-snapshot   snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b   18h            18h
    

Creación de instantáneas en un grupo de recursos diferente

A partir de la versión 5.2.46 y posteriores del complemento de clúster Block Storage for VPC, puede crear instantáneas de volumen en un grupo de recursos distinto del grupo de recursos de su clúster. Esta función proporciona una mayor flexibilidad en la organización de recursos, la gestión de cuotas y el control de acceso.

  • Requisito de versión: Esta función sólo es compatible con la versión del complemento 5.2.46 y posteriores.
  • Comportamiento por defecto: Si no se especifica un parámetro resourceGroup o si se especifica una cadena vacía, las instantáneas se crean en el grupo de recursos del clúster.

Requisitos previos

Antes de empezar, asegúrese de que dispone de los siguientes permisos en IAM:

  • VPC Servicios de Infraestructura (es): Editor y Escritor
  • Kubernetes Service (contenedor-kubernetes): Operador
  • Grupo de recursos: Visor para cada grupo de recursos en el que desee crear instantáneas

Creación de un VolumeSnapshotClass

Para crear instantáneas en un grupo de recursos diferente, debe crear un VolumeSnapshotClass personalizado que especifique el ID del grupo de recursos de destino.

  1. Obtenga el ID del grupo de recursos donde desea crear la instantánea.

    ibmcloud resource groups
    
  2. Cree un archivo de configuración VolumeSnapshotClass. Guarde el siguiente YAML en un archivo llamado vpc-snap-custom-rg.yaml. Sustituya <RESOURCE_GROUP_ID> por el ID del grupo de recursos de destino.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: vpc-snap-custom-rg
    driver: vpc.block.csi.ibm.io
    deletionPolicy: Delete
    parameters:
      resourceGroup: <RESOURCE_GROUP_ID>
    

    El parámetro resourceGroup debe ser el ID del grupo de recursos, no el nombre del grupo de recursos.

  3. Cree el sitio VolumeSnapshotClass en su clúster.

    oc create -f vpc-snap-custom-rg.yaml
    
  4. Compruebe que se ha creado VolumeSnapshotClass.

    oc get volumesnapshotclass
    

Creación de una instantánea con un grupo de recursos personalizado

Una vez creada la página personalizada VolumeSnapshotClass, puede crear instantáneas que hagan referencia a ella.

  1. Cree un archivo de configuración VolumeSnapshot que haga referencia a su clase de instantánea personalizada. Guarde el siguiente YAML en un archivo llamado snapshot-custom-rg.yaml.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-custom-rg
    spec:
      volumeSnapshotClassName: vpc-snap-custom-rg
      source:
        persistentVolumeClaimName: csi-block-pvc
    
  2. Cree la instantánea.

    oc create -f snapshot-custom-rg.yaml
    
  3. Verifique que la instantánea está lista para su uso.

    oc get volumesnapshots
    
  4. Compruebe que la instantánea se ha creado en el grupo de recursos de destino utilizando la CLI de IBM Cloud.

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    ibmcloud is snapshots
    

Restauración desde una instantánea de volumen

Después de desplegar los recursos de instantánea, puede restaurar los datos en un nuevo volumen utilizando la instantánea. La creación de una PVC suministra dinámicamente un nuevo volumen con datos de instantánea.

  1. Cree una segunda PVC que haga referencia a la instantánea de volumen.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      dataSource:
        name: snapshot-csi-block-pvc
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. Verifique que la PVC se ha creado y está en un estado Bound.

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    restore-pvc            Bound    pvc-4ede7630-5a49-4bae-b34d-dc528acfb884   10Gi       RWO            ibmc-vpc-block-5iops-tier   18h
    
  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: podtwo
      labels:
        app: podtwo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: podtwo
      template:
        metadata:
          labels:
            app: podtwo
        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 podtwo.yaml
    
  4. Verifique que se ha creado el pod.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. Inicie sesión en el pod recién creado y verifique que el archivo de texto de ejemplo que ha creado 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
    

Desactivación de instantáneas

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

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

    oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Edite el parámetro IsSnapshotEnabled en false.

  3. Guarde el archivo y aplique los cambios.

    oc apply -f snapshotconfigmap.yaml
    

Próximos pasos

Despliegue el webhook de validación de instantánea para validar la entrada de usuario. Para obtener más información, consulte Despliegue del webhook de validación de instantánea.

Resolución de problemas de instantáneas

Revise los siguientes temas de solución de problemas.