# 💾 Kubernetes PV와 PVC 완전 정리

2026. 2. 22. 12:46k8s

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를 통해서만 스토리지 사용