쿠버네티스에서 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.claimName을 dynamic-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이 재시작되어도 데이터 유지됨