在IBM Cloud帳戶之間遷移Block Storage for VPC應用程式和數據
虛擬私有雲
在本教學中,您將把一個帳戶中的Block Storage for VPC套用和快照資料從IBM Cloud Kubernetes Service叢集遷移到 { Red Hat OpenShift on IBM Cloud
必要條件
帳戶 1
在帳戶 1 中,您必須具有以下內容。
-
一個IBM Cloud Kubernetes Service集群。
-
使用Block Storage for VPC和應用資料快照的應用程式。 有關更多信息,請參閱 使用Block Storage for VPC集群插件設定快照。
帳戶 2
在帳戶 2(要移轉到的目標帳戶)中,您必須具有以下內容。
- 一個Red Hat OpenShift on IBM Cloud叢集。
取得您的帳戶 ID
帳戶 1 帳戶 2
對於每個帳戶,從帳戶設定頁面取得您的帳戶 ID。
設定您的權限
帳戶 1
在帳戶 1 中,從 IAM 授權頁面授予帳戶存取 VPC 區塊Block Storage快照的權限。
- 在 「來源帳戶」 面板中,選擇 「特定帳戶」,然後輸入 「帳戶 2」 的帳戶 ID。
- 在 「服務」 面板中,選擇 「VPC 基礎設施服務」。
- 在 「資源」 面板中,選擇 「特定資源」,然後選擇 「VPC 的Block Storage快照」。
- 可選您也可以透過新增條件將授權範圍限製到特定快照或特定資源群組。
帳戶 2
在帳戶 2 中,從 IAM 使用者頁面,向正在完成本教學的使用者授予快照遠端帳戶恢復者權限。
- 選擇要為其指派快照遠端帳戶恢復程式權限的使用者。
- 在存取索引標籤上,按一下指定存取。
- 在服務欄位中,選擇 VPC 基礎設施服務。
- 在資源欄位中,選擇特定資源,然後選擇資源類型和 VPC 的Block Storage快照。
- 在 「角色和動作」 中,選擇 「快照遠端帳戶復原程序」。
- 按一下「新增」, 然後按一下「指派」 以完成存取權限指派。
可選:部署應用程式
帳戶 1
如果您還沒有要遷移的應用程序,則可以部署以下範例應用程式。
-
驗證附加元件狀態為
normal且狀態為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) -
驗證驅動程式 Pod 是否已部署且狀態為
Running。oc get pods -n kube-system | grep vpc-block-csi輸出範例
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 -
建立 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 -
驗證 PVC 是否已建立並且處於
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 -
為安裝您建立的 PVC 的部署建立 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: csi-block-pvc # The name of the PVC you created earlieroc create -f pod.yaml -
驗證 Pod 是否在群集中執行。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
現在您已經建立了 Pod,登入 Pod 並建立用於快照的文字檔案。
oc exec -it POD_NAME /bin/bash輸出範例
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
帳戶 1
建立部署和 PVC 後,您可以建立磁碟區快照資源。
僅當磁碟區附加到 Pod 時才可以建立快照。
-
ibmc-vpcblock-snapshot使用啟用附加元件時部署的快照類別在叢集中建立磁碟區快照資源。 將下列磁碟區快照設定儲存至名為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-pvcoc create -f snapvol.yaml -
驗證快照是否可供使用並記下
SNAPSHOTCONTENT。oc get volumesnapshots範例輸出,其中
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
獲取快照的詳細信息
帳戶 1
-
使用您在上一步中找到的
SNAPSHOTCONTENT獲取volumesnapshotcontent的詳細資訊。oc describe volumesnapshotcontent snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b輸出範例
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> -
在輸出中,記下
Snapshot Handle。 在此範例中,它是crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5。
恢復帳戶2的快照
帳戶 2
-
建立
VolumeSnapshotContent資源。 將以下配置儲存為名為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 -
在群集中建立
VolumeSnapshotContent。oc apply -f volsnapcontent.yaml輸出範例
volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created -
創建一個
VolumeSnapshot. 將以下配置儲存為名為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. -
在群集中建立
VolumeSnapshot。oc apply -f volsnap.yaml -
建立 PVC。 將以下配置儲存為名為
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 -
在叢集裡建立 PVC。
oc apply -f pvc2.yaml
重新部署您的應用程式
帳戶 2
-
複製以下範例部署並將其儲存到名為
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 -
驗證 Pod 是否在群集中執行。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s
繼續將您的快照和應用程式遷移到帳戶 2
帳戶 2
對於您想要跨帳戶遷移的任何其他快照和應用程序,請重複本教程。