쿠버네티스 PersistentVolume과 PersistentVolumeClaim
TMT쿠버네티스에서 **PersistentVolume (PV)**를 직접 사용하지 않고 **PersistentVolumeClaim (PVC)**를 통해 접근하는 이유는 유연성, 추상화, 그리고 자원 관리 효율성 때문입니다. PVC를 통해 볼륨을 사용하는 방식은 쿠버네티스의 동적 스토리지 관리와 셀프 서비스 스토리지 요청을 가능하게 하며, 개발자와 관리자의 역할을 명확히 분리할 수 있도록 합니다.
아래에서 더 자세히 이유를 설명하겠습니다. 😊
🧩 1. 유연한 스토리지 관리
쿠버네티스는 PersistentVolume과 PersistentVolumeClaim을 나눠서 사용함으로써 스토리지 자원과 애플리케이션 간의 결합을 느슨하게 유지합니다. 이를 통해 다음과 같은 유연성을 제공합니다.
📌 예시:
- 관리자는 PV를 생성하여 다양한 스토리지 유형과 크기의 스토리지 자원을 제공해 두고,
- 개발자는 PVC를 사용하여 필요할 때 원하는 스토리지 요청을 할 수 있습니다.
이 방식은 개발자가 스토리지 세부 사항(스토리지 클래스, 크기, 접근 모드 등)을 알 필요 없이 필요한 스토리지를 요청하고 사용할 수 있도록 해줍니다.
🧩 2. 개발자와 관리자의 역할 분리
쿠버네티스는 관리자와 개발자 간의 역할을 명확히 분리하기 위해 PV와 PVC 개념을 도입했습니다.
관리자 역할 | 개발자 역할 |
---|---|
PV를 생성하고, 스토리지 제공 | PVC를 생성하고, 필요한 스토리지 요청 |
스토리지 타입, 크기, 접근 모드 결정 | 필요한 스토리지의 크기와 접근 모드 요청 |
스토리지 제공자와 통합 관리 | 애플리케이션 배포 시 PVC를 사용 |
✅ 이점:
- 관리자는 스토리지 제공자와 관련된 세부사항을 관리하고, 개발자는 애플리케이션 코드에만 집중할 수 있습니다.
- 개발자는 PVC를 통해 스토리지가 어디에서 제공되는지 몰라도 요청한 스토리지를 사용할 수 있습니다.
🧩 3. 동적 스토리지 프로비저닝 지원
PVC를 사용하면 쿠버네티스가 동적 스토리지 프로비저닝을 지원합니다.
즉, 관리자가 미리 PV를 생성하지 않아도, 쿠버네티스가 PVC 요청 시 자동으로 PV를 생성하고 할당할 수 있습니다.
📌 동적 프로비저닝 예시:
- 개발자가 PVC를 생성하고, 필요한 스토리지 크기와 접근 모드를 지정합니다.
- PVC 요청을 받은 쿠버네티스는 스토리지 클래스를 기반으로 자동으로 PV를 생성하고, PVC와 바인딩합니다.
- 개발자는 해당 PVC를 애플리케이션에 마운트하여 사용합니다.
예시 PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
결과:
- 관리자가 미리 PV를 생성하지 않아도, PVC 요청 시 쿠버네티스가 자동으로 10Gi 크기의 PV를 생성하고 바인딩합니다.
🧩 4. 스토리지 제공자의 다양성 지원
쿠버네티스는 다양한 스토리지 제공자(AWS EBS, GCE Persistent Disk, NFS, Ceph, GlusterFS 등)를 지원합니다.
PVC를 사용하면 개발자는 스토리지 제공자의 세부사항을 알 필요 없이 요청된 스토리지를 일관된 방식으로 사용할 수 있습니다.
📌 스토리지 제공자와 관계없이 동일한 PVC 사용 가능:
- AWS EBS
- Google Cloud Persistent Disk
- Azure Disk
- NFS
개발자는 PVC를 통해 스토리지가 어디에서 제공되는지 신경 쓰지 않고, 일관된 방식으로 스토리지를 요청하고 사용할 수 있습니다.
🧩 5. PV와 PVC의 관계 이해
쿠버네티스에서 PV와 PVC는 1:1 바인딩 관계를 가집니다.
- PersistentVolume (PV): 스토리지 자원을 정의하고, 관리자가 관리합니다.
- PersistentVolumeClaim (PVC): 개발자가 요청한 스토리지 요구 사항을 정의합니다.
- 쿠버네티스는 PVC 요청에 맞는 PV를 찾아 자동으로 바인딩합니다.
🧩 6. 실무에서의 이점
✅ 관리자의 입장
- 스토리지의 세부사항을 관리하고, 다양한 스토리지 제공자를 통합 관리할 수 있습니다.
- 개발자에게 스토리지 사용 방식을 숨길 수 있어 관리 효율이 높아집니다.
✅ 개발자의 입장
- 스토리지의 세부사항을 알 필요 없이 애플리케이션 코드에만 집중할 수 있습니다.
- PVC를 통해 필요한 스토리지를 손쉽게 요청하고 사용할 수 있습니다.
🧩 7. 정리: 왜 PVC를 사용하는가?
이유 | 설명 |
---|---|
유연한 스토리지 관리 | 개발자가 스토리지 세부사항을 몰라도 스토리지 사용 가능 |
역할 분리 | 관리자는 PV 관리, 개발자는 PVC 사용으로 역할 분리 |
동적 스토리지 프로비저닝 | PVC 요청 시 자동으로 PV를 생성하여 할당 |
다양한 스토리지 제공자 지원 | PVC를 통해 여러 스토리지 제공자를 일관되게 사용 |
추상화 | 개발자가 스토리지 제공자나 세부 설정을 알 필요 없음 |
PVC는 쿠버네티스에서 스토리지 관리의 핵심 요소이며, 개발자와 관리자가 더 효율적으로 협업할 수 있도록 돕는 중요한 메커니즘입니다. 😊