근묵자흑
PV, PVC, StorageClass 본문
1. Persistent Volume (PV) - 스토리지라는 창고
PV가 뭘까요?
PV는 Kubernetes 클러스터에서 제공하는 '스토리지 창고'라고 생각하면 됩니다.
일상생활에 비유하면:
- 아파트 단지의 공용 보관함
- 대여할 수 있는 창고
- 빌릴 수 있는 저장 공간
주요 특징:
- 클러스터 리소스: 노드처럼 클러스터의 일부로 존재
- 파드와 독립적: 컨테이너가 삭제되어도 데이터가 유지
- 접근 모드: 누가 어떻게 접근할 수 있는지 정의
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-storage
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce # 한 번에 한 노드만 읽기/쓰기 가능
persistentVolumeReclaimPolicy: Retain
hostPath:
path: /mnt/data
접근 모드 (Access Modes)
스토리지를 어떻게 사용할 수 있는지 정의합니다:
- ReadWriteOnce (RWO): 한 명만 들어갈 수 있는 개인 서재
- 하나의 노드만 읽기/쓰기 가능
- 대부분의 블록 스토리지 타입이 지원
- ReadOnlyMany (ROX): 많은 사람이 볼 수 있는 도서관
- 여러 노드가 읽기만 가능
- 공유 파일 시스템에서 주로 사용
- ReadWriteMany (RWX): 여러 사람이 편집할 수 있는 공유 문서
- 여러 노드가 동시에 읽기/쓰기 가능
- NFS 같은 네트워크 파일 시스템에서 주로 지원
2. Persistent Volume Claim (PVC) - 스토리지 신청서
PVC가 뭘까요?
PVC는 사용자가 스토리지를 신청하는 '요청서'입니다.
일상생활에 비유하면:
- 창고 대여 신청서
- "5평짜리 창고가 필요해요" 같은 요청
- 필요한 조건을 적는 주문서
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-claim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 3Gi
storageClassName: fast-storage
PVC가 필요한 이유
개발자와 관리자의 역할을 분리하여 더 효율적으로 작업할 수 있습니다:
개발자 (PVC 사용자):
- "3GB 크기의 저장공간이 필요해요"
- 스토리지 세부사항을 몰라도 됨
- 필요한 조건만 명시
관리자 (PV 제공자):
- 다양한 스토리지 옵션을 미리 준비
- 클러스터의 인프라 관리
- 보안 설정과 정책 관리
3. PV와 PVC의 생명주기
1. 프로비저닝 (Provisioning)
- 정적 프로비저닝: 관리자가 미리 PV를 만들어 둠
- 동적 프로비저닝: 요청 시 자동으로 PV 생성
2. 바인딩 (Binding)
- PVC가 적합한 PV를 찾아서 결합
- 마치 열쇠와 자물쇠가 맞아떨어지는 것처럼!
3. 사용 (Using)
- Pod가 바인딩된 PVC를 통해 스토리지 사용
- 애플리케이션이 데이터를 읽고 쓰기
4. 해제 (Releasing)
- PVC 삭제 시 PV가 해제됨
- 데이터 처리는 Reclaim Policy에 따라 결정
5. 회수 (Reclaiming)
- Retain: 데이터 보존
- Delete: 데이터 완전 삭제
- Recycle: 데이터 삭제 후 재사용
4. StorageClass - 스토리지 프로필
StorageClass란?
StorageClass는 다양한 종류의 스토리지를 정의하는 템플릿입니다.
일상생활에 비유하면:
- 서로 다른 등급의 호텔방
- 이코노미, 비즈니스, 퍼스트 클래스 좌석
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2 # SSD 타입
fsType: ext4
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
주요 구성요소:
- Provisioner: 스토리지를 만들어주는 "공장"
- Parameters: 스토리지의 세부 옵션
- ReclaimPolicy: 사용 후 데이터 처리 방식
- VolumeBindingMode: 언제 바인딩할지 결정
5. Container Storage Interface (CSI)
CSI가 뭘까요?
CSI는 모든 스토리지 시스템이 Kubernetes와 쉽게 통합될 수 있도록 만든 표준 인터페이스입니다.
일상생활에 비유하면:
- 모든 자동차가 사용하는 표준 연료 주입구
- 모든 콘센트에 맞는 플러그 표준
- 공통 인터페이스를 통한 호환성
CSI가 지원하는 볼륨 타입:
- 블록 스토리지:
- 데이터베이스처럼 성능이 중요한 애플리케이션용
- 하드디스크처럼 블록 단위로 데이터 저장
- 파일 스토리지:
- 파일 공유가 필요한 애플리케이션용
- 네트워크 드라이브처럼 작동
- 오브젝트 스토리지:
- 이미지, 비디오 같은 비정형 데이터용
- 클라우드 저장소처럼 작동
6. 로컬 볼륨 타입들
hostPath - 호스트의 로컬 폴더 사용
volumes:
- name: test-vol
hostPath:
path: /data
type: Directory
특징:
- 특정 노드의 파일시스템 사용
- 테스트나 개발 환경에 적합
- 프로덕션에서는 주의해서 사용
emptyDir - 임시 저장공간
volumes:
- name: cache-volume
emptyDir: {}
특징:
- Pod가 삭제되면 데이터도 삭제
- 캐시나 임시 파일에 적합
- 컨테이너 간 데이터 공유 가능
7. 시나리오: 웹 애플리케이션 데이터 저장
- 개발자가 PVC 생성:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: webapp-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: fast-storage
- StorageClass가 자동으로 PV 생성:
- CSI 드라이버가 AWS EBS 볼륨 생성
- 자동으로 PV 리소스 생성
- Pod에서 PVC 사용:
apiVersion: v1
kind: Pod
metadata:
name: webapp
spec:
containers:
- name: app
image: webapp:1.0
volumeMounts:
- name: data
mountPath: /app/data
volumes:
- name: data
persistentVolumeClaim:
claimName: webapp-data
'k8s' 카테고리의 다른 글
쿠버네티스 애플리케이션 배포를 위한 고급 설정: 자원 관리, 스케줄링, 그리고 배포 전략 (1) | 2025.06.01 |
---|---|
쿠버네티스 인증 및 인가: ServiceAccount와 RBAC (0) | 2025.05.11 |
Kubernetes PV-PVC 바인딩 워크플로우 (0) | 2025.04.30 |
Kubernetes 아키텍처 및 워크플로우 심층 분석 (0) | 2025.04.29 |
Nginx Ingress Controller (0) | 2025.04.27 |