Share via


Azure Blob Storage CSI(Container Storage Interface) 드라이버 사용

Azure Blob Storage CSI(Container Storage Interface) 드라이버는 AKS(Azure Kubernetes Service)에서 Azure Blob Storage의 수명 주기를 관리하는 데 사용하는 CSI 사양 호환 드라이버입니다. CSI는 임의 블록과 파일 스토리지 시스템을 Kubernetes의 컨테이너화된 워크로드에 공개하는 표준입니다.

CSI를 채택하고 사용하면 이제 AKS는 플러그 인을 작성, 배포 및 반복하여 Kubernetes에서 새로운 스토리지 시스템을 공개하거나 기존 스토리지 시스템을 개선할 수 있습니다. AKS에서 CSI 드라이버를 사용하면 핵심 Kubernetes 코드를 조정하고 릴리스 주기를 기다릴 필요가 없습니다.

Azure Blob Storage를 파일 시스템으로 컨테이너 또는 Pod에 탑재하면 대량의 비구조적 데이터를 작업하는 여러 애플리케이션에서 Blob Storage를 사용할 수 있습니다. 예시:

  • 로그 파일 데이터
  • 이미지, 문서 및 스트리밍 동영상 또는 오디오
  • 재해 복구 데이터

개체 스토리지의 데이터는 BlobFuse 또는 NFS(네트워크 파일 시스템) 3.0 프로토콜을 사용하는 애플리케이션에서 액세스할 수 있습니다. Azure Blob Storage CSI 드라이버가 도입되기 전에는 지원되지 않는 드라이버를 수동으로 설치하여 AKS에서 실행되는 애플리케이션에서 Blob Storage에 액세스하는 방법밖에 없었습니다. AKS에서 Azure Blob Storage CSI 드라이버를 사용하도록 설정하면 azureblob-fuse-premiumazureblob-nfs-premium라는 두 가지 기본 제공 스토리지 클래스가 있습니다.

CSI 드라이버를 지원하는 AKS 클러스터를 만들려면 AKS의 CSI 드라이버를 참조하세요. NFS 프로토콜을 사용하는 각 Azure Storage 형식 간의 액세스 차이점에 대해 자세히 알아보려면 NFS를 사용하여 Azure Files, Blob Storage 및 Azure NetApp Files에 대한 액세스 비교를 참조하세요.

Azure Blob Storage CSI 드라이버 기능

Azure Blob Storage CSI 드라이버는 다음 기능을 지원합니다.

  • BlobFuse 및 NFS(네트워크 파일 시스템) 버전 3.0 프로토콜

시작하기 전에

  • Azure CLI 2.42 이상 버전을 설치하고 구성해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

  • 클러스터에서 Azure Blob Storage에 액세스하기 위해 이전에 CSI Blob Storage 오픈 소스 드라이버를 설치한 경우 이 링크의 단계를 수행합니다.

참고 항목

오픈 소스 드라이버를 설치하는 동안 blobfuse-proxy를 사용하도록 설정하지 않는 경우 오픈 소스 드라이버를 제거하면 기존 blobfuse 탑재가 중단됩니다. 그러나 NFS 탑재는 영향을 받지 않습니다.

신규 또는 기존 AKS 클러스터에서 CSI 드라이버 사용하도록 설정

Azure CLI를 사용하면 클러스터의 Pod에서 사용할 영구 볼륨을 구성하기 전에 새 AKS 클러스터 또는 기존 AKS 클러스터에서 Blob Storage CSI 드라이버를 사용하도록 설정할 수 있습니다.

새 클러스터에서 드라이버를 사용하도록 설정하려면 다음 예와 같이 az aks create 명령과 함께 --enable-blob-driver 매개 변수를 포함합니다.

az aks create --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup

기존 클러스터에서 드라이버를 사용하도록 설정하려면 다음 예와 같이 az aks update 명령과 함께 --enable-blob-driver 매개 변수를 포함합니다.

az aks update --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup

오픈 소스 Blob CSI 드라이버가 설치되어 있지 않은지 확인하라는 메시지가 표시됩니다. 확인 후 이 작업을 완료하는 데 몇 분 정도 걸릴 수 있습니다. 완료되면 클러스터에서 드라이버를 사용하도록 설정한 상태가 출력에 표시되어야 합니다. 다음 예제는 이전 명령의 결과를 나타내는 섹션과 유사합니다.

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

기존 AKS 클러스터에서 CSI 드라이버 사용하지 않도록 설정

Azure CLI를 사용하면 클러스터에서 영구 볼륨을 제거한 후 기존 AKS 클러스터에서 Blob Storage CSI 드라이버를 사용하지 않도록 설정할 수 있습니다.

