Azure 상식

AKS PV/PVC 사용법 및 CSI 구성에 따른 Azure Files 특성 이해

ktzzang0601 2025. 8. 23. 01:58

1. PersistentVolume (PV) 와 PersistentVolumeClaim (PVC) 개념

  • PersistentVolume (PV)
    Kubernetes 클러스터 내에서 가능한 스토리지(디스크, 파일공유 등)를 추상화한 리소스입니다.
    사용자(개발자, Pod)가 직접 PV를 부르지 않고, PVC를 통해 필요한 스토리지 용량과 속성만 요청하면 클러스터가 처리합니다.
  • PersistentVolumeClaim (PVC)
    Pod가 요구하는 스토리지 용량, 접근 모드(ReadWriteOnce, ReadWriteMany 등) 등을 명시하는 저장소 청구서 역할입니다.
    PVC가 클러스터 내 적합한 PV와 바인딩되어 해당 스토리지를 Pod에 연결합니다.

 

2. Azure Files CSI 드라이버와 특징

  • Azure Files는 SMB와 NFS 프로토콜 지원, 여러 Pod에서 동시에 읽고쓸 수 있는 ReadWriteMany(RWX) 권한을 가진 공유 파일 스토리지입니다.
  • Azure Files CSI 드라이버는 Kubernetes에서 CSI 표준을 통해 Azure Files를 동적으로 프로비저닝 및 관리할 수 있습니다.
  • 지원되는 StorageClass 옵션으로 Premium_LRS, Standard_LRS, Zone Redundant Storage 등 다양한 성능과 내구성 옵션 선택 가능.
  • Azure Key Vault 연동을 통한 인증서 및 접근 키 관리, 보안 강화가 가능하며, 동적 프로비저닝, PVC 확장, 스냅샷 기능 등 최신 CSI 기능을 완벽 지원합니다.
  • Private 구성 시 Azure Files를 프라이빗 엔드포인트(Private Endpoint)를 통해 네트워크 격리하여 AKS 클러스터와 안전하게 연결할 수 있으며, 이를 통해 퍼블릭 인터넷 노출 없이 보안이 강화

 

3. 주요 StorageClass 및 PVC 옵션 상세

옵션명  예시 설명
provisioner file.csi.azure.com Azure Files CSI 드라이버 식별자
skuName Premium_LRS / Standard_LRS / Premium_ZRS 스토리지 계층  성능 옵션
protocol smb / nfs 사용할 프로토콜(SMB:윈도우  Linux, NFS:Linux 전용)
allowVolumeExpansion true / false Dynamic Volume Expansion 지원 여부
reclaimPolicy Delete / Retain PVC Delete 볼륨의 삭제 또는 보존 정책
mountOptions dir_mode=0777file_mode=0777actimeo=30 마운트  적용할 파일 권한  캐시 관련 옵션
maxShares "10" RWX 모드에서 동시 접속 가능한 Pod 최대 
storageClassName Custom 명명 PVC 연결된 StorageClass 이름 지정
accessModes ReadWriteManyReadWriteOnceReadOnlyMany 접속 모드 - RWX, RWO, ROX  선택

 

- StorageClass 예시 YAML

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-premium
provisioner: file.csi.azure.com
parameters:
  skuName: Premium_LRS
  protocol: smb
allowVolumeExpansion: true
reclaimPolicy: Delete
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - actimeo=30

 

- PersistentVolumeClaim 예시 YAML

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: azurefiles-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: azurefile-premium
  resources:
    requests:
      storage: 100Gi

 

- Pod에서 PVC 연결하는 예시

apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
  - name: app-container
    image: nginx
    volumeMounts:
    - name: azurefile
      mountPath: /mnt/azure
  volumes:
  - name: azurefile
    persistentVolumeClaim:
      claimName: azurefiles-pvc

 

4. 운영 시 주의사항 및 장애 대응

    • PVC Pending 상태:
      PVC가 Pending 상태라면 StorageClass 설정 오류, 부족한 스토리지 자원, 네트워크 문제 등을 점검해야 합니다.
    • 마운트 실패:
      Pod에서 Azure Files 볼륨 마운트가 실패할 경우, Secret 키 유효성, 네트워크 연결성(특히 Private Endpoint 설정), 프로토콜 일치 여부를 확인합니다.
    • 성능 문제:
      Premium SKU가 고성능 보장, IOPS 및 대역폭 제한 고려 필요.
      여러 Pod가 동시에 쓰는 RWX 모드 성능 병목 이슈 시 프로토콜 전환(NFS 권장)이나 분산 패턴 재설계 고려.
    • 보안:
      Azure Key Vault 및 Managed Identity와 연동해 스토리지 접근 키 관리 강화.
      네트워크 격리 위해 VNet 서비스 엔드포인트, Private Link 구성 권장.
    • 볼륨 확장:
      PVC 확장 후, Pod 다시 시작이 필요할 수 있으므로 재관리에 유의.
    • 백업  스냅샷:
      Azure Backup 서비스와 연동하거나 CSI 스냅샷 기능 활용해 데이터 보호  복구 정책 수립.
    • 기타:
      - PV에는 reclaimPolicy 속성을 지정할 수 있어, PVC 삭제 시 관련 스토리지를 그대로 보존할지(Retain), 혹은 함께 삭제할지(Delete) 선택 가능
      - allowVolumeExpansion:true로 설정하면 PVC 용량을 이후에 확장할 수 있어, 워크로드 변화에 유연하게 대응

      - SMB 기반은 Windows 및 다수 애플리케이션과, NFS 기반은 리눅스 워크로드 및 POSIX 호환성이 필요한 경우 적합
      - 볼륨 크기 확장을 위해서는 새로운 PV가 생성되는게 아니라, 대신 기존 볼륨의 크기가 조정됩니다. 다만 현재는 영구 볼륨을 축소하는 기능은 지원되지 않습니다.

5. 관련 링크