Migration von Block Storage for VPC Anwendungen und Daten zwischen IBM Cloud

Virtuelle private Cloud

In diesem Tutorial migrieren Sie eine Block Storage for VPC und Snapshot-Daten von einem IBM Cloud Kubernetes Service in einem Konto zu einem Red Hat OpenShift on IBM Cloud in einem anderen Konto.

Voraussetzungen

Konto 1

In Konto 1 müssen Sie Folgendes haben.

Konto 2

In Konto 2, dem Zielkonto, auf das migriert werden soll, müssen Sie Folgendes haben.

  • Ein Red Hat OpenShift on IBM Cloud-Cluster.

Erhalten Sie Ihre Konto-IDs

Konto 1 Konto 2

Rufen Sie für jedes Konto die Konto-IDs auf der Seite Kontoeinstellungen ab.

Berechtigungen einrichten

Konto 1

Geben Sie in Konto 1 auf der Seite IAM-Berechtigungen dem Konto den Zugriff auf Block Storage Snapshots für VPC.

  1. Wählen Sie im Feld Quellkonto die Option Bestimmtes Konto und geben Sie dann die Konto-ID von Konto 2 ein.
  2. Wählen Sie im Bereich Dienst die Option VPC-Infrastrukturdienste.
  3. Wählen Sie im Bereich Ressourcen die Option Spezifische Ressourcen und dann Block Storage für VPC aus.
  4. Optional Sie können die Autorisierung auch auf einen bestimmten Snapshot oder eine bestimmte Ressourcengruppe beschränken, indem Sie eine Bedingung hinzufügen.

Konto 2

Geben Sie auf der Seite IAM-Benutzer unter Konto 2 dem Benutzer, der dieses Tutorial absolviert, die Berechtigung Snapshot Remote Account Restorer.

  1. Wählen Sie den Benutzer aus, dem Sie die Berechtigungen für den Snapshot Remote Account Restorer zuweisen möchten.
  2. Klicken Sie auf der Registerkarte Zugriff auf Zugriff zuweisen.
  3. Wählen Sie im Feld Dienst die Option VPC-Infrastrukturdienste.
  4. Wählen Sie im Feld Ressourcen die Option Spezifische Ressourcen, dann den Ressourcentyp und Block Storage für VPC.
  5. Wählen Sie in der Liste Rollen und Aktionen die Option Snapshot Remote Account Restorer.
  6. Klicken Sie auf Hinzufügen und dann auf Zuweisen, um die Zuweisung des Zugangs abzuschließen.

Optional: Eine Anwendung bereitstellen

Konto 1

Wenn Sie noch keine zu migrierende Anwendung haben, können Sie die folgende Beispielanwendung einsetzen.

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Vergewissern Sie sich, dass der Status des Add-ons normal und der Status Ready ist.

    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. Überprüfen Sie, dass die Treiber-Pods bereitgestellt sind und ihr Status Running (aktiv) lautet.

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

    Beispielausgabe

    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. Erstellen Sie ein 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. Überprüfen Sie, ob der PVC erstellt wurde und sich im Zustand Bound befindet.

    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. Erstellen Sie eine YAML-Konfigurationsdatei für eine Bereitstellung, die die von Ihnen erstellte PVC einbindet.

    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. Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. Nachdem Sie den Pod erstellt haben, melden Sie sich beim Pod an und erstellen eine Textdatei, die Sie für den Snapshot verwenden.

    oc exec -it POD_NAME /bin/bash
    

    Beispielausgabe

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

Snapshot erstellen

Konto 1

Nachdem Sie eine Bereitstellung und ein PVC erstellt haben, können Sie die Volume-Snapshot-Ressourcen erstellen.

Sie können Snapshots nur erstellen, wenn ein Volume an einen Pod angeschlossen ist.

  1. Erstellen Sie eine Volume-Snapshot-Ressource in Ihrem Cluster, indem Sie die ibmc-vpcblock-snapshot Snapshot-Klasse verwenden, die bei der Aktivierung des Add-ons bereitgestellt wird. Speichern Sie die folgende Volume-Snapshot-Konfiguration in einer Datei namens 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. Vergewissern Sie sich, dass der Snapshot einsatzbereit ist, und notieren Sie sich die SNAPSHOTCONTENT.

    oc get volumesnapshots
    

    Beispiel für eine Ausgabe, bei der READYTOUSE für true steht.

    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
    

Details zu Ihrem Schnappschuss abrufen

Konto 1

  1. Ermitteln Sie die Details Ihres volumesnapshotcontent mit Hilfe des SNAPSHOTCONTENT, das Sie im vorherigen Schritt gefunden haben.

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

    Beispielausgabe

    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. Notieren Sie sich in der Ausgabe die Snapshot Handle. In diesem Beispiel ist es crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.

Wiederherstellen des Schnappschusses in Konto 2

Konto 2

  1. Rufen Sie Ihren Red Hat OpenShift-Cluster auf.

  2. Erstellen Sie eine Ressource VolumeSnapshotContent. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen 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. Erstellen Sie die VolumeSnapshotContent in Ihrem Cluster.

    oc apply -f volsnapcontent.yaml
    

    Beispielausgabe

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. Erstellen Sie einen VolumeSnapshot. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen 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. Erstellen Sie die VolumeSnapshot in Ihrem Cluster.

    oc apply -f volsnap.yaml
    
  6. Erstellen Sie ein PVC. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen 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. Erstellen Sie die PVC in Ihrem Cluster.

    oc apply -f pvc2.yaml
    

Verteilen Sie Ihre Anwendung neu

Konto 2

  1. Kopieren Sie die folgende Beispielbereitstellung und speichern Sie sie in einer Datei mit dem Namen 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. Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.

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

Fahren Sie mit der Migration Ihrer Snapshots und Anwendungen auf Konto 2 fort

Konto 2

Wiederholen Sie diese Anleitung für alle weiteren Snapshots und Anwendungen, die Sie kontenübergreifend migrieren möchten.