Migração de aplicativos e dados Block Storage for VPC entre contas IBM Cloud
Nuvem privada virtual
Neste tutorial, você migrará um aplicativo Block Storage for VPC e dados de snapshot de um cluster IBM Cloud Kubernetes Service em uma conta para um cluster Red Hat OpenShift on IBM Cloud em uma conta separada.
Pré-requisitos
Conta 1
Na Conta 1, você deve ter o seguinte.
-
Um cluster IBM Cloud Kubernetes Service.
-
Um aplicativo que usa Block Storage for VPC e um instantâneo dos dados do seu aplicativo. Para obter mais informações, consulte Configuração de snapshots com o complemento de cluster Block Storage for VPC.
Conta 2
Na Conta 2, a conta de destino para a qual a migração será feita, você deve ter o seguinte.
- Um cluster Red Hat OpenShift on IBM Cloud.
Obtenha suas IDs de conta
Conta 1 Conta 2
Para cada conta, obtenha seus IDs de conta na página Configurações da conta.
Configure suas permissões
Conta 1
Na Conta 1, na página de autorizações do IAM, conceda à conta acesso aos instantâneosBlock Storage para VPC.
- No painel Conta de origem, selecione Conta específica e insira o ID da conta da Conta 2.
- No painel Service (Serviço ), selecione VPC Infrastructure Services (Serviços de infraestrutura de VPC).
- No painel Recursos, selecione Recursos específicos e, em seguida, SnapshotsBlock Storage para VPC.
- Opcional Você também pode definir o escopo da autorização para um snapshot específico ou um grupo de recursos específico adicionando uma condição.
Conta 2
Na Conta 2, na página Usuários IAM, conceda ao usuário que está concluindo este tutorial as permissões de Snapshot Remote Account Restorer.
- Selecione o usuário ao qual deseja atribuir as permissões do Snapshot Remote Account Restorer.
- Na guia Acesso, clique em Atribuir acesso.
- No campo Service (Serviço ), selecione VPC Infrastructure Services (Serviços de infraestrutura de VPC).
- No campo Recursos, selecione Recursos específicos e, em seguida, selecione Tipo de recurso e Block Storage Snapshots for VPC.
- Em Funções e ações, selecione Snapshot Remote Account Restorer.
- Clique em Add e, em seguida, em Assign para concluir a atribuição de acesso.
Opcional: Implantar um aplicativo
Conta 1
Se você ainda não tiver um aplicativo para migrar, poderá implantar o aplicativo de exemplo a seguir.
-
Verifique se o estado do complemento é
normale o status éReady.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) -
Verifique se os pods do driver estão implementados e se o status é
Running.oc get pods -n kube-system | grep vpc-block-csiExemplo de saída
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 -
Criar um 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 -
Verifique se a PVC foi criada e está em um estado
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 -
Crie um arquivo de configuração YAML para uma implementação que monte a PVC criada.
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 -
Verifique se o pod está em execução no cluster.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
Agora que o pod foi criado, efetue login nele e crie um arquivo de texto a ser usado para a captura instantânea.
oc exec -it POD_NAME /bin/bashExemplo de saída
root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/ root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
Criar uma captura instantânea
Conta 1
Depois de criar uma implementação e uma PVC, é possível criar os recursos de captura instantânea do volume.
Você pode criar snapshots somente quando um volume estiver anexado a um pod.
-
Crie um recurso de instantâneo de volume em seu cluster usando a classe de
ibmc-vpcblock-snapshotinstantâneo que foi implantada quando você ativou o complemento. Salve a seguinte configuração de snapshot de volume em um arquivo chamadosnapvol.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 -
Verifique se o snapshot está pronto para ser usado e anote o
SNAPSHOTCONTENT.oc get volumesnapshotsExemplo de saída em que
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
Obtenha os detalhes de seu instantâneo
Conta 1
-
Obtenha os detalhes do seu
volumesnapshotcontentusando oSNAPSHOTCONTENTque você encontrou na etapa anterior.oc describe volumesnapshotcontent snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12bExemplo de saída
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> -
Na saída, anote o
Snapshot Handle. Neste exemplo, écrn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.
Restaurar o instantâneo na Conta 2
Conta 2
-
Crie um recurso
VolumeSnapshotContent. Salve a configuração a seguir em um arquivo chamadovolsnapcontent.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 -
Crie o
VolumeSnapshotContentem seu cluster.oc apply -f volsnapcontent.yamlExemplo de saída
volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created -
Criar um
VolumeSnapshot. Salve a configuração a seguir em um arquivo chamadovolsnap.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. -
Crie o
VolumeSnapshotem seu cluster.oc apply -f volsnap.yaml -
Criar um PVC. Salve a seguinte configuração em um arquivo chamado
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 -
Crie o PVC em seu cluster.
oc apply -f pvc2.yaml
Reimplante seu aplicativo
Conta 2
-
Copie o exemplo de implementação a seguir e salve-o em um arquivo chamado
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 -
Verifique se o pod está em execução no cluster.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s
Continue migrando seus snapshots e aplicativos para a Conta 2
Conta 2
Repita este tutorial para outros snapshots e aplicativos que você deseja migrar entre contas.