[Kubernetes] PV와 PVC


PV(Persistent Volume)

  • 물리적 스토리지 리소스를 나타내는 쿠버네티스 오브젝트
  • 개발자가 직접 만들 수 도 있고(Static), 필요할 때마다 자동으로 만들어지도록 할 수 있음(Dynamic)
  • 즉, 사용가능하도록 하는 물리적 용량

PVC(Persistent Volume Claim)

  • Pod가 스토리지를 사용하기 위해 PVC를 참조한다.
  • PVC는 적합한 PV를 찾아 1:1로 바인딩
  • 즉, 개발자가 PVC를 만들어 이를 통해 물리적 용량(PV)을 요청함

PV를 PVC에 명시적 바인딩 하는 방법

  • VolumeName 필드로 직접 지정

바인딩 성공조건

  • PVC의 accessModes가 PV와 완전히 동일
  • PVC의 요청 용량(storage) ≤ PV의 용량 (예: 5Gi 요청 → PV는 10Gi 가능).
  • 스토리지 클래스: PV의 storageClassName과 PVC의 storageClassName이 일치.

PV

apiVersion: v1
kind: PersistentVolume
metadata:
  name: static-pv  # PV 이름
spec:
  capacity:
    storage: 10Gi  # PV의 총 용량
  accessModes:
    - ReadWriteOnce  # PVC와 동일한 접근 모드 필수
  persistentVolumeReclaimPolicy: Retain  # PVC 삭제 후 PV 유지
  storageClassName: ""  # 명시적으로 빈 값 지정 (정적 프로비저닝)
  hostPath:
    path: /mnt/data  # 실제 데이터 저장 경로

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: static-pvc  # PVC 이름
spec:
  accessModes:
    - ReadWriteOnce  # PV와 동일한 접근 모드
  resources:
    requests:
      storage: 10Gi  # PV 용량과 동일하게 요청
  storageClassName: ""  # PV와 동일한 스토리지 클래스 지정
  volumeName: static-pv  # 명시적으로 PV 이름 지정 (강제 바인딩)