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.
-
Un cluster IBM Cloud Kubernetes Service.
-
Un'applicazione che utilizza Block Storage for VPC e un'istantanea dei dati dell'applicazione. Per ulteriori informazioni, vedere Impostazione delle istantanee con il componente aggiuntivo del cluster Block Storage for VPC.
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.
- Nel pannello Account di origine, selezionare Account specifico, quindi inserire l'ID dell'account 2.
- Nel pannello Servizi, selezionare Servizi di infrastruttura VPC.
- Nel pannello Risorse, selezionare Risorse specifiche, quindi selezionare Block Storage Snapshots for VPC.
- 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.
- Selezionare l'utente a cui assegnare le autorizzazioni di Snapshot Remote Account Restorer.
- Nella scheda Accesso, fare clic su Assegna accesso.
- Nel campo Servizio, selezionare Servizi di infrastruttura VPC.
- Nel campo Risorse, selezionare Risorse specifiche, quindi selezionare Tipo di risorsa e Block Storage Snapshots for VPC.
- In Ruoli e azioni, selezionare Ripristino account remoto snapshot.
- 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.
-
Verificare che lo stato del componente aggiuntivo sia
normale che lo stato siaReady.ibmcloud oc cluster addon ls --cluster CLUSTER-IDName Version Health State Health Status vpc-block-csi-driver 5.0 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) -
Verificare che i pod del driver siano distribuiti e che lo stato sia
Running.oc get pods -n kube-system | grep vpc-block-csiOutput 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 -
Creare un PVC.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-block-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: ibmc-vpc-block-5iops-tieroc create -f pvc.yaml -
Verificare che il PVC sia stato creato e si trovi in uno stato
Bound.oc get pvcNAME 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 -
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 earlieroc create -f pod.yaml -
Verificare che il pod sia in esecuzione nel cluster.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
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/bashOutput 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.
-
Creare una risorsa snapshot del volume nel cluster utilizzando la classe
ibmc-vpcblock-snapshotsnapshot distribuita quando si è abilitato il componente aggiuntivo. Salvate la seguente configurazione di snapshot del volume in un file chiamatosnapvol.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: snapshot-csi-block-pvc spec: volumeSnapshotClassName: ibmc-vpcblock-snapshot source: persistentVolumeClaimName: csi-block-pvcoc create -f snapvol.yaml -
Verificare che l'istantanea sia pronta per l'uso e annotare il codice
SNAPSHOTCONTENT.oc get volumesnapshotsEsempio 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
-
Ottenete i dettagli del vostro
volumesnapshotcontentutilizzando ilSNAPSHOTCONTENTtrovato nel passaggio precedente.oc describe volumesnapshotcontent snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12bOutput 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> -
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
-
Creare una risorsa
VolumeSnapshotContent. Salvate la seguente configurazione in un file chiamatovolsnapcontent.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 -
Creare il sito
VolumeSnapshotContentnel cluster.oc apply -f volsnapcontent.yamlOutput di esempio
volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created -
Creare un
VolumeSnapshot. Salvate la seguente configurazione in un file chiamatovolsnap.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. -
Creare il sito
VolumeSnapshotnel cluster.oc apply -f volsnap.yaml -
Creare un PVC. Salvate la seguente configurazione in un file chiamato
pvc2.yamlapiVersion: 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 -
Crea la PVC nel tuo cluster.
oc apply -f pvc2.yaml
Ripristinare l'applicazione
Conto 2
-
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 earlieroc create -f dep2.yaml -
Verificare che il pod sia in esecuzione nel cluster.
oc get podsNAME 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.