본문 바로가기

Container/Kubernetes

[K8S] StorageClass

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 프로비저닝)

  1. PV(PersistentVolume)는 정적인 볼륨으로,  관리자가 PersistentVolume (PV)를 미리 생성해야 한다.
  2. 사용자가 PersistentVolumeClaim (PVC)를 정의하여 PV를 요청한다.
  3. 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