설명 (Description): 쿠버네티스 스토리지 관리의 핵심, 동적 프로비저닝에 대해 알아봅니다. 정적 프로비저닝과의 차이점, StorageClass, PVC, PV의 관계와 실제 동작 방식을 초보자도 이해하기 쉬운 예제 코드로 설명하여 스토리지 자동화의 개념을 명확히 이해하도록 돕습니다.
TL;DR
쿠버네티스 동적 프로비저닝(Dynamic Provisioning)은 사용자가 스토리지(저장 공간)를 요청할 때마다 관리자의 개입 없이 자동으로 스토리지를 생성하고 연결해주는 기능입니다. 개발자가 필요한 스토리지의 종류와 크기를 PersistentVolumeClaim(PVC)으로 요청하면, 미리 정의된 StorageClass 템플릿에 따라 실제 스토리지와 이를 대변하는 PersistentVolume(PV)이 동적으로 생성됩니다. 이 방식은 스토리지 관리를 자동화하여 개발 속도를 높이고 운영 부담을 크게 줄여줍니다.
스토리지 관리의 두 가지 방식: 정적 vs. 동적 프로비저닝
쿠버네티스에서 컨테이너를 위한 영구(Persistent) 스토리지를 할당하는 방식은 크게 두 가지로 나뉩니다.
- 정적 프로비저닝 (Static Provisioning): 클러스터 관리자가 미리 스토리지(예: 클라우드의 디스크)를 여러 개 생성해 두고, 각 스토리지를 나타내는 PersistentVolume(PV) 객체를 수동으로 만들어 둡니다. 개발자는 이 미리 준비된 PV 목록 중에서 필요한 것을 골라 PersistentVolumeClaim(PVC)으로 요청해서 사용합니다. 이는 마치 지정된 주차 공간에 직접 차를 세우는 것과 같습니다. 관리자가 미리 공간을 만들어두지 않으면 사용할 수 없습니다.
- 동적 프로비저닝 (Dynamic Provisioning): 관리자는 실제 스토리지를 미리 만들지 않습니다. 대신 "어떤 종류의 스토리지를 만들 수 있는지"에 대한 명세, 즉 StorageClass만 정의해 둡니다. 개발자가 PVC로 스토리지를 요청하면, 이 StorageClass가 템플릿이 되어 요청에 맞는 PV와 실제 스토리지를 자동으로 생성합니다. 이는 발렛 파킹과 비슷합니다. 운전자는 차 키만 맡기면, 직원이 알아서 빈 공간에 주차해주는 것과 같습니다.
Why it matters: 정적 방식은 소규모 환경에서는 가능하지만, 수많은 팀이 수시로 스토리지를 필요로 하는 대규모 클라우드 네이티브 환경에서는 병목 현상을 유발합니다. 동적 프로비저닝은 개발자가 필요할 때 즉시 스토리지를 할당받는 '셀프 서비스'를 가능하게 하여 DevOps 파이프라인의 속도와 효율성을 극대화합니다.
동적 프로비저닝의 3가지 핵심 구성 요소
동적 프로비저닝의 동작을 이해하려면 세 가지 주요 쿠버네티스 객체의 관계를 알아야 합니다.
- PersistentVolumeClaim (PVC): 사용자의 '스토리지 요청서'
- 개발자가 애플리케이션에 필요한 스토리지의 사양(용량, 접근 모드, 종류)을 담아 클러스터에 제출하는 요청서입니다.
- StorageClass (SC): 스토리지 '자동 생성 템플릿'
- 관리자가 미리 정의해 둔 객체로, 어떤 종류의 스토리지를 어떻게 만들 것인지에 대한 정책을 담고 있습니다. 예를 들어 "빠른 SSD 타입", "백업 기능이 있는 HDD 타입" 등으로 정의할 수 있습니다.
- PersistentVolume (PV): 실제 '스토리지' 자체
- 클러스터 내의 실제 스토리지 조각을 나타내는 객체입니다. 동적 프로비저닝에서는 PVC 요청에 따라 StorageClass를 통해 자동으로 생성됩니다.
구성 요소 | 역할 | 비유 |
---|---|---|
PersistentVolumeClaim (PVC) | 사용자의 스토리지 요청 | "10평짜리 창고 하나 빌려주세요" 라는 요청서 |
StorageClass (SC) | 스토리지 생성 방법 정의 | "요청이 오면 이런 규격의 창고를 지어라" 라는 설계도 |
PersistentVolume (PV) | 실제 할당된 스토리지 | 요청에 따라 자동으로 지어진 실제 창고 |
Why it matters: 이 세 요소의 분리는 역할과 책임의 분리를 의미합니다. 인프라 관리자는 스토리지 정책(StorageClass)만 관리하고, 개발자는 필요한 스토리지(PVC)만 요청하면 됩니다. 둘 사이의 복잡한 생성 과정은 쿠버네티스가 자동화하므로 각자의 역할에 집중할 수 있습니다.
동적 프로비저닝 실제 동작 과정과 예제 코드
동적 프로비저닝은 다음과 같은 순서로 진행됩니다.
관리자: 클라우드 환경에 맞는 StorageClass를 생성합니다. 예를 들어 AWS 환경이라면 EBS 볼륨을 생성하는 SC를 정의합니다.
YAML
# StorageClass 예제 (aws-ebs-sc.yaml) apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: aws-gp2-sc # 스토리지 클래스의 이름 provisioner: ebs.csi.aws.com # 어떤 프로비저너(생성 도구)를 쓸지 지정 parameters: type: gp2 # 스토리지의 세부 타입 (예: 범용 SSD) reclaimPolicy: Delete # PVC가 삭제되면 PV와 실제 스토리지도 함께 삭제
개발자: 애플리케이션에 필요한 스토리지를 PersistentVolumeClaim(PVC)으로 요청합니다. 이때 어떤 StorageClass를 사용할지 storageClassName 필드에 명시합니다.
YAML
# PersistentVolumeClaim 예제 (my-pvc.yaml) apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-app-pvc spec: accessModes: - ReadWriteOnce # 한 번에 하나의 노드에서만 읽고 쓰기 가능 storageClassName: aws-gp2-sc # 위에서 정의한 StorageClass 이름을 지정 resources: requests: storage: 5Gi # 5GB의 스토리지를 요청
쿠버네티스:
- my-app-pvc 요청을 감지하고, storageClassName에 지정된 aws-gp2-sc를 찾습니다.
- aws-gp2-sc에 정의된 ebs.csi.aws.com 프로비저너를 호출하여 AWS에 5GB짜리 gp2 타입 EBS 볼륨 생성을 요청합니다.
- EBS 볼륨이 생성되면, 이 볼륨을 가리키는 PersistentVolume(PV) 객체를 클러스터 내에 자동으로 생성합니다.
- 자동으로 생성된 PV를 my-app-pvc에 바인딩(연결)합니다.
애플리케이션: 이제 개발자는 자신의 파드(Pod)에서 my-app-pvc를 참조하여 스토리지를 마운트하고 사용할 수 있습니다.
Why it matters: 코드 예제에서 보듯이, 개발자는 AWS EBS 볼륨을 어떻게 생성하는지 알 필요가 전혀 없습니다. 단지 필요한 스토리지의 종류(aws-gp2-sc)와 크기(5Gi)만 선언하면, 복잡한 인프라 생성 과정이 모두 추상화되고 자동화됩니다.
결론
동적 프로비저닝은 현대적인 쿠버네티스 환경에서 필수적인 기능입니다. 이는 스토리지 관리를 수동적이고 중앙 집중적인 작업에서 벗어나게 하여, 개발자가 필요에 따라 스토리지를 직접 할당받을 수 있는 민첩한 '셀프 서비스' 모델로 전환시킵니다. StorageClass를 통해 스토리지 정책을 표준화하고 PVC를 통해 요청을 자동화함으로써, 기업은 인프라 운영의 효율성을 높이고 애플리케이션 배포 속도를 가속화할 수 있습니다.
References:
- Dynamic Volume Provisioning | Kubernetes | N/A | https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/
- Understanding Kubernetes StorageClass | Medium | 2024-02-12 | https://medium.com/@karl.kfi/understanding-kubernetes-storageclass-101-7922d5690a72
- What is Kubernetes Dynamic Provisioning? | Buoyant | 2024-03-05 | https://buoyant.io/kubernetes-glossary/dynamic-provisioning
- Kubernetes Persistent Volumes: A Practical Guide | Red Hat | 2024-04-22 | https://www.redhat.com/en/topics/containers/kubernetes-persistent-volume
- Kubernetes — Dynamic Provisioning of Persistent Storage | by Pravin Regismond | Medium | 2023-08-28 | https://medium.com/@pravin.regismond/kubernetes-dynamic-provisioning-of-persistent-storage-8239557a62a7
'개발 창고 > Server' 카테고리의 다른 글
쿠버네티스 인그레스(Ingress): 완벽 가이드 (NGINX 예제 포함) (1) | 2025.09.23 |
---|---|
쿠버네티스 노드포트(NodePort)란? 개념, 동작 방식 및 사용 사례 완벽 분석 (1) | 2025.09.21 |
쿠버네티스 레이블(Labels) 완벽 가이드: 개념부터 실전 베스트 프랙티스까지 (1) | 2025.09.19 |
쿠버네티스 컨트롤러 매니저: 클러스터 상태를 지키는 자동화의 핵심 (1) | 2025.09.17 |
HAProxy란? 고가용성 로드 밸런서 및 리버스 프록시 완벽 분석 (0) | 2025.09.16 |