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 へのアクセス権を与えます。
- **ソース・アカウント・**パネルで、Specific account を選択し、Account 2 のアカウントIDを入力する。
- **サービス]**パネルで[ VPCインフラストラクチャサービス]を選択します。
- **Resources]**パネルで[ Specific resources ]を選択し、[ Block StorageSnapshots for VPC ]を選択します。
- オプション条件を追加することで、特定のスナップショットまたは特定のリソースグループに権限をスコープすることもできます。
アカウント 2
アカウント2で、IAM Usersページから、このチュートリアルを完了するユーザに Snapshot Remote Account Restorer 権限を与えます。
- Snapshot Remote Account Restorer 権限を割り当てるユーザーを選択します。
- アクセス]タブで、[ アクセスの割り当て] をクリックします。
- **Service]**フィールドで[ **VPC Infrastructure Services]**を選択します。
- **Resources]**フィールドで[ Specific resources ]を選択し、[ Resource type ]と[ Block StorageSnapshots for VPC ]を選択します。
- Roles and actions(役割とアクション)で、Snapshot Remote Account Restorer を選択します。
- Add(追加)]、[Assign(割り当て)]の順にクリックして、アクセス権の割り当てを完了します。
オプションアプリをデプロイする
アカウント 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) -
ドライバー・ポッドがデプロイされ、状況が
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 -
クラスタ内でポッドが動作していることを確認します。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s -
ポッドを作成したら、ポッドにログインしてスナップショットに使用するテキストファイルを作成します。
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を作成したら、ボリューム スナップショット リソースを作成できます。
スナップショットを作成できるのは、ボリュームがポッドにアタッチされているときだけです。
-
アドオンを有効にしたときにデプロイされる
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 volumesnapshotsREADYTOUSEtrueである場合の出力例。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.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 earlieroc create -f dep2.yaml -
クラスタ内でポッドが動作していることを確認します。
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s
スナップショットとアプリのアカウント2への移行を続ける
アカウント 2
アカウント間で移行したいスナップショットやアプリを追加する場合は、このチュートリアルを繰り返します。