Azure 컨테이너 스토리지에서 볼륨 스냅샷 사용

Azure Container Storage는 기본적으로 컨테이너용으로 구축된 클라우드 기반 볼륨 관리, 배포 및 오케스트레이션 서비스입니다. 이 문서에서는 영구 볼륨의 특정 시점 스냅샷을 만들어 새 영구 볼륨 클레임으로 복원하는 방법을 보여줍니다.

필수 조건

  • 이 문서에는 Azure CLI의 최신 버전(2.35.0 이상)이 필요합니다. Azure CLI를 설치하는 방법을 참조하세요. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다. Azure Cloud Shell 대신 로컬로 명령을 실행하려는 경우 관리자 권한으로 명령을 실행해야 합니다.
  • 클러스터 노드에 대해 각각 최소 4개의 vCPU(가상 CPU)가 있는 3개 이상의 VM(가상 머신)의 노드 풀이 있는 AKS(Azure Kubernetes Service) 클러스터가 필요합니다.
  • 이 문서에서는 AKS 클러스터에 Azure 컨테이너 스토리지를 이미 설치했으며 Azure 디스크 또는 임시 디스크(로컬 스토리지)를 사용하여 스토리지 풀 및 PVC(영구 볼륨 클레임)를 만들었다고 가정합니다. Elastic SAN을 백업 스토리지로 사용하는 경우 현재 볼륨 스냅샷은 지원되지 않습니다.

볼륨 스냅샷 클래스 만들기

먼저 볼륨 스냅샷 클래스를 만듭니다. 이를 통해 YAML 매니페스트 파일에서 볼륨 스냅샷 특성을 정의하여 지정할 수 있습니다. 다음 단계에 따라 Azure 디스크에 대한 볼륨 스냅샷 클래스를 만듭니다.

  1. 즐겨찾는 텍스트 편집기를 사용하여 code acstor-volumesnapshotclass.yaml과 같은 YAML 매니페스트 파일을 만듭니다.

  2. 다음 코드를 붙여넣습니다. 볼륨 스냅샷 클래스 이름 값은 원하는 대로 지정할 수 있습니다.

    yml
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: csi-acstor-vsc
    driver: containerstorage.csi.azure.com
    deletionPolicy: Delete
    parameters:
      incremental: "true"  # available values: "true", "false" ("true" by default for Azure Public Cloud, and "false" by default for Azure Stack Cloud)
    
  3. YAML 매니페스트 파일을 적용하여 볼륨 스냅샷 클래스를 만듭니다.

    Azure CLI
    kubectl apply -f acstor-volumesnapshotclass.yaml
    

    만들기가 완료되면 다음과 같은 메시지가 표시됩니다.

    출력
    volumesnapshotclass.snapshot.storage.k8s.io/csi-acstor-vsc created
    

    kubectl get volumesnapshotclass을(를) 실행하여 볼륨 스냅샷 클래스가 만들어졌는지 확인할 수도 있습니다. 다음과 같은 출력이 표시됩니다.

    출력
    NAME            DRIVER                            DELETIONPOLICY    AGE
    csi-acstor-vsc	 containerstorage.csi.azure.com	   Delete	           11s
    

볼륨 스냅샷 만들기

다음으로 기존 영구 볼륨 클레임의 스냅샷을 만들고 이전 단계에서 만든 볼륨 스냅샷 클래스를 적용합니다.

  1. 즐겨찾는 텍스트 편집기를 사용하여 code acstor-volumesnapshot.yaml과 같은 YAML 매니페스트 파일을 만듭니다.

  2. 다음 코드를 붙여넣습니다. volumeSnapshotClassName은(는) 이전 단계에서 만든 볼륨 스냅샷 클래스 이름이어야 합니다. persistentVolumeClaimName의 경우 스냅샷을 만들려는 영구 볼륨 클레임의 이름을 사용합니다. 볼륨 스냅샷 이름 값은 원하는 대로 지정할 수 있습니다.

    yml
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: azuredisk-volume-snapshot
    spec:
      volumeSnapshotClassName: csi-acstor-vsc
      source:
        persistentVolumeClaimName: azurediskpvc
    
  3. YAML 매니페스트 파일을 적용하여 볼륨 스냅샷을 만듭니다.

    Azure CLI
    kubectl apply -f acstor-volumesnapshot.yaml
    

    만들기가 완료되면 다음과 같은 메시지가 표시됩니다.

    출력
    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    

    kubectl get volumesnapshot을(를) 실행하여 볼륨 스냅샷이 만들어졌는지 확인할 수도 있습니다. READYTOUSE에서 true를 반환하면 다음 단계로 이동할 수 있습니다.

