스냅샷 설정 File Storage for VPC

가상 프라이빗 클라우드

File Storage for VPC 볼륨 스냅샷은 완전히 새로운 볼륨을 생성하지 않고도 특정 시점의 볼륨 내용을 복사하는 표준화된 방법을 제공합니다. 스냅샷은 zonal( dp2 ) 기반 및 지역(rfs) 기반 스토리지 클래스 모두에서 지원됩니다. 스냅샷에 대한 자세한 내용은 스냅샷 작동 방식에서 확인하세요.

File Storage for VPC에 대한 자세한 정보는 File Storage for VPC 정보를 참조하십시오.

애드온의 File Storage for VPC 스냅샷 지원은 현재 베타 단계입니다.

PVC(파일 공유)가 삭제되면, 해당 파일 공유가 소유한 모든 스냅샷이 삭제됩니다. 이 경우 CSI 볼륨 스냅샷은 유지되지만, VPC의 백엔드 스냅샷은 존재하지 않습니다. 따라서 볼륨은 를 사용하여 삭제해야 oc delete vs <snapshot-name> 합니다.

전제조건

  • 클러스터에 File Storage for VPC 애드온이 설치되어 있는지 확인합니다.
  • 스냅샷 연산자 공유 iAM의 권한 이 있는지 확인합니다.

앱 작성

예시용 지속적 볼륨 클레임(PVC)을 생성하고 해당 클레임을 참조하는 포드를 배포하십시오.

  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-file-csi-driver     2.0                         normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
    
  3. 드라이버 팟(Pod)이 배치되었고 상태가 Running인지 확인하십시오.

    oc get pods -n kube-system | grep vpc-file-csi
    

    출력 예

    ibm-vpc-file-csi-controller-s34sw                    7/7     Running   0          77s
    ibm-vpc-file-csi-controller-7hdhd                    7/7     Running   0          77s
    ibm-vpc-file-csi-node-56c85                          4/4     Running   0          77s
    ibm-vpc-file-csi-node-87j2t                          4/4     Running   0          77s
    ibm-vpc-file-csi-node-cmh2h                          4/4     Running   0          77s
    
  4. PVC를 생성하십시오.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-file-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-file-min-iops
    
    oc create -f pvc.yaml
    
  5. PVC가 생성되었으며 활성 Bound 상태인지 확인하십시오.

    oc get pvc
    
    NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS             VOLUMEATTRIBUTESCLASS   AGE
    csi-file-pvc   Bound    pvc-9873bd7e-41a8-4234-a9bf-271b8ca7e4f9   10Gi       RWM          ibmc-vpc-file-min-iops   <unset>                 5
    
  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-file-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
    

볼륨 스냅샷 생성

배포와 PVC를 생성한 후 볼륨 스냅샷을 생성할 수 있습니다.

  1. 스냅샷 연산자 공유 iAM의 권한 이 있는지 확인합니다.

  2. 애드온을 활성화할 때 배포된 snapshot ibmc-vpcfile-snapshot-delete 클래스를 사용하여 클러스터에 볼륨 스냅샷을 생성하십시오. 다음 VolumeSnapshot 구성을 snapvol.yaml 이라는 파일에 저장합니다.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-csi-file-pvc
    spec:
      volumeSnapshotClassName: ibmc-vpcfile-snapshot-delete
      source:
        persistentVolumeClaimName: csi-file-pvc
    
    oc create -f snapvol.yaml
    
  3. 스냅샷이 사용 준비가 되었는지 확인하십시오.

    oc get volumesnapshots
    

    예시 출력에서 는 READYTOUSE 입니다 true.

    NAME                            READYTOUSE   SOURCEPVC              SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    ibmc-vpcfile-snapshot-delete   true         csi-file-pvc                           10Gi           ibmc-vpcfile-snapshot-delete   snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b   18h            18h
    

볼륨 스냅샷에서 복원

