본문 바로가기
IT 개발/클라우드

[쿠버네티스] 스토리지 클래스 완벽 가이드

by 이것 저것 모든것 2025. 2. 12.
728x90

1. 스토리지 클래스 개요

스토리지 클래스(StorageClass)는 관리자가 제공하는 스토리지의 "클래스"를 설명할 수 있게 해주는 리소스입니다. 다양한 품질의 서비스 수준, 백업 정책, 클러스터에 맞춤화된 임의의 정책을 설정할 수 있습니다.

2. 기본 스토리지 클래스 설정

2.1 기본 스토리지 클래스

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer

2.2 성능 최적화 스토리지 클래스

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1
  iopsPerGB: "10"
reclaimPolicy: Retain
allowVolumeExpansion: true

3. 클라우드 제공자별 설정

3.1 AWS EBS

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aws-fast
provisioner: kubernetes.io/aws-ebs
parameters:
  type: io1
  iopsPerGB: "10"
  encrypted: "true"
  kmsKeyId: arn:aws:kms:us-east-1:123456789012:key/abc-def-123

3.2 Google Cloud Persistent Disk

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: gcp-standard
provisioner: kubernetes.io/gce-pd
parameters:
  type: pd-standard
  replication-type: none

3.3 Azure Disk

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azure-premium
provisioner: kubernetes.io/azure-disk
parameters:
  storageaccounttype: Premium_LRS
  kind: Managed

4. 고급 설정

4.1 볼륨 확장 설정

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: expandable-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
allowVolumeExpansion: true

4.2 볼륨 바인딩 모드

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: delayed-binding
provisioner: kubernetes.io/aws-ebs
volumeBindingMode: WaitForFirstConsumer
728x90

5. 사용 예시

5.1 PVC 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: standard
  resources:
    requests:
      storage: 10Gi

5.2 Pod에서 PVC 사용

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myapp
      image: nginx
      volumeMounts:
      - name: my-storage
        mountPath: "/data"
  volumes:
    - name: my-storage
      persistentVolumeClaim:
        claimName: my-pvc

6. 백업과 복구

6.1 스냅샷 클래스 정의

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: standard-snapclass
driver: ebs.csi.aws.com
deletionPolicy: Delete

6.2 볼륨 스냅샷 생성

apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: my-snapshot
spec:
  volumeSnapshotClassName: standard-snapclass
  source:
    persistentVolumeClaimName: my-pvc

7. 모니터링과 관리

7.1 용량 모니터링

  • 스토리지 사용량 추적
  • 경고 임계값 설정
  • 자동 확장 정책

7.2 성능 모니터링

  • IOPS 모니터링
  • 지연 시간 추적
  • 대역폭 사용량

8. 베스트 프랙티스

  1. 적절한 스토리지 유형 선택
  2. 비용 최적화 고려
  3. 백업 전략 수립
  4. 성능 요구사항 정의
  5. 보안 정책 설정

9. 문제 해결

9.1 일반적인 문제

  • PVC 생성 실패
  • 볼륨 마운트 오류
  • 성능 저하
  • 용량 부족

9.2 문제 해결 명령어

# PV/PVC 상태 확인
kubectl get pv,pvc

# 스토리지 클래스 확인
kubectl get sc

# 이벤트 확인
kubectl get events

# Pod 로그 확인
kubectl logs <pod-name>
728x90