IBM Cloud Docs
在IBM Cloud账户之间迁移Block Storage for VPC应用程序和数据

在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 ks 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

    kubectl 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
    
    kubectl create -f pvc.yaml
    
  5. 验证 PVC 是否已创建并处于 Bound 状态。

    kubectl 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. 为部署创建 YAML 配置文件,挂载您创建的 PVC。

    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
    
    kubectl create -f pod.yaml
    
  7. 验证 pod 是否在群集中运行。

    kubectl get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 现在您已经创建了 pod,请登录 pod 并创建一个用于快照的文本文件。

    kubectl 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
    

创建快照

账户 1

创建部署和 PVC 后,即可创建卷快照资源。

只有当卷连接到 pod 时,才能创建快照。

  1. 使用启用附加组件时部署的 ibmc-vpcblock-snapshot 快照类,在群集中创建卷快照资源。 将以下VolumeSnapshot配置保存到名为 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
    
    kubectl create -f snapvol.yaml
    
  2. 验证快照是否可以使用,并记下 SNAPSHOTCONTENT

    kubectl get volumesnapshots
    

    输出示例,其中 READYTOUSEtrue

    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. Get the details of your volumesnapshotcontent by using the SNAPSHOTCONTENT you found in the previous step.

    kubectl 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. 登录您的帐户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。

  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

    kubectl 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

    kubectl 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。

    kubectl 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
    
    kubectl create -f dep2.yaml
    
  2. 验证 pod 是否在群集中运行。

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

继续将快照和应用程序迁移到账户 2

账户 2

对要跨账户迁移的其他快照和应用程序重复本教程。