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. **ソース・アカウント・**パネルで、Specific account を選択し、Account 2 のアカウントIDを入力する。
  2. **サービス]**パネルで[ VPCインフラストラクチャサービス]を選択します。
  3. **Resources]**パネルで[ Specific resources ]を選択し、[ Block StorageSnapshots for VPC ]を選択します。
  4. オプション条件を追加することで、特定のスナップショットまたは特定のリソースグループに権限をスコープすることもできます。

アカウント 2

アカウント2で、IAM Usersページから、このチュートリアルを完了するユーザに Snapshot Remote Account Restorer 権限を与えます。

  1. Snapshot Remote Account Restorer 権限を割り当てるユーザーを選択します。
  2. アクセス]タブで、[ アクセスの割り当て] をクリックします。
  3. **Service]**フィールドで[ **VPC Infrastructure Services]**を選択します。
  4. **Resources]**フィールドで[ Specific resources ]を選択し、[ Resource type ]と[ Block StorageSnapshots for VPC ]を選択します。
  5. Roles and actions(役割とアクション)で、Snapshot Remote Account Restorer を選択します。
  6. Add(追加)]、[Assign(割り当て)]の順にクリックして、アクセス権の割り当てを完了します。

オプションアプリをデプロイする

アカウント 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. ドライバー・ポッドがデプロイされ、状況が 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. クラスタ内でポッドが動作していることを確認します。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. ポッドを作成したら、ポッドにログインしてスナップショットに使用するテキストファイルを作成します。

    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
    

スナップショットを作成します

アカウント 1

配置とPVCを作成したら、ボリューム スナップショット リソースを作成できます。

スナップショットを作成できるのは、ボリュームがポッドにアタッチされているときだけです。

  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.Deploymentという名前のファイルに保存してください。

    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. クラスタ内でポッドが動作していることを確認します。

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

スナップショットとアプリのアカウント2への移行を続ける

アカウント 2

アカウント間で移行したいスナップショットやアプリを追加する場合は、このチュートリアルを繰り返します。