# 💾 Kubernetes PV와 PVC 완전 정리
2026. 2. 22. 12:46ㆍk8s
Kubernetes에서 스토리지는 Pod 수명과 분리되어야 한다.
Pod는 언제든지 죽고 재생성될 수 있기 때문에
데이터는 별도로 관리해야 한다.
이때 사용하는 것이:
- PV (PersistentVolume)
- PVC (PersistentVolumeClaim)
📌 1️⃣ PV란 무엇인가?
클러스터 관리자(또는 동적 프로비저너)가 제공하는 실제 저장소 리소스
즉,
실제 디스크 / NFS / 클라우드 볼륨
을 Kubernetes 객체로 표현한 것.
🔎 PV 예시
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data
📌 2️⃣ PVC란 무엇인가?
사용자가 “이 정도 크기의 스토리지를 쓰고 싶다”라고 요청하는 객체
즉,
사용자 요청서
🔎 PVC 예시
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
📌 3️⃣ PV와 PVC 관계
PVC (요청)
↓
PV (실제 저장소)
↓
Pod에 마운트
PVC가 생성되면:
- 조건이 맞는 PV를 자동으로 연결(Bind)
- Bound 상태가 됨
📌 4️⃣ Binding 과정
조건:
- storage 크기 이상
- accessModes 일치
- storageClassName 일치
확인:
kubectl get pv
kubectl get pvc
📌 5️⃣ Pod에서 사용하는 방법
apiVersion: v1
kind: Pod
metadata:
name: busybox
spec:
containers:
- name: busybox
image: busybox
volumeMounts:
- name: myvolume
mountPath: /data
volumes:
- name: myvolume
persistentVolumeClaim:
claimName: mypvc
📌 6️⃣ AccessModes 종류
| 모드 | 의미 |
|---|---|
| ReadWriteOnce (RWO) | 한 노드에서만 읽기/쓰기 |
| ReadOnlyMany (ROX) | 여러 노드에서 읽기만 |
| ReadWriteMany (RWX) | 여러 노드에서 읽기/쓰기 |
📌 7️⃣ Reclaim Policy
PV가 PVC에서 해제될 때 동작 방식
| 정책 | 의미 |
|---|---|
| Retain | 데이터 유지 |
| Delete | 스토리지 삭제 |
| Recycle (Deprecated) | 재사용 |
확인:
kubectl get pv -o wide
📌 8️⃣ 정적 프로비저닝 vs 동적 프로비저닝
🔹 정적
관리자가 PV를 먼저 만들어 둠
🔹 동적 (실무에서 일반적)
PVC 생성 시 자동으로 PV 생성
StorageClass 필요
📌 9️⃣ StorageClass 예시
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/aws-ebs
PVC에서 지정:
spec:
storageClassName: fast
📌 10️⃣ 상태 확인 방법
kubectl get pv
kubectl get pvc
kubectl describe pvc mypvc
상태:
- Available
- Bound
- Released
- Failed
📌 11️⃣ 실무에서 자주 겪는 문제
1️⃣ PVC Pending 상태
원인:
- StorageClass 없음
- PV 조건 불일치
- 프로비저너 오류
2️⃣ Permission denied 문제
- NFS root_squash
- fsGroup 미설정
- 스토리지 권한 문제
3️⃣ Pod 삭제해도 데이터 유지되는 이유
PV는 Pod와 독립적 리소스
📊 PV vs PVC 비교
| 항목 | PV | PVC |
|---|---|---|
| 생성 주체 | 관리자/프로비저너 | 사용자 |
| 의미 | 실제 저장소 | 저장소 요청 |
| 수명 | Pod와 독립 | Pod와 독립 |
| 상태 | Available/Bound | Pending/Bound |
🏗️ 전체 구조
Storage (디스크/NFS/클라우드)
↓
PersistentVolume
↓
PersistentVolumeClaim
↓
Pod VolumeMount
🎯 핵심 요약
- PV = 실제 저장소
- PVC = 저장소 요청
- StorageClass = 자동 생성 규칙
- Pod는 PVC를 통해서만 스토리지 사용
'k8s' 카테고리의 다른 글
| 🔐 Kubernetes NetworkPolicy에서 policyTypes 완전 이해하기 (0) | 2026.02.22 |
|---|---|
| 🚀 CKAD 시험 대비 – Kubernetes Job 완전 정리 (0) | 2026.02.22 |
| 🧠 Pod 안에서 kubectl 대신 API 호출하기 (0) | 2026.02.22 |
| 🔐 Kubernetes NetworkPolicy 완전 정리 (0) | 2026.02.22 |
| 🌐 Kubernetes Service Type 변경 방법 & 확인 방법 (0) | 2026.02.22 |