IBM Cloud 계정 간에 Block Storage for VPC 앱 및 데이터 마이그레이션하기
가상 프라이빗 클라우드
이 자습서에서는 한 계정의 IBM Cloud Kubernetes Service 클러스터에서 별도의 계정의 Red Hat OpenShift on IBM Cloud 클러스터로 Block Storage for VPC 앱 및 스냅샷 데이터를 마이그레이션합니다.
전제조건
계정 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
In Account 1, from the IAM 권한 부여 페이지 give account to access to Block Storage Snapshots for VPC.
- 소스 계정 패널에서 특정 계정을 선택한 다음 계정 2의 계정 ID를 입력합니다.
- 서비스 패널에서 VPC 인프라 서비스를 선택합니다.
- In the 리소스 panel, select 특정 리소스, then select Block Storage Snapshots for VPC.
- 선택 사항 조건을 추가하여 특정 스냅샷 또는 특정 리소스 그룹으로 권한 부여 범위를 지정할 수도 있습니다.
계정 2
계정 2의 IAM 사용자 페이지에서 이 튜토리얼을 완료하는 사용자에게 스냅샷 원격 계정 복원 권한을 부여합니다.
- 스냅샷 원격 계정 복원 권한을 할당할 사용자를 선택합니다.
- 액세스 탭에서 액세스 권한 할당을 클릭합니다.
- 서비스 필드에서 VPC 인프라 서비스를 선택합니다.
- 리소스 필드에서 특정 리소스를 선택한 다음 리소스 유형 및 VPC용Block Storage 스냅샷을 선택합니다.
- 역할 및 작업에서 스냅샷 원격 계정 복원기를 선택합니다.
- 추가를 클릭한 다음 할당을 클릭하여 액세스 권한 할당을 완료합니다.
선택 사항입니다: 앱 배포
계정 1
마이그레이션할 앱이 아직 없는 경우 다음 예제 앱을 배포할 수 있습니다.
-
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
추가 기능 상태가
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 -
클러스터에서 파드가 실행 중인지 확인합니다.
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 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
-
이전 단계에서 찾은
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 -
클러스터에서 파드가 실행 중인지 확인합니다.
oc get podsNAME READY STATUS RESTARTS AGE my-deployment-58dd7c89b6-8zdcl 1/1 Running 0 4m50s
스냅샷과 앱을 계정 2로 계속 마이그레이션하세요
계정 2
계정 간에 마이그레이션하려는 추가 스냅샷 및 앱이 있으면 이 튜토리얼을 반복하세요.