볼륨 스냅샷을 배포한 후에는 해당 스냅샷을 사용하여 새 볼륨으로 데이터를 복원할 수 있습니다. PVC 생성 시 스냅샷 데이터를 포함하는 새 볼륨이 동적으로 프로비저닝됩니다.

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-pvc
    spec:
      storageClassName: ibmc-vpc-file-min-iops
      dataSource:
        name: snapshot-csi-file-pvc
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
    
  2. PVC가 생성되었으며 활성 Bound 상태인지 확인하십시오.

    oc get pvc
    
    NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS             VOLUMEATTRIBUTESCLASS   AGE
    csi-file-pvc   Bound    pvc-9873bd7e-41a8-4234-a9bf-271b8ca7e4f9   10Gi       RWM            ibmc-vpc-file-min-iops   <unset>                 9m16s
    restore-pvc    Bound    pvc-04dc8d6c-ac75-48b1-989d-ed67deb35911   10Gi       RWM            ibmc-vpc-file-min-iops   <unset>                 116s
    
  3. 생성한 PVC를 마운트하는 배포를 위한 두 번째 YAML 구성 파일을 만듭니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: restore-pod
      labels:
        app: restore-pod
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: restore-pod
      template:
        metadata:
          labels:
            app: restore-pod
        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 restore-pod.yaml
    
  4. 팟(Pod)이 작성되었는지 확인하십시오.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    restore-pod-1                      1/1     Running   0          30m
    pod-2                     1/1     Running   0          46h
    
  5. 새로 생성된 포드에 로그인하고, 이전에 생성한 샘플 텍스트 파일이 새 포드에 저장되었는지 확인하십시오.

    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
    

정적 스냅샷 복원

정적 스냅샷을 복원하려면 다음 단계를 완료하십시오.

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

  2. 스냅샷 CRN을 사용하여

    ibmcloud is share-snapshot <share-id> <share-snapshot-id> | grep CRN
    

    출력 예

    CRN  crn:v1:staging:public:is:us-south-3:a/77f2bceddaeb577dcaddb4073fe82c1c::share-snapshot:r134-1b3af00c-7a07-4ba7-b005-f6723c5b5e98/r134-164521b1-f5c1-4968-9605-a7aaa7e6cd2f
    
  3. VolumeSnapshotContent 리소스를 만듭니다. 다음 구성을. volsnapcontent.yaml 라는 파일로 저장하십시오.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: static-file-snapshot-cnt
    spec:
      volumeSnapshotClassName: ibmc-vpcfile-snapshot-retain
      deletionPolicy: Retain
      driver: vpc.file.csi.ibm.io
      source:
        snapshotHandle: crn:v1:staging:public:is:us-south-3:a/77f2bceddaeb577dcaddb4073fe82c1c::share-snapshot:r134-1b3af00c-7a07-4ba7-b005-f6723c5b5e98/r134-164521b1-f5c1-4968-9605-a7aaa7e6cd2f  # 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: static-file-snapshot
        namespace: default
    
    oc apply -f volsnapcontent.yaml
    

    출력 예

    volumesnapshot.snapshot.storage.k8s.io/crossaccount-snapshot created
    
  4. 생성하십시오. VolumeSnapshot 다음 구성을. volsnap.yaml 라는 파일로 저장하십시오.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: static-file-snapshot
      namespace: default
    spec:
      volumeSnapshotClassName: ibmc-vpcfile-snapshot-retain
      source:
        volumeSnapshotContentName: static-file-snapshot-cnt # Enter the name of the VolumeSnapshotContent that you created in the previous step.
    
    oc apply -f volsnap.yaml
    
  5. PVC를 생성하십시오. 다음 구성을. pvc2.yaml 라는 파일로 저장하십시오.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-static-pvc
    spec:
      storageClassName: ibmc-vpc-file-min-iops
      dataSource:
        name: static-file-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
    
    oc apply -f pvc2.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-static-pvc  # The name of the PVC you created earlier
    
    oc create -f dep2.yaml
    
  6. 클러스터에서 파드가 실행 중인지 확인합니다.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s
    
  7. 새로 생성된 포드에 로그인하고, 이전에 생성한 샘플 텍스트 파일이 새 포드에 저장되었는지 확인하십시오.

    root@my-deployment-static-768f64ffcf-h6qft:/# cd myvolumepath/
    root@my-deployment-static-768f64ffcf-h6qft:/myvolumepath# ls
    new.txt
    root@my-deployment-static-768f64ffcf-h6qft:/myvolumepath# cat new.txt
    hi
    

스냅샷 끄기

기본적으로, 스냅샷 기능은 사용 시 File Storage for VPC 활성화됩니다. 이 기능은 kube-system 네임스페이스 내의 addon-vpc-file-csi-driver-configmap configmap에서 ``를 IsSnapshotEnabled false로 변경하여 비활성화할 수 있습니다. 이 구성맵 변경으로 인해 생성되는 모든 스냅샷은 다음 메시지와 함께 CreateSnapshot functionality is disabled 실패합니다:

  1. 클러스터의 현재 구성맵을 로컬 머신에 저장하십시오.

    oc get cm -n kube-system addon-vpc-file-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IS_SNAPSHOT_ENABLED 매개 변수를 false 으로 편집합니다.

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

    oc apply -f snapshotconfigmap.yaml