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.
-
Ein IBM Cloud Kubernetes Service.
-
Eine App, die Block Storage for VPC und einen Snapshot Ihrer App-Daten verwendet. Weitere Informationen finden Sie unter Einrichten von Snapshots mit dem Cluster-Add-on Block Storage for VPC.
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.
- Wählen Sie im Feld Quellkonto die Option Bestimmtes Konto und geben Sie dann die Konto-ID von Konto 2 ein.
- Wählen Sie im Bereich Dienst die Option VPC-Infrastrukturdienste.
- Wählen Sie im Bereich Ressourcen die Option Spezifische Ressourcen und dann Block Storage für VPC aus.
- 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.
- Wählen Sie den Benutzer aus, dem Sie die Berechtigungen für den Snapshot Remote Account Restorer zuweisen möchten.
- Klicken Sie auf der Registerkarte Zugriff auf Zugriff zuweisen.
- Wählen Sie im Feld Dienst die Option VPC-Infrastrukturdienste.
- Wählen Sie im Feld Ressourcen die Option Spezifische Ressourcen, dann den Ressourcentyp und Block Storage für VPC.
- Wählen Sie in der Liste Rollen und Aktionen die Option Snapshot Remote Account Restorer.
- 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.
-
Vergewissern Sie sich, dass der Status des Add-ons
normalund der StatusReadyist.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) -
Überprüfen Sie, dass die Treiber-Pods bereitgestellt sind und ihr Status
Running(aktiv) lautet.oc get pods -n kube-system | grep vpc-block-csiBeispielausgabe
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 -
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-tieroc create -f pvc.yaml -
Überprüfen Sie, ob der PVC erstellt wurde und sich im Zustand
Boundbefindet.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 -
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 earlieroc create -f pod.yaml -
Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
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/bashBeispielausgabe
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.
-
Erstellen Sie eine Volume-Snapshot-Ressource in Ihrem Cluster, indem Sie die
ibmc-vpcblock-snapshotSnapshot-Klasse verwenden, die bei der Aktivierung des Add-ons bereitgestellt wird. Speichern Sie die folgende Volume-Snapshot-Konfiguration in einer Datei namenssnapvol.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 -
Vergewissern Sie sich, dass der Snapshot einsatzbereit ist, und notieren Sie sich die
SNAPSHOTCONTENT.oc get volumesnapshotsBeispiel für eine Ausgabe, bei der
READYTOUSEfürtruesteht.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
-
Ermitteln Sie die Details Ihres
volumesnapshotcontentmit Hilfe desSNAPSHOTCONTENT, das Sie im vorherigen Schritt gefunden haben.oc describe volumesnapshotcontent snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12bBeispielausgabe
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> -
Notieren Sie sich in der Ausgabe die
Snapshot Handle. In diesem Beispiel ist escrn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5.
Wiederherstellen des Schnappschusses in Konto 2
Konto 2
-
Erstellen Sie eine Ressource
VolumeSnapshotContent. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namenvolsnapcontent.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 -
Erstellen Sie die
VolumeSnapshotContentin Ihrem Cluster.oc apply -f volsnapcontent.yamlBeispielausgabe
volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created -
Erstellen Sie einen
VolumeSnapshot. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namenvolsnap.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. -
Erstellen Sie die
VolumeSnapshotin Ihrem Cluster.oc apply -f volsnap.yaml -
Erstellen Sie ein PVC. Speichern Sie die folgende Konfiguration in einer Datei mit dem Namen
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 -
Erstellen Sie die PVC in Ihrem Cluster.
oc apply -f pvc2.yaml
Verteilen Sie Ihre Anwendung neu
Konto 2
-
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 earlieroc create -f dep2.yaml -
Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.
oc get podsNAME 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.