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=0777, file_mode=0777, actimeo=30 | 마운트 시 적용할 파일 권한 및 캐시 관련 옵션 |
| maxShares | "10" | RWX 모드에서 동시 접속 가능한 Pod 최대 수 |
| storageClassName | Custom 명명 | PVC와 연결된 StorageClass 이름 지정 |
| accessModes | ReadWriteMany, ReadWriteOnce, ReadOnlyMany | 접속 모드 - 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. 관련 링크
- AKS(Azure Kubernetes Service)에서 Azure Files CSI(Container Storage Interface) 드라이버 사용https://learn.microsoft.com/ko-kr/azure/aks/azure-files-csi
- 애플리케이션에 대한 AKS(Azure Kubernetes Service)의 스토리지 옵션
https://learn.microsoft.com/ko-kr/azure/aks/concepts-storage
'Azure 상식' 카테고리의 다른 글
| Support VM OS SKU 및 Migration 방법 (0) | 2025.08.24 |
|---|---|
| Dockerfile 기본 개념 및 레이어 구성 원리 (0) | 2025.08.23 |
| AKS Overlay Network 구성에 대한 이해: POD IP 할당과 특징 (0) | 2025.08.23 |
| Azure 관련AKS 설치 구성에 대한 이해: Ingress Controller, CNI, CSI (1) | 2025.08.23 |
| Azure Load Balancer 이해: 가용성, 분산처리 특징과 Coverage (0) | 2025.08.22 |