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.

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.

  1. No painel Conta de origem, selecione Conta específica e insira o ID da conta da Conta 2.
  2. No painel Service (Serviço ), selecione VPC Infrastructure Services (Serviços de infraestrutura de VPC).
  3. No painel Recursos, selecione Recursos específicos e, em seguida, SnapshotsBlock Storage para VPC.
  4. 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.

  1. Selecione o usuário ao qual deseja atribuir as permissões do Snapshot Remote Account Restorer.
  2. Na guia Acesso, clique em Atribuir acesso.
  3. No campo Service (Serviço ), selecione VPC Infrastructure Services (Serviços de infraestrutura de VPC).
  4. No campo Recursos, selecione Recursos específicos e, em seguida, selecione Tipo de recurso e Block Storage Snapshots for VPC.
  5. Em Funções e ações, selecione Snapshot Remote Account Restorer.
  6. 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.

  1. Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.

  2. Verifique se o estado do complemento é normal e o status é 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 se os pods do driver estão implementados e se o status é Running.

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

    Exemplo 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
    
  4. Criar um 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. Verifique se a PVC foi criada e está em um 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. 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 earlier
    
    oc create -f pod.yaml
    
  7. Verifique se o pod está em execução no cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 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/bash
    

    Exemplo 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.

  1. Crie um recurso de instantâneo de volume em seu cluster usando a classe de ibmc-vpcblock-snapshot instantâneo que foi implantada quando você ativou o complemento. Salve a seguinte configuração de snapshot de volume em um arquivo chamado 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. Verifique se o snapshot está pronto para ser usado e anote o SNAPSHOTCONTENT.

    oc get volumesnapshots
    

    Exemplo 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

  1. Obtenha os detalhes do seu volumesnapshotcontent usando o SNAPSHOTCONTENT que você encontrou na etapa anterior.

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

    Exemplo 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>
    
  2. 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

  1. Acesse o seu Red Hat OpenShift cluster.

  2. Crie um recurso VolumeSnapshotContent. Salve a configuração a seguir em um arquivo chamado 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. Crie o VolumeSnapshotContent em seu cluster.

    oc apply -f volsnapcontent.yaml
    

    Exemplo de saída

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Criar um VolumeSnapshot. Salve a configuração a seguir em um arquivo chamado 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. Crie o VolumeSnapshot em seu cluster.

    oc apply -f volsnap.yaml
    
  6. Criar um PVC. Salve a seguinte configuração em um arquivo chamado 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. Crie o PVC em seu cluster.

    oc apply -f pvc2.yaml
    

Reimplante seu aplicativo

Conta 2

  1. 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 earlier
    
    oc create -f dep2.yaml
    
  2. Verifique se o pod está em execução no cluster.

    oc get pods
    
    NAME                          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.