[CKA] PersistentVolumeClaim
PersistentVolumeClaim의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
Persistent Volume Claims
- PVC의 기본 개념:
- 사용자가 필요한 스토리지를 요청하는 방법입니다
- Pod가 사용할 영구 스토리지의 스펙을 정의합니다
- 쿠버네티스의 추상화된 리소스 요청 방식입니다
- PVC의 주요 스펙:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce # 접근 모드
resources:
requests:
storage: 10Gi # 요청 용량
storageClassName: standard # 스토리지 클래스
- 주요 속성 설명:
- accessModes:
- ReadWriteOnce (RWO): 하나의 노드에서만 읽기/쓰기
- ReadOnlyMany (ROX): 여러 노드에서 읽기만 가능
- ReadWriteMany (RWX): 여러 노드에서 읽기/쓰기 가능
- storageClassName:
- 사용할 스토리지 클래스를 지정
- standard: 동적 프로비저닝에 사용됨
""(빈 문자열): StorageClass를 사용하지 않음- 필드를 생략하면 기본 StorageClass가 설정될 수 있음
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: ebs.csi.aws.com # AWS EBS CSI 드라이버가 먼저 설치되어 있어야 함
parameters:
type: gp2 # EBS 볼륨 타입
fsType: ext4 # 파일시스템 타입
# PVC 정의
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: standard # 이 StorageClass 사용
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
결과:
- PVC 생성 시 자동으로 AWS EBS 볼륨(PV) 생성
- 생성된 PV와 PVC 자동 바인딩
- PVC 생명주기:
생성 → Pending → Bound → 사용 중 → 해제 → 삭제
- Pod에서 PVC 사용 예시:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myfrontend
image: nginx
volumeMounts:
- mountPath: "/var/www/html"
name: mypd
volumes:
- name: mypd
persistentVolumeClaim:
claimName: my-pvc
- PVC 상태 관리:
- Pending: 적절한 PV를 찾는 중
- Bound: PV와 연결됨
- Lost: 연결된 PV가 클러스터에서 삭제됨
- PVC 사용 시 주의사항:
- 적절한 용량 설정이 중요
- 접근 모드는 워크로드 특성에 맞게 선택
- 스토리지 클래스는 인프라에 맞게 선택
- 삭제 시 데이터 손실 주의
- PVC 삭제 결과는 연결된 PV 또는 StorageClass의
persistentVolumeReclaimPolicy에 따라 달라집니다.- Retain: 수동 삭제 전까지 사용
- Delete: PVC 삭제 시 삭제됨
- Recycle: 과거에 데이터를 정리해 재사용하던 정책으로 현재는 지원 중단됨.
- PVC 삭제 결과는 연결된 PV 또는 StorageClass의
- PVC 모니터링:
# PVC 목록 조회
kubectl get pvc
# PVC 상세 정보 확인
kubectl describe pvc my-pvc
- 장점:
- 스토리지 추상화 제공
- 인프라 독립적 설계 가능
- 동적 프로비저닝 지원
- 선언적 관리 가능
PVC는 쿠버네티스에서 영구 스토리지를 관리하는 핵심 리소스로, 애플리케이션의 상태를 안정적으로 유지하는데 매우 중요한 역할을 합니다.