IBM Cloud 계정 간에 Block Storage for VPC 앱 및 데이터 마이그레이션하기

가상 프라이빗 클라우드

이 자습서에서는 한 계정의 IBM Cloud Kubernetes Service 클러스터에서 별도의 계정의 Red Hat OpenShift on IBM Cloud 클러스터로 Block Storage for VPC 앱 및 스냅샷 데이터를 마이그레이션합니다.

전제조건

계정 1

계정 1에는 다음이 필요합니다.

계정 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.

  1. 소스 계정 패널에서 특정 계정을 선택한 다음 계정 2의 계정 ID를 입력합니다.
  2. 서비스 패널에서 VPC 인프라 서비스를 선택합니다.
  3. In the 리소스 panel, select 특정 리소스, then select Block Storage Snapshots for VPC.
  4. 선택 사항 조건을 추가하여 특정 스냅샷 또는 특정 리소스 그룹으로 권한 부여 범위를 지정할 수도 있습니다.

계정 2

계정 2의 IAM 사용자 페이지에서 이 튜토리얼을 완료하는 사용자에게 스냅샷 원격 계정 복원 권한을 부여합니다.

  1. 스냅샷 원격 계정 복원 권한을 할당할 사용자를 선택합니다.
  2. 액세스 탭에서 액세스 권한 할당을 클릭합니다.
  3. 서비스 필드에서 VPC 인프라 서비스를 선택합니다.
  4. 리소스 필드에서 특정 리소스를 선택한 다음 리소스 유형 및 VPC용Block Storage 스냅샷을 선택합니다.
  5. 역할 및 작업에서 스냅샷 원격 계정 복원기를 선택합니다.
  6. 추가를 클릭한 다음 할당을 클릭하여 액세스 권한 할당을 완료합니다.

선택 사항입니다: 앱 배포

계정 1

마이그레이션할 앱이 아직 없는 경우 다음 예제 앱을 배포할 수 있습니다.

  1. 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  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. 클러스터에서 파드가 실행 중인지 확인합니다.

    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 파일에 저장합니다.

    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

계정 간에 마이그레이션하려는 추가 스냅샷 및 앱이 있으면 이 튜토리얼을 반복하세요.