Block Storage for VPC 클러스터 추가 기능을 사용하여 스냅샷 설정

가상 프라이빗 클라우드

Block Storage for VPC 볼륨 스냅샷은 완전히 새로운 볼륨을 생성하지 않고도 특정 시점의 볼륨 내용을 복사하는 표준화된 방법을 제공합니다. 스냅샷에 대한 자세한 내용은 스냅샷 작동 방식을 참조하세요. Block Storage for VPC에 대한 자세한 정보는 Block Storage for VPC 정보를 참조하십시오.

기본적으로 Block Storage for VPC 클러스터 애드온은 클러스터가 배포된 동일한 VPC 리소스 그룹에 볼륨과 스냅샷을 생성합니다. 그러나 애드온 버전 5.2.46 이후부터는 VolumeSnapshotClassresourceGroup 매개 변수를 지정하여 다른 리소스 그룹에 스냅샷을 생성할 수 있습니다. 자세한 내용은 다른 리소스 그룹에서 스냅샷 만들기를 참조하세요.

앱 작성

예제 지속적 볼륨 청구 (PVC) 를 작성하고 해당 청구를 참조하는 팟 (Pod) 을 배치하십시오.

  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.2   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. 이제 팟 (Pod) 을 작성했으므로 팟 (Pod) 에 로그인하고 스냅샷에 사용할 텍스트 파일을 작성하십시오.

    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
    

볼륨 스냅샷 작성

배치 및 PVC를 작성한 후 볼륨 스냅샷 리소스를 작성할 수 있습니다.

볼륨이 파드에 연결된 경우에만 스냅샷을 만들 수 있습니다.

  1. IAM에서 스냅샷 운영자 공유 권한이 있는지 확인하세요.

  2. 추가 기능을 사용으로 설정할 때 배치되는 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
    
    oc create -f snapvol.yaml
    
  3. 스냅샷을 사용할 준비가 되었는지 확인하십시오.

    oc get volumesnapshots
    

    출력 예시 READYTOUSEtrue 입니다:

    NAME                       READYTOUSE   SOURCEPVC       SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS           SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    snapshot-csi-block-pvc     true         csi-block-pvc                           1Gi           ibmc-vpcblock-snapshot   snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b   18h            18h
    

다른 리소스 그룹에서 스냅샷 만들기

Block Storage for VPC 클러스터 애드온 버전 5.2.46 이후부터는 클러스터의 리소스 그룹과 다른 리소스 그룹에서 볼륨 스냅샷을 생성할 수 있습니다. 이 기능은 리소스 구성, 할당량 관리 및 액세스 제어를 더욱 유연하게 해줍니다.

  • 버전 요구 사항: 이 기능은 애드온 버전 5.2.46 이상에서만 지원됩니다.
  • 기본 동작입니다: resourceGroup 매개 변수를 지정하지 않거나 빈 문자열을 지정하면 클러스터의 리소스 그룹에 스냅샷이 만들어집니다.

전제조건

시작하기 전에 IAM에 다음 권한이 있는지 확인하세요:

  • VPC 인프라 서비스(is): 편집자 및 작성자
  • Kubernetes Service (컨테이너-쿠버네티스): 오퍼레이터
  • 리소스 그룹: 리소스 그룹: 스냅샷을 만들려는 각 리소스 그룹에 대한 뷰어입니다

사용자 지정 만들기 VolumeSnapshotClass

다른 리소스 그룹에서 스냅샷을 만들려면 대상 리소스 그룹 ID를 지정하는 사용자 지정 VolumeSnapshotClass 을 만들어야 합니다.

  1. 스냅샷을 만들려는 리소스 그룹 ID를 가져옵니다.

    ibmcloud resource groups
    
  2. VolumeSnapshotClass 구성 파일을 만듭니다. 다음 YAML을 vpc-snap-custom-rg.yaml 이라는 파일에 저장합니다. <RESOURCE_GROUP_ID> 을 대상 리소스 그룹 ID로 바꿉니다.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: vpc-snap-custom-rg
    driver: vpc.block.csi.ibm.io
    deletionPolicy: Delete
    parameters:
      resourceGroup: <RESOURCE_GROUP_ID>
    

    resourceGroup 매개 변수는 리소스 그룹 이름이 아닌 리소스 그룹 ID여야 합니다.

  3. 클러스터에 VolumeSnapshotClass 을 생성합니다.

    oc create -f vpc-snap-custom-rg.yaml
    
  4. VolumeSnapshotClass 이 생성되었는지 확인합니다.

    oc get volumesnapshotclass
    

