1️⃣ 개요
StatefulSet을 사용하는 애플리케이션은 데이터가 증가함에 따라 Persistent Volume(PV)의 크기를 확장해야 하는 경우가 발생할 수 있습니다.
기본적으로 Kubernetes의 PVC는 생성 이후 크기를 변경할 수 없지만, StorageClass의 동적 프로비저닝 기능을 활용하면 PVC 크기를 확장할 수 있습니다.
이번 글에서는 StatefulSet에서 PVC 크기를 동적으로 확장하는 방법과, 이를 적용할 때 고려해야 할 사항을 설명하겠습니다. 🚀
2️⃣ StatefulSet에서 PVC 크기를 확장해야 하는 이유
📌 PVC 크기 확장이 필요한 주요 상황
상황 | 설명 |
데이터베이스 용량 증가 | MySQL, PostgreSQL, MongoDB 등에서 데이터가 지속적으로 증가 |
로그 저장소 증가 | Elasticsearch, Kafka 등의 로그 데이터가 예상보다 빨리 증가 |
파일 저장소 확장 | 애플리케이션에서 저장하는 파일이 많아질 경우 |
✅ PVC를 확장하지 않으면 애플리케이션이 정상적으로 동작하지 않거나 장애가 발생할 수 있습니다.
3️⃣ PVC 크기 확장을 위한 사전 준비
PVC 크기 확장을 위해 StorageClass에 allowVolumeExpansion: true 옵션이 활성화되어 있어야 합니다.
📌 StorageClass 확인 명령어
kubectl get storageclass
출력 예시:
NAME PROVISIONER ALLOWVOLUMEEXPANSION
standard (default) kubernetes.io/aws-ebs true
✅ ALLOWVOLUMEEXPANSION이 true로 설정되어 있어야 PVC 크기 확장이 가능합니다.
📌 StorageClass 수정 예제 (allowVolumeExpansion 활성화)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-storage
provisioner: kubernetes.io/aws-ebs
allowVolumeExpansion: true
parameters:
type: gp3
📌 StorageClass 적용
kubectl apply -f storageclass.yaml
✅ 이제 PVC 크기를 동적으로 확장할 수 있는 상태가 되었습니다.
4️⃣ StatefulSet에서 PVC 크기 확장 방법
📌 (1) PVC 크기 변경
kubectl patch pvc mysql-data-mysql-0 -p '{"spec":{"resources":{"requests":{"storage":"20Gi"}}}}'
✅ PVC 크기가 10Gi → 20Gi로 변경됩니다.
📌 (2) PVC 크기 변경 확인
kubectl get pvc
출력 예시:
NAME STATUS VOLUME CAPACITY STORAGECLASS
mysql-data-mysql-0 Bound pvc-1234abcd 20Gi fast-storage
✅ PVC의 크기가 정상적으로 확장되었는지 확인해야 합니다.
5️⃣ PVC 크기 변경 후 StatefulSet 적용 방법
PVC 크기를 변경한 후, 일부 StatefulSet 기반 애플리케이션은 Pod를 재시작해야 변경 사항이 적용됩니다.
📌 (1) StatefulSet Pod 재시작 (Rolling Restart)
kubectl rollout restart statefulset mysql
✅ PVC 크기가 변경된 후, StatefulSet을 재시작하여 변경 사항을 반영할 수 있습니다.
📌 (2) Pod가 새로운 PVC 크기를 인식했는지 확인
kubectl exec -it mysql-0 -- df -h
출력 예시:
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 5G 15G 25% /var/lib/mysql
✅ PVC 크기가 정상적으로 반영되었는지 확인해야 합니다.
6️⃣ StatefulSet PVC 확장 시 고려해야 할 사항
✅ 1. PVC 크기 축소는 불가능함
PVC 크기는 확장만 가능하고, 줄이는 것은 지원되지 않습니다.
만약 PVC 크기를 줄이고 싶다면 새로운 PVC를 생성하고 데이터를 마이그레이션해야 합니다.
✅ PVC 크기를 잘못 설정하지 않도록 주의해야 합니다.
✅ 2. 일부 파일 시스템에서는 추가 설정이 필요함
PVC 크기를 변경해도 Pod 내부의 파일 시스템이 확장되지 않을 수도 있습니다.
📌 XFS 및 ext4 파일 시스템 확장 명령어
resize2fs /dev/xvda1 # ext4 기반
xfs_growfs /var/lib/mysql # XFS 기반
✅ PVC 크기 변경 후 파일 시스템이 정상적으로 확장되었는지 확인해야 합니다.
✅ 3. 특정 클라우드 환경에서의 PVC 크기 변경 지원 여부 확인
각 클라우드 제공업체(AWS, GCP, Azure)의 스토리지마다 PVC 크기 확장 정책이 다를 수 있습니다.
📌 AWS EBS PVC 크기 변경 적용 명령어 (필요 시 실행)
aws ec2 modify-volume --volume-id vol-123456 --size 20
✅ 사용 중인 클라우드 환경에서 PVC 확장 지원 여부를 반드시 확인해야 합니다.
🔥 7️⃣ 결론
✔ PVC 크기를 확장하려면 StorageClass에서 allowVolumeExpansion: true가 활성화되어 있어야 함
✔ kubectl patch pvc 명령어를 사용하여 PVC 크기를 확장할 수 있음
✔ PVC 크기 변경 후 StatefulSet Pod를 재시작하여 변경 사항을 적용할 수 있음
✔ 일부 파일 시스템(ext4, XFS)에서는 추가적으로 파일 시스템 크기를 확장해야 할 수도 있음
✔ PVC 크기는 확장만 가능하며, 크기를 줄이는 것은 지원되지 않음
✔ 클라우드 환경(AWS, GCP, Azure)에 따라 PVC 확장 정책이 다를 수 있으므로 사전에 확인 필요