Migration des applications et des données Block Storage for VPC entre les comptes IBM Cloud

Cloud privé virtuel

Dans ce tutoriel, vous allez migrer une application Block Storage for VPC et des données snapshot d'un cluster IBM Cloud Kubernetes Service dans un compte, vers un cluster Red Hat OpenShift on IBM Cloud dans un compte séparé.

Prérequis

Compte 1

Dans le compte 1, vous devez disposer des éléments suivants.

Compte 2

Dans le compte 2, le compte de destination vers lequel la migration doit être effectuée, vous devez disposer des éléments suivants.

  • Un cluster Red Hat OpenShift on IBM Cloud.

Obtenez vos identifiants de compte

Compte 1 Compte 2

Pour chaque compte, obtenez vos identifiants de compte à partir de la page Paramètres du compte.

Définissez vos autorisations

Compte 1

Dans le compte 1, à partir de la page des autorisations IAM, donnez au compte l'accès aux instantanés deBlock Storage pour VPC.

  1. Dans le panneau Compte source, sélectionnez Compte spécifique, puis entrez l'ID du compte 2.
  2. Dans le panneau Service, sélectionnez Services d'infrastructure VPC.
  3. Dans le panneau Ressources, sélectionnez Ressources spécifiques, puis Snapshots deBlock Storage pour VPC.
  4. Facultatif Vous pouvez également étendre l'autorisation à un instantané spécifique ou à un groupe de ressources spécifique en ajoutant une condition.

Compte 2

Dans le compte 2, à partir de la page Utilisateurs IAM, donnez à l'utilisateur qui effectue ce tutoriel les autorisations de restaurateur de compte distant d'instantanés.

  1. Sélectionnez l'utilisateur auquel vous souhaitez attribuer les autorisations du restaurateur de compte à distance pour les instantanés.
  2. Dans l'onglet Accès, cliquez sur Attribuer un accès.
  3. Dans le champ Service, sélectionnez Services d'infrastructure VPC.
  4. Dans le champ Ressources, sélectionnez Ressources spécifiques, puis Type de ressource et Instantanés deBlock Storage pour VPC.
  5. Dans la section Rôles et actions, sélectionnez Snapshot Remote Account Restorer.
  6. Cliquez sur Ajouter, puis sur Attribuer pour terminer l'attribution de l'accès.

Optionnel : Déployer une application

Compte 1

Si vous n'avez pas encore d'application à migrer, vous pouvez déployer l'application d'exemple suivante.

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

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

    Exemple de sortie

    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. Créer 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. Vérifiez que le PVC est créé et qu'il est dans un état 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. 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-block-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 module, connectez-vous au module et créez un fichier texte à utiliser pour l'instantané.

    oc exec -it POD_NAME /bin/bash
    

    Exemple de sortie

    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éer une image instantanée

Compte 1

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

Vous ne pouvez créer des instantanés que lorsqu'un volume est attaché à un module.

  1. Créez une ressource d'instantané de volume dans votre cluster en utilisant la classe ibmc-vpcblock-snapshot snapshot qui est déployée lorsque vous avez activé le module complémentaire. Enregistrez la configuration de l'instantané de volume suivant dans un fichier appelé 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. Vérifiez que l'instantané est prêt à être utilisé et notez les SNAPSHOTCONTENT

    oc get volumesnapshots
    

    Exemple de sortie où READYTOUSE est 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
    

Obtenez les détails de votre cliché

Compte 1

  1. Obtenez les détails de votre volumesnapshotcontent en utilisant le SNAPSHOTCONTENT que vous avez trouvé à l'étape précédente.

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

    Exemple de sortie

    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. Dans le résultat, notez les Snapshot Handle Dans cet exemple, il s'agit de crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.

Restaurer l'instantané dans le compte 2

Compte 2

  1. Accédez à votre cluster Red Hat OpenShift.

  2. Créer une ressource VolumeSnapshotContent. Enregistrez la configuration suivante dans un fichier appelé 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. Créez le site VolumeSnapshotContent dans votre cluster.

    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 appelé 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. Créez le site VolumeSnapshot dans votre cluster.

    oc apply -f volsnap.yaml
    
  6. Créer un PVC. Enregistrer la configuration suivante dans un fichier appelé 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. Créez la PVC dans votre cluster.

    oc apply -f pvc2.yaml
    

Redéployez votre application

Compte 2

  1. Copiez l'exemple de déploiement suivant et enregistrez-le dans un fichier appelé 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. 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    
    

Poursuivre la migration de vos snapshots et applications vers le compte 2

Compte 2

Répétez ce tutoriel pour tous les snapshots et applications supplémentaires que vous souhaitez migrer d'un compte à l'autre.