사용자 지정 리소스 그룹으로 스냅샷 만들기

사용자 정의 VolumeSnapshotClass 를 만든 후에는 이를 참조하는 스냅샷을 만들 수 있습니다.

  1. 사용자 지정 스냅샷 클래스를 참조하는 VolumeSnapshot 구성 파일을 만듭니다. 다음 YAML을 snapshot-custom-rg.yaml 이라는 파일에 저장합니다.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-custom-rg
    spec:
      volumeSnapshotClassName: vpc-snap-custom-rg
      source:
        persistentVolumeClaimName: csi-block-pvc
    
  2. Snapshot을 작성하십시오.

    oc create -f snapshot-custom-rg.yaml
    
  3. 스냅샷을 사용할 준비가 되었는지 확인하십시오.

    oc get volumesnapshots
    
  4. IBM Cloud CLI를 사용하여 대상 리소스 그룹에 스냅샷이 생성되었는지 확인합니다.

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    ibmcloud is snapshots
    

볼륨 스냅샷에서 복원

스냅샷 자원을 배치한 후 스냅샷을 사용하여 데이터를 새 볼륨으로 복원할 수 있습니다. PVC를 작성하면 스냅샷 데이터를 사용하여 새 볼륨을 동적으로 프로비저닝합니다.

  1. 볼륨 스냅샷을 참조하는 두 번째 PVC를 작성하십시오.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      dataSource:
        name: snapshot-csi-block-pvc
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. PVC가 작성되고 Bound 상태인지 확인하십시오.

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    restore-pvc            Bound    pvc-4ede7630-5a49-4bae-b34d-dc528acfb884   10Gi       RWO            ibmc-vpc-block-5iops-tier   18h
    
  3. 생성한 PVC를 마운트하는 배포를 위한 두 번째 YAML 구성 파일을 만듭니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: podtwo
      labels:
        app: podtwo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: podtwo
      template:
        metadata:
          labels:
            app: podtwo
        spec:
          containers:
          - image: nginx # Your containerized app image
            name: container-name
            volumeMounts:
            - mountPath: /myvolumepath  # Mount path for pvc from container
              name: my-vol # Volume mount name
          volumes:
          - name: my-vol  # Volume resource name
            persistentVolumeClaim:
              claimName: restore-pvc   # The name of the PVC that you created earlier
    
    oc create -f podtwo.yaml
    
  4. 팟(Pod)이 작성되었는지 확인하십시오.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. 새로 작성된 팟 (Pod) 에 로그인하고 이전에 작성한 샘플 텍스트 파일이 새 팟 (Pod) 에 저장되었는지 확인하십시오.

    oc exec -it POD_NAME /bin/bash
    root@POD_NAME :/# cd myvolumepath/
    root@POD_NAME :/myvolumepath# ls
    lost+found  new.txt
    root@POD_NAME :/myvolumepath# cat new.txt
    

    출력 예

    hi
    

스냅샷 끄기

기본적으로 스냅샷 기능은 Block Storage for VPC를 사용할 때 사용으로 설정됩니다. IsSnapshotEnabledfalse 로 변경하여 kube-system 네임스페이스의 configmap addon-vpc-block-csi-driver-configmap 에서 이 기능을 끌 수 있습니다. configmap에서 이와 같이 변경하면 작성되는 모든 스냅샷이 실패하고 다음 메시지가 표시됩니다.CreateSnapshot functionality is disabled.

  1. 클러스터의 현재 configmap을 로컬 시스템에 저장하십시오.

    oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IsSnapshotEnabled 매개변수를 false 로 편집하십시오.

  3. 파일을 저장하고 변경 사항을 적용합니다.

    oc apply -f snapshotconfigmap.yaml
    

다음 단계

스냅샷 유효성 검증 웹훅을 배치하여 사용자 입력을 유효성 검증하십시오. 자세한 정보는 스냅샷 유효성 검증 웹훅 배치를 참조하십시오.

스냅샷 문제점 해결

다음 문제 해결 주제를 검토하세요.