Migrazione delle applicazioni e dei dati di Block Storage for VPC tra gli account IBM Cloud

Cloud virtuale privato

In questa esercitazione, si migrerà un'applicazione Block Storage for VPC e i dati delle istantanee da un cluster IBM Cloud Kubernetes Service in un account, a un cluster Red Hat OpenShift on IBM Cloud in un account separato.

Prerequisiti

Conto 1

Nel Conto 1, è necessario disporre di quanto segue.

Conto 2

Nell'account 2, l'account di destinazione verso cui eseguire la migrazione, è necessario disporre di quanto segue.

  • Un cluster Red Hat OpenShift on IBM Cloud.

Ottenere gli ID degli account

Conto 1 Conto 2

Per ogni account, ottenere gli ID dell'account dalla pagina delle impostazioni dell'account.

Impostare le autorizzazioni

Conto 1

Nell'account 1, dalla pagina delle autorizzazioni IAM, dare all'account l'accesso a Block Storage Snapshots per VPC.

  1. Nel pannello Account di origine, selezionare Account specifico, quindi inserire l'ID dell'account 2.
  2. Nel pannello Servizi, selezionare Servizi di infrastruttura VPC.
  3. Nel pannello Risorse, selezionare Risorse specifiche, quindi selezionare Block Storage Snapshots for VPC.
  4. Facoltativo È anche possibile estendere l'autorizzazione a un'istantanea specifica o a un gruppo di risorse specifico aggiungendo una condizione.

Conto 2

Nell'Account 2, dalla pagina Utenti IAM, assegnare all'utente che sta completando questa esercitazione le autorizzazioni di Snapshot Remote Account Restorer.

  1. Selezionare l'utente a cui assegnare le autorizzazioni di Snapshot Remote Account Restorer.
  2. Nella scheda Accesso, fare clic su Assegna accesso.
  3. Nel campo Servizio, selezionare Servizi di infrastruttura VPC.
  4. Nel campo Risorse, selezionare Risorse specifiche, quindi selezionare Tipo di risorsa e Block Storage Snapshots for VPC.
  5. In Ruoli e azioni, selezionare Ripristino account remoto snapshot.
  6. Fare clic su Aggiungi, quindi su Assegna per terminare l'assegnazione dell'accesso.

Opzionale: Distribuire un'applicazione

Conto 1

Se non si ha già un'applicazione da migrare, si può distribuire la seguente applicazione di esempio.

  1. Accedi al tuo account. Se applicabile, specifica il gruppo di risorse appropriato. Imposta il contesto per il tuo cluster.

  2. Verificare che lo stato del componente aggiuntivo sia normal e che lo stato sia 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. Verificare che i pod del driver siano distribuiti e che lo stato sia Running.

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

    Output di esempio

    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. Creare 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. Verificare che il PVC sia stato creato e si trovi in uno stato 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. Creare un file di configurazione YAML per una distribuzione che monti il PVC creato.

    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. Verificare che il pod sia in esecuzione nel cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. Dopo aver creato il pod, accedere al pod e creare un file di testo da usare per lo snapshot.

    oc exec -it POD_NAME /bin/bash
    

    Output di esempio

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

Crea un'istantanea

Conto 1

Dopo aver creato un'installazione client e un PVC, è possibile creare le risorse snapshot del volume.

È possibile creare istantanee solo quando un volume è collegato a un pod.

  1. Creare una risorsa snapshot del volume nel cluster utilizzando la classe ibmc-vpcblock-snapshot snapshot distribuita quando si è abilitato il componente aggiuntivo. Salvate la seguente configurazione di snapshot del volume in un file chiamato 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. Verificare che l'istantanea sia pronta per l'uso e annotare il codice SNAPSHOTCONTENT.

    oc get volumesnapshots
    

    Esempio di output dove READYTOUSE è 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
    

Ottenere i dettagli dell'istantanea

Conto 1

  1. Ottenete i dettagli del vostro volumesnapshotcontent utilizzando il SNAPSHOTCONTENT trovato nel passaggio precedente.

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

    Output di esempio

    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. Nell'output, annotare il valore Snapshot Handle. In questo esempio, è crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.

Ripristinare l'istantanea nel conto 2

Conto 2

  1. Accedi al tuo cluster Red Hat OpenShift.

  2. Creare una risorsa VolumeSnapshotContent. Salvate la seguente configurazione in un file chiamato 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. Creare il sito VolumeSnapshotContent nel cluster.

    oc apply -f volsnapcontent.yaml
    

    Output di esempio

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Creare un VolumeSnapshot. Salvate la seguente configurazione in un file chiamato 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. Creare il sito VolumeSnapshot nel cluster.

    oc apply -f volsnap.yaml
    
  6. Creare un PVC. Salvate la seguente configurazione in un file chiamato 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. Crea la PVC nel tuo cluster.

    oc apply -f pvc2.yaml
    

Ripristinare l'applicazione

Conto 2

  1. Copiate il seguente esempio di distribuzione e salvatelo in un file chiamato 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. Verificare che il pod sia in esecuzione nel cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    

Continuare la migrazione delle istantanee e delle app all'Account 2

Conto 2

Ripetere questa esercitazione per tutte le altre istantanee e applicazioni che si desidera migrare tra gli account.