StorageClass는 동적인 스토리지 프로비저닝(Dynamic Provisioning)을 관리하는 방식을 정의하는 리소스이다.
즉, PVC(PersistentVolumeClaim)가 요청할 때 어떤 유형의 스토리지를 사용할지 결정하는 역할을 한다.
Public Cloud 환경에서 필수 항목이다. (on-premise 환경에서는 필수가 아님)
✅ 스토리지 동적 생성 가능 (수동으로 PV를 생성할 필요 없음)
✅ 다양한 스토리지 백엔드를 지원 (AWS EBS, Google Persistent Disk, NFS 등)
✅ 리소스 자동 할당 가능 (PVC가 요청하면 자동으로 스토리지 생성)
✅ 스토리지 종류에 따라 성능 및 정책을 다르게 설정 가능
StorageClass에는 해당 StorageClass에 속하는 PV를 동적으로 프로비저닝 할 때 사용되는 다음 필드들이 있다.
- provisioner: 어떤 스토리지 백엔드를 사용할지 정의
- 각 스토리지클래스에는 PV 프로비저닝에 사용되는 볼륨 플러그인을 결정하는 프로비저너가 있다.(필수)
- kubernetes.io/aws-ebs, kubernetes.io/gce-pd, ceph.rook.io/block
- parameters: 스토리지 옵션 (타입, 파일시스템 등)
- type: gp2, fsType: ext4
- reclaimPolicy: PVC 삭제 후 PV 유지 여부 (기본값: Delete)
- Retain: PVC가 삭제되더라도 PV는 유지됨 (데이터 보호)
- Delete: PVC 삭제 시 PV도 자동 삭제됨 (완전 제거)
- allowVolumeExpansion: 볼륨 크기 확장 가능 여부 (true를 설정하면, PVC의 크기를 동적으로 변경 가능)
- mountOptions: 마운트 시 추가 옵션
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Retain
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate
기존 방식 (수동 PV 프로비저닝)
- PV(PersistentVolume)는 정적인 볼륨으로, 관리자가 PersistentVolume (PV)를 미리 생성해야 한다.
- 사용자가 PersistentVolumeClaim (PVC)를 정의하여 PV를 요청한다.
- PVC와 PV가 수동으로 매칭된다.
🚨 문제점:
- 새로운 PVC 요청이 생길 때마다 PV를 미리 만들어야 하는 운영 부담 발생
- 다양한 스토리지 옵션을 적용하기 어려움
➡ StorageClass를 사용하면 PVC가 생성될 때 자동으로 PV를 프로비저닝할 수 있다.
- StorageClass 목록 확인
$ kubectl get storageclass
dynamic volume provisioning
동적 프로비저닝을 활성화하려면 클러스터 관리자가 사용자를 위해 하나 이상의 스토리지클래스(StorageClass) 오브젝트를 사전 생성해야 한다. 스토리지클래스 오브젝트는 동적 프로비저닝이 호출될 때 사용할 provisioner와 해당 provisioner에게 전달할 파라미터를 정의한다.
- 온-디맨드 방식으로 스토리지 볼륨을 생성
- 사용자가 스토리지를 요청하면 자동으로 프로비저닝
- 하나 이상의 StorageClass 오브젝트를 사전 생성
# SSD와 같은 퍼시스턴트 디스크를 프로비전하는 스토리지 클래스 fast
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
# pvc 생성
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim1
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast # 스토리지클래스 선택
resources:
requests:
storage: 30Gi
→ 이 클레임의 결과로 SSD와 같은 퍼시스턴트 디스크가 자동으로 프로비전 되며, 클레임이 삭제되면 볼륨이 삭제된다. (default)
Default StorageClass
PVC가 특정 StorageClass를 명시하지 않았을 때 자동으로 적용되는 StorageClass이다.
- 클러스터 운영 시 하나의 표준 StorageClass를 사용하여 관리 일관성을 유지하고 싶을 때 사용한다.
- 관리자는 storageclass.kubernetes.io/is-default-class annotation을 추가하여 특정 StorageClass 를 기본으로 표시할 수 있다.
- storageClassName 를 지정하지 않은 PVC를 작성하면, DefaultStorageClass 어드미션 컨트롤러가 default StorageClass를 가리키는 storageClassName 필드를 자동으로 추가한다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: my-default-storage
annotations:
storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
reclaimPolicy: Delete
allowVolumeExpansion: true
참고:
'Container > Kubernetes' 카테고리의 다른 글
[K8S] CKA 시험 정리 (0) | 2025.02.26 |
---|---|
[K8S] Gateway API (0) | 2025.02.26 |
[K8S] Autoscaling - VPA (0) | 2025.02.26 |
[K8S] Autoscaling - HPA (0) | 2025.02.26 |
[K8S] Mutating/Validating Admission Controller (0) | 2025.02.24 |