Pvc
Pvc 카테고리의 모든 포스트 - 한국어
1개의 포스트
pv pvc storageclass 에 관해서
Kubernetes 스토리지 가이드: PV / PVC / StorageClass 완전 정복
버전 무관 개념 중심 정리 (CSI 기반 일반 원칙). 집/온프레미스 K8s에도 바로 적용 가능.
목차
- 빠른 요약 (TL;DR)
- 핵심 개념
- 각 오브젝트 심화
- 프로비저닝 방식
- 접근 모드 / 볼륨 모드
- 예제로 배우는 구성 패턴
- 리사이즈/스냅샷/백업
- 보안/권한/퍼미션
- 성능/운영 팁
- 트러블슈팅 체크리스트
- 자주 하는 실수
- 명령어 치트시트
- 부록: 템플릿 모음
빠른 요약 (TL;DR)
- PV: 클러스터에 실제 존재하는 저장소 리소스 (디스크 자체).
- PVC: 개발자/워크로드가 요구하는 스토리지 요청서 (용량/접근모드/클래스).
- StorageClass: PVC를 만들면 PV를 자동으로 생성하는 규칙서(드라이버 설정).
- 관계:
Pod → PVC → PV → (Storage Backend)
- 온프레미스/홈랩: NFS 또는 Local Path Provisioner, 규모가 커지면 Longhorn/Rook-Ceph 등 고려.
[Storage Backend] ←(CSI/프로비저너)— [StorageClass 규칙]
↑ ↑
└────────────── 바인딩 ───────────┘
[PVC 요청서] ← Pod가 참조
│
▼
[PV 실물]
핵심 개념
- Static Provisioning: 관리자가 먼저 PV를 생성 → 사용자는 PVC로 그 PV를 바인딩.
- Dynamic Provisioning: 사용자가 PVC만 만들면, StorageClass 규칙에 따라 PV가 자동 생성되어 바인딩.
- 접근 모드(accessModes):
ReadWriteOnce(RWO)
,ReadOnlyMany(ROX)
,ReadWriteMany(RWX)
등.- 다중 노드에서 동시에 쓰기하려면 보통 RWX가 필요(NFS/분산 스토리지).
- 볼륨 모드(volumeMode):
Filesystem
(기본) /Block
(원시 블록 디바이스). - 보존 정책(reclaimPolicy):
Delete
/Retain
/ (드라이버에 따라Recycle
은 보통 미사용).- 중요 데이터는 Retain으로 두고 수동 정리 권장.
- 바인딩 시점(volumeBindingMode):
Immediate
vsWaitForFirstConsumer
.- 후자는 Pod 스케줄링 시점에 노드/가용영역을 고려해 바인딩(클라우드/토폴로지에 유리).
- 확장(allowVolumeExpansion): PVC 사이즈 증가 허용 여부.
각 오브젝트 심화
PV (PersistentVolume)
- 무엇: “실제 디스크”를 나타내는 K8s 오브젝트.
- 주요 필드
spec.capacity.storage
: 용량(예:10Gi
)spec.accessModes
: RWO/ROX/RWXspec.volumeMode
: Filesystem/Blockspec.persistentVolumeReclaimPolicy
: Delete/Retain- 백엔드 설정:
nfs
,hostPath
,iscsi
,csi:
등 nodeAffinity
: 특정 노드에만 붙도록 제한 가능(로컬 디스크 시 유용).
- 수명: Pod와 독립. Pod가 죽어도 데이터 유지.
PVC (PersistentVolumeClaim)
- 무엇: “스토리지 요청서”(용량/접근 모드/클래스).
- 주요 필드
spec.resources.requests.storage
spec.accessModes
spec.storageClassName
spec.volumeMode
- (정적 바인딩 시)
spec.selector.matchLabels
로 특정 PV만 선택 가능.
- 상태:
Pending → Bound
로 바인딩되면 사용 가능.
StorageClass
- 무엇: “PV를 생성하는 규칙/드라이버 설정”
- 주요 필드
provisioner
: 예)kubernetes.io/no-provisioner
(정적),rancher.io/local-path
,nfs.csi.k8s.io
,ebs.csi.aws.com
등parameters
: 드라이버별 설정 (디스크 타입, fsType 등)reclaimPolicy
: Delete/RetainallowVolumeExpansion
: true/falsevolumeBindingMode
: Immediate / WaitForFirstConsumermountOptions
:noatime
등 마운트 옵션allowedTopologies
: 영역/존 한정
프로비저닝 방식
1) Static Provisioning
- 관리자가 PV를 미리 정의(NFS 경로/로컬 디스크 등).
- 사용자가 PVC를 만들면 조건 일치하는 PV와 바인딩.
- 주로 온프레미스에서 기존 NAS/NFS 공유를 잡아줄 때 단순/명확.
2) Dynamic Provisioning
- 관리자가 StorageClass와 **프로비저너(또는 CSI 드라이버)**를 배포.
- 사용자가 PVC 생성 시
storageClassName
을 명시. - 컨트롤러가 조건에 맞는 PV를 자동 생성하고 바인딩.
- 클라우드/CSI 환경, 또는 nfs-subdir-external-provisioner, local-path-provisioner 등에서 편리.
접근 모드 / 볼륨 모드
- accessModes
- RWO: 한 노드의 한 Pod(여러 Pod 가능하나 같은 노드 내)에서 읽기/쓰기.
- ROX: 여러 노드에서 읽기 전용 공유.
- RWX: 여러 노드/Pod에서 읽기/쓰기 공유(NFS/분산스토리지 필요).
- (클러스터/드라이버에 따라) ReadWriteOncePod 모드가 제공되기도 함.
- volumeMode
- Filesystem: 일반 마운트(디렉토리로 사용). 대부분의 워크로드 기본.
- Block: 파일시스템 없이 블록 디바이스로 노출(DB 특수 케이스).
예제로 배우는 구성 패턴
아래 예제의 네임스페이스는 기본(
default
) 가정. 필요 시metadata.namespace
추가.