Kubernetes/Kubernetes Best Practices

[Scenario Playbook Ep.35] 🚀 PersistentVolume 편 #2 | StorageClass를 활용한 동적 볼륨 프로비저닝

ygtoken 2025. 3. 16. 17:49
728x90

 

쿠버네티스에서 StorageClass를 활용하면 PersistentVolume(PV)을 동적으로 생성할 수 있습니다.

이번 글에서는 StorageClass를 사용하여 자동으로 PersistentVolume을 프로비저닝하고, 이를 PersistentVolumeClaim(PVC)에서 활용하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1️⃣ StorageClass를 활용한 자동 PersistentVolume 생성

2️⃣ PVC에서 StorageClass를 지정하여 볼륨 프로비저닝

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ StorageClass를 활용한 자동 PersistentVolume 생성

 

❓ 문제 상황

 

운영팀에서 수동으로 PersistentVolume을 생성하지 않고, 필요할 때마다 자동으로 생성되도록 설정해야 하는 요구사항이 생겼습니다.

StorageClass를 활용하면 PVC가 요청될 때 자동으로 PV를 생성하여 스토리지를 제공할 수 있습니다.

fast-storage라는 이름의 StorageClass를 생성해야 합니다.

PV의 크기는 10Gi로 설정해야 합니다.

Delete 정책을 적용하여 PVC 삭제 시 PV도 자동 삭제되도록 설정해야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. StorageClass를 생성하여 PV를 동적으로 프로비저닝하도록 설정해야 합니다.

provisioner: kubernetes.io/aws-ebs → 클라우드 환경에서 지원하는 스토리지 프로비저너 설정 가능

reclaimPolicy: Delete → PVC 삭제 시 PV도 함께 삭제

 

2. PVC에서 StorageClass를 참조하면 PV가 자동으로 생성되도록 설정해야 합니다.

 


✅ 정답 Manifest (StorageClass 및 PVC 설정)

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-storage  # StorageClass 이름
provisioner: kubernetes.io/aws-ebs  # AWS EBS 볼륨을 동적 프로비저닝
reclaimPolicy: Delete  # PVC 삭제 시 PV도 자동 삭제
parameters:
  type: gp2  # 스토리지 유형 (AWS EBS의 경우 gp2 사용)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: dynamic-pvc  # PVC 이름
spec:
  storageClassName: fast-storage  # StorageClass 지정
  accessModes:
    - ReadWriteOnce  # 하나의 Pod에서만 읽기/쓰기 가능
  resources:
    requests:
      storage: 10Gi  # 요청하는 스토리지 크기

 

 


📌 적용 후 예상 결과 값

 

1. StorageClass 및 PVC 생성 확인

kubectl get storageclass
kubectl get pvc

 

💡 예상 출력 값

NAME            PROVISIONER             AGE
fast-storage   kubernetes.io/aws-ebs   5s
NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
dynamic-pvc   Bound    pvc-12345678-abcd-efgh-ijkl-123456789012   10Gi       RWO            fast-storage   5s

 

 


2️⃣ PVC에서 StorageClass를 지정하여 볼륨 프로비저닝

 

❓ 문제 상황

 

운영팀에서 애플리케이션이 StorageClass를 사용하여 자동으로 스토리지를 할당받도록 설정해야 하는 요구사항이 생겼습니다.

StorageClass를 적용하면 PVC가 요청될 때마다 자동으로 PV를 생성하고, 이를 Pod에서 활용할 수 있습니다.

Pod에서 dynamic-pvc를 사용하여 /data 경로에 볼륨을 마운트해야 합니다.

PVC를 요청할 때마다 새로운 PV가 자동으로 생성되어야 합니다.

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Pod을 생성할 때, PVC를 volumeMounts로 마운트하여 스토리지를 활용하도록 설정해야 합니다.

volumes.persistentVolumeClaim.claimNamedynamic-pvc로 지정

 

2. PVC가 자동으로 StorageClass를 참조하여 새로운 PV를 생성하는지 확인해야 합니다.

 


✅ 정답 Manifest (Pod에서 StorageClass 기반 PVC 마운트 설정)

apiVersion: v1
kind: Pod
metadata:
  name: storageclass-pod  # Pod 이름
spec:
  containers:
  - name: busybox
    image: busybox
    command: ["sh", "-c", "echo 'StorageClass Data' > /data/test.txt && sleep 3600"]
    volumeMounts:
    - mountPath: "/data"
      name: storage
  volumes:
  - name: storage
    persistentVolumeClaim:
      claimName: dynamic-pvc  # StorageClass 기반 PVC 사용

 

 


📌 적용 후 예상 결과 값

 

1. PVC 요청 후 PV가 자동 생성되었는지 확인

kubectl get pvc
kubectl get pv

 

💡 예상 출력 값

NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
dynamic-pvc   Bound    pvc-12345678-abcd-efgh-ijkl-123456789012   10Gi       RWO            fast-storage   5s
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   AGE
pvc-12345678-abcd-efgh-ijkl-123456789012   10Gi       RWO            Delete           Bound    default/dynamic-pvc   fast-storage   5s

 

2. Pod 생성 후 데이터 저장 확인

kubectl exec storageclass-pod -- cat /data/test.txt

 

💡 예상 출력 값

StorageClass Data

 

3. Pod 삭제 후 다시 생성한 후 데이터 유지 확인

kubectl delete pod storageclass-pod
kubectl apply -f storageclass-pod.yaml
kubectl exec storageclass-pod -- cat /data/test.txt

 

💡 예상 출력 값

StorageClass Data  # Pod이 재시작되어도 데이터 유지됨
728x90