Kubernetes/Kubernetes Advanced

📌 [StatefulSet 심화편 #19] StatefulSet에서 PVC 크기 동적 조정 (볼륨 확장 방법)

ygtoken 2025. 3. 14. 10:17
728x90

 

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 확장 정책이 다를 수 있으므로 사전에 확인 필요

 

728x90