복원된 영구 볼륨 클레임 만들기

이제 볼륨 스냅샷을 데이터 원본으로 사용하는 새 영구 볼륨 클레임을 만들 수 있습니다.

  1. 즐겨찾는 텍스트 편집기를 사용하여 code acstor-pvc-restored.yaml과 같은 YAML 매니페스트 파일을 만듭니다.

  2. 다음 코드를 붙여넣습니다. storageClassName은(는) 원래 영구 볼륨을 만들 때 사용한 스토리지 클래스와 일치해야 합니다. 예를 들어 백 엔드 스토리지에 Azure 디스크 대신 임시 디스크(로컬 NVMe)를 사용했다면 storageClassName을(를) acstor-ephemeraldisk(으)로 변경합니다. 데이터 원본 이름 값의 경우 이전 단계에서 만든 볼륨 스냅샷 이름을 사용합니다. 영구 볼륨 클레임의 메타데이터 이름 값은 원하는 대로 지정할 수 있습니다.

    yml
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk-snapshot-restored
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk
      resources:
        requests:
          storage: 100Gi
      dataSource:
        name: azuredisk-volume-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
    
  3. YAML 매니페스트 파일을 적용하여 PVC를 만듭니다.

    Azure CLI
    kubectl apply -f acstor-pvc-restored.yaml
    

    만들기가 완료되면 다음과 같은 메시지가 표시됩니다.

    출력
    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    

    kubectl describe pvc pvc-azuredisk-snapshot-restored을(를) 실행하여 영구 볼륨이 만들어졌는지 확인할 수도 있습니다. 보류 중 상태와 바인딩하기 전에 첫 고객이 생성되길 기다리는 중 메시지가 표시되어야 합니다.

복원된 영구 볼륨 클레임을 이미 만들었고, yaml 파일을 다시 적용하여 오류를 수정하거나 변경하려는 경우 yaml 파일을 다시 적용하기 전에 먼저 이전 영구 볼륨 클레임을 삭제해야 합니다. kubectl delete pvc <pvc-name>.

원래 Pod 삭제(선택 사항)

새 Pod를 만들기 전에 스냅샷을 만든 원래 Pod를 삭제하고 싶을 수 있습니다.

  1. kubectl get pods을(를) 실행하여 Pod를 나열합니다. 올바른 Pod를 삭제하고 있는지 확인합니다.
  2. Pod를 삭제하려면 kubectl delete pod <pod-name>을(를) 실행합니다.

복원된 스냅샷을 사용하여 새 Pod 만들기

다음으로 복원된 영구 볼륨 클레임을 사용하여 새 Pod를 만듭니다. 벤치마킹 및 워크로드 시뮬레이션에 Fio(유연한 I/O 테스터)를 사용하여 Pod를 만들고 영구 볼륨에 대한 탑재 경로를 지정합니다.

  1. 즐겨찾는 텍스트 편집기를 사용하여 code acstor-pod2.yaml과 같은 YAML 매니페스트 파일을 만듭니다.

  2. 다음 코드를 붙여넣습니다. claimName 영구 볼륨 클레임은 사용자가 만든 복원된 스냅샷 영구 볼륨 클레임의 이름이어야 합니다. Pod의 메타데이터 이름 값은 원하는 대로 지정할 수 있습니다.

    yml
    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod2
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: diskpv
          persistentVolumeClaim:
            claimName: pvc-azuredisk-snapshot-restored
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: diskpv
    
  3. YAML 매니페스트 파일을 적용하여 Pod를 배포합니다.

    Azure CLI
    kubectl apply -f acstor-pod2.yaml
    

    다음과 비슷한 결과가 나타나야 합니다.

    출력
    pod/fiopod2 created
    
  4. Pod가 실행 중이고 영구 볼륨 클레임이 Pod에 성공적으로 바인딩되었는지 확인합니다.

    Azure CLI
    kubectl describe pod fiopod2
    kubectl describe pvc pvc-azuredisk-snapshot-restored
    
  5. fio 테스트를 확인하여 현재 상태를 알아봅니다.

    Azure CLI
    kubectl exec -it fiopod2 -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

이제 복원된 영구 볼륨 클레임에서 새 Pod를 배포했으니 Kubernetes 워크로드에 사용할 수 있습니다.

참고 항목