Migración de aplicaciones y datos Block Storage for VPC entre cuentas de IBM Cloud

Nube privada virtual

En este tutorial, migrarás una Block Storage for VPC aplicación y datos de instantáneas de un IBM Cloud Kubernetes Service clúster en una cuenta, a un Red Hat OpenShift on IBM Cloud clúster en una cuenta separada.

Requisitos previos

Cuenta 1

En la Cuenta 1, debe tener lo siguiente.

Cuenta 2

En la Cuenta 2, la cuenta de destino a migrar, debe tener lo siguiente.

  • Un clúster Red Hat OpenShift on IBM Cloud.

Obtenga sus ID de cuenta

Cuenta 1 Cuenta 2

Para cada cuenta, obtenga sus ID de cuenta de la página Configuración de la cuenta.

Configure sus permisos

Cuenta 1

En la Cuenta 1, desde la página de autorizaciones de IAM dé acceso a la cuenta a las Instantáneas deBlock Storage para VPC.

  1. En el panel Cuenta de origen, seleccione Cuenta específica e introduzca el ID de cuenta de la Cuenta 2.
  2. En el panel Servicio, seleccione Servicios de infraestructura VPC.
  3. En el panel Recursos, seleccione Recursos específicos y, a continuación, Instantáneas deBlock Storage para VPC.
  4. Opcional También puede ampliar la autorización a una instantánea específica o a un grupo de recursos específico añadiendo una condición.

Cuenta 2

En la Cuenta 2, desde la página Usuarios de IAM, otorgue al usuario que está completando este tutorial los permisos de Restaurador remoto de cuentas de instantáneas.

  1. Seleccione el usuario al que desea asignar los permisos del Restaurador remoto de cuentas de instantáneas.
  2. En la pestaña Acceso, haga clic en Asignar acceso.
  3. En el campo Servicio, seleccione Servicios de infraestructura VPC.
  4. En el campo Recursos, seleccione Recursos específicos y, a continuación, seleccione Tipo de recurso e Instantáneas deBlock Storage para VPC.
  5. En Roles y acciones, seleccione Restaurador de cuentas remotas de instantáneas.
  6. Haga clic en Añadir y, a continuación, en Asignar para terminar de asignar el acceso.

Opcional: Despliegue de una aplicación

Cuenta 1

Si aún no tiene una aplicación que migrar, puede desplegar la siguiente aplicación de ejemplo.

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

  2. Compruebe que el estado del complemento es normal y el estado es Ready.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                   Version                     Health State   Health Status   
    vpc-block-csi-driver   5.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-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. Comprueba que el PVC está creado y se encuentra en 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 en 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
    

Crear una instantánea

Cuenta 1

Después de crear una implantación y una PVC, puede crear los recursos de instantáneas de volumen.

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

  1. Cree un recurso de instantánea de volumen en su clúster utilizando la ibmc-vpcblock-snapshot clase de instantánea que se despliega al activar el complemento. Guarde la siguiente configuración de instantáneas de volumen 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
    
  2. Comprueba que la instantánea está lista para su uso y toma nota del SNAPSHOTCONTENT.

    oc get volumesnapshots
    

    Ejemplo de salida donde READYTOUSE es true.

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

Obtenga los detalles de su instantánea

Cuenta 1

  1. Obtén los detalles de tu volumesnapshotcontent utilizando el SNAPSHOTCONTENT que encontraste en el paso anterior.

    oc describe volumesnapshotcontent snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b
    

    Salida de ejemplo

    Name:         snapcontent-995f295b-6036-4d67-ab03-bba8557a0884
    Namespace:    
    Labels:       <none>
    Annotations:  <none>
    API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshotContent
    Metadata:
      Creation Timestamp:  2024-09-24T11:08:18Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshotcontent-bound-protection
      Generation:  1
      Managed Fields:
        API Version:  snapshot.storage.k8s.io/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:metadata:
            f:finalizers:
              .:
              v:"snapshot.storage.kubernetes.io/volumesnapshotcontent-bound-protection":
          f:spec:
            .:
            f:deletionPolicy:
            f:driver:
            f:source:
              .:
              f:volumeHandle:
            f:sourceVolumeMode:
            f:volumeSnapshotClassName:
            f:volumeSnapshotRef:
        Manager:      snapshot-controller
        Operation:    Update
        Time:         2024-09-24T11:08:18Z
        API Version:  snapshot.storage.k8s.io/v1
        Fields Type:  FieldsV1
        fieldsV1:
          f:status:
            .:
            f:creationTime:
            f:readyToUse:
            f:restoreSize:
            f:snapshotHandle:
        Manager:         csi-snapshotter
        Operation:       Update
        Subresource:     status
        Time:            2024-09-24T11:08:43Z
      Resource Version:  1501448
      UID:               ad50aa42-8056-4264-9188-a13da3aaebca
    Spec:
      Deletion Policy:  Delete
      Driver:           vpc.block.csi.ibm.io
      Source:
        Volume Handle:             r134-c7e32d5b-3a42-4d3e-b5e9-772b84566eaf
      Source Volume Mode:          Filesystem
      Volume Snapshot Class Name:  ibmc-vpcblock-snapshot-delete
      Volume Snapshot Ref:
        API Version:       snapshot.storage.k8s.io/v1
        Kind:              VolumeSnapshot
        Name:              new-snapshot-with-crn
        Namespace:         default
        Resource Version:  1501308
        UID:               995f295b-6036-4d67-ab03-bba8557a0884
    Status:
      Creation Time:    1727176105000000000
      Ready To Use:     true
      Restore Size:     10737418240
      Snapshot Handle:  crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5
    Events:             <none>
    
  2. En la salida, anote el Snapshot Handle. En este ejemplo, es crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.

Restaurar la instantánea en la Cuenta 2

Cuenta 2

  1. Acceda al clúster de Red Hat OpenShift.

  2. 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: crossaccount-snapshot-cnt
    spec:
      volumeSnapshotClassName: ibmc-vpcblock-snapshot-retain
      deletionPolicy: Retain
      driver: vpc.block.csi.ibm.io
      source:
        snapshotHandle: CRN # 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: crossaccount-snapshot
        namespace: default
    
  3. Cree el sitio VolumeSnapshotContent en su clúster.

    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.

    kind: VolumeSnapshot
    metadata:
      name: crossaccount-snapshot
      namespace: default
    spec:
      volumeSnapshotClassName: ibmc-vpcblock-snapshot-retain
      source:
        volumeSnapshotContentName: crossaccount-snapshot-cnt # Enter the name of the VolumeSnapshotContent that you created in the previous step.
    
  5. Cree el sitio VolumeSnapshot en su clúster.

    oc apply -f volsnap.yaml
    
  6. Crea un PVC. Guarde la siguiente configuración como un archivo llamado pvc2.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-cross-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      dataSource:
        name: crossaccount-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  7. Cree la PVC en el clúster.

    oc apply -f pvc2.yaml
    

Reimplanta tu aplicación

Cuenta 2

  1. Copie el siguiente ejemplo de despliegue y guárdelo en un archivo llamado dep2.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-cross-pvc  # The name of the PVC you created earlier
    
    oc create -f dep2.yaml
    
  2. 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    
    

Continúe migrando sus instantáneas y aplicaciones a la Cuenta 2

Cuenta 2

Repita este tutorial para las instantáneas y aplicaciones adicionales que desee migrar entre cuentas.