在IBM Cloud帳戶之間遷移Block Storage for VPC應用程式和數據

虛擬私有雲

在本教學中,您將把一個帳戶中的Block Storage for VPC套用和快照資料從IBM Cloud Kubernetes Service叢集遷移到 { Red Hat OpenShift on IBM Cloud

必要條件

帳戶 1

在帳戶 1 中,您必須具有以下內容。

帳戶 2

在帳戶 2(要移轉到的目標帳戶)中,您必須具有以下內容。

  • 一個Red Hat OpenShift on IBM Cloud叢集。

取得您的帳戶 ID

帳戶 1 帳戶 2

對於每個帳戶,從帳戶設定頁面取得您的帳戶 ID。

設定您的權限

帳戶 1

在帳戶 1 中,從 IAM 授權頁面授予帳戶存取 VPC 區塊Block Storage快照的權限。

  1. 在 「來源帳戶」 面板中,選擇 「特定帳戶」,然後輸入 「帳戶 2」 的帳戶 ID。
  2. 在 「服務」 面板中,選擇 「VPC 基礎設施服務」。
  3. 在 「資源」 面板中,選擇 「特定資源」,然後選擇 「VPC 的Block Storage快照」。
  4. 可選您也可以透過新增條件將授權範圍限製到特定快照或特定資源群組。

帳戶 2

在帳戶 2 中,從 IAM 使用者頁面,向正在完成本教學的使用者授予快照遠端帳戶恢復者權限。

  1. 選擇要為其指派快照遠端帳戶恢復程式權限的使用者。
  2. 在存取索引標籤上,按一下指定存取。
  3. 在服務欄位中,選擇 VPC 基礎設施服務。
  4. 在資源欄位中,選擇特定資源,然後選擇資源類型和 VPC 的Block Storage快照。
  5. 在 「角色和動作」 中,選擇 「快照遠端帳戶復原程序」。
  6. 按一下「新增」, 然後按一下「指派」 以完成存取權限指派。

可選:部署應用程式

帳戶 1

如果您還沒有要遷移的應用程序,則可以部署以下範例應用程式。

  1. 登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

  2. 驗證附加元件狀態為 normal 且狀態為 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. 驗證驅動程式 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
    
  4. 建立 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. 驗證 PVC 是否已建立並且處於 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. 為安裝您建立的 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 earlier
    
    oc create -f pod.yaml
    
  7. 驗證 Pod 是否在群集中執行。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 現在您已經建立了 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 時才可以建立快照。

  1. 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-pvc
    
    oc create -f snapvol.yaml
    
  2. 驗證快照是否可供使用並記下 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

  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>
    
  2. 在輸出中,記下 Snapshot Handle。 在此範例中,它是 crn:v1:staging:public:is:us-south:a/1152aa1c1ec54274ac42b8ad8507c90c::snapshot:r134-12f0bdb5-21e6-4e6b-8b5c-ce9a1b378ec5。

恢復帳戶2的快照

帳戶 2

  1. 存取您的Red Hat OpenShift叢集。

  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
    
  3. 在群集中建立 VolumeSnapshotContent。

    oc apply -f volsnapcontent.yaml
    

    輸出範例

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. 創建一個 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.
    
  5. 在群集中建立 VolumeSnapshot。

    oc apply -f volsnap.yaml
    
  6. 建立 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
    
  7. 在叢集裡建立 PVC。

    oc apply -f pvc2.yaml
    

重新部署您的應用程式

帳戶 2

  1. 複製以下範例部署並將其儲存到名為 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. 驗證 Pod 是否在群集中執行。

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

繼續將您的快照和應用程式遷移到帳戶 2

帳戶 2

對於您想要跨帳戶遷移的任何其他快照和應用程序,請重複本教程。