기존 클러스터에서 드라이버를 사용하지 않도록 설정하려면 다음 예와 같이 az aks update 명령과 함께 --disable-blob-driver 매개 변수를 포함합니다.

az aks update --disable-blob-driver --name myAKSCluster --resource-group myResourceGroup

Azure Blob Storage에서 영구 볼륨 사용

PV(영구 볼륨)는 Kubernetes Pod와 함께 사용하기 위해 프로비저닝된 스토리지 부분을 나타냅니다. PV는 하나 이상의 Pod에서 사용할 수 있으며 동적 또는 정적으로 프로비저닝할 수 있습니다. 여러 Pod에서 동일한 스토리지 볼륨에 대한 동시 액세스가 필요한 경우 Azure Blob Storage를 사용하여 NFS(네트워크 파일 시스템) 또는 blobfuse를 사용하여 연결할 수 있습니다. 이 문서에서는 AKS 클러스터의 여러 Pod에서 사용할 Azure Blob Storage 컨테이너를 동적으로 만드는 방법을 보여 줍니다.

Kubernetes 볼륨에 대한 자세한 내용은 AKS의 애플리케이션에 대한 스토리지 옵션을 참조하세요.

기본 제공 스토리지 클래스를 사용하여 Azure Blob Storage PV를 동적으로 만들기

스토리지 클래스는 Azure Blob Storage 컨테이너를 만드는 방법을 정의하는 데 사용됩니다. 스토리지 계정은 Azure Blob Storage 컨테이너를 보유하기 위해 스토리지 클래스와 함께 사용할 노드 리소스 그룹에 자동으로 만들어집니다. skuName으로 다음 Azure 스토리지 중복도 SKU 중 하나를 선택합니다.

  • Standard_LRS: 표준 로컬 중복 스토리지
  • Premium_LRS: 프리미엄 로컬 중복 스토리지
  • Standard_ZRS: 표준 영역 중복 스토리지
  • Premium_ZRS: 프리미엄 영역 중복 스토리지
  • Standard_GRS: 표준 지역 중복 스토리지
  • Standard_RAGRS: 표준 읽기 액세스 지역 중복 스토리지

AKS에서 스토리지 CSI 드라이버를 사용하는 경우 Azure Blob CSI 스토리지 드라이버를 사용하는 두 개의 추가 기본 제공 StorageClass가 있습니다.

두 스토리지 클래스에 대한 회수 정책은 해당 PV가 삭제될 때 기본 Azure Blob Storage가 삭제되도록 합니다. 또한 스토리지 클래스는 set allowVolumeExpansion 매개 변수가 true로 설정되어 있으므로 기본적으로 확장 가능하도록 컨테이너를 구성합니다.

kubectl get sc 명령을 사용하여 스토리지 클래스를 확인합니다. 다음 예는 AKS 클러스터 내에서 사용 가능한 azureblob-fuse-premiumazureblob-nfs-premium 스토리지 클래스를 보여 줍니다.

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

스토리지 클래스를 사용하려면 해당 클래스를 참조하고 사용하는 PVC와 해당 Pod를 만듭니다. PVC를 사용하여 스토리지 클래스를 기반으로 하는 스토리지를 자동으로 프로비저닝합니다. PVC는 미리 만들어진 스토리지 클래스 또는 사용자 정의 스토리지 클래스 중 하나를 사용하여 통신할 원하는 SKU, 크기 및 프로토콜에 대한 Azure Blob Storage 컨테이너를 만들 수 있습니다. Pod 정의를 만들 때 원하는 스토리지를 요청하는 PVC가 지정됩니다.

StatefulSet 사용

워크로드에 대한 스토리지 볼륨을 유지하려면 StatefulSet을 사용할 수 있습니다. 이렇게 하면 기존 볼륨을 실패한 것을 대체하는 새 Pod에 더 쉽게 일치시킬 수 있습니다. 다음 예는 Blobfuse 또는 NFS 프로토콜을 사용하여 Blob Storage에 대한 StatefulSet을 설정하는 방법을 보여 줍니다.

필수 조건

  • AKS 클러스터 컨트롤 플레인 ID(AKS 클러스터 이름)가 VNet 및 네트워크 보안 그룹의 Contribuor 역할에 추가됩니다.
  1. 파일 azure-blob-nfs-ss.yaml을 만들고 다음 YAML에 복사합니다.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. kubectl create 명령을 사용하여 StatefulSet을 만듭니다.

    kubectl create -f azure-blob-nfs-ss.yaml
    

다음 단계