AI Briefing

Kubernetes StatefulSet 스토리지 확장: Non-cascade 전략으로 무중단 Immutable 제약 극복

·2026.04.23 14:39

PVC를 먼저 확장한 뒤 StatefulSet을 Non-cascade로 재생성해 무중단 확장을 구현했다.

StatefulSet 환경에서는 volumeClaimTemplatesImmutable이라 스토리지 용량을 직접 수정할 수 없다. 데이터 영속성이 필요한 DB나 메시지 큐는 디스크를 버릴 수 없고, 운영 중 가용성도 유지해야 하므로 일반적인 재배포 방식으로는 해결이 어렵다.

해결책은 Online Volume ExpansionNon-cascade 재배포를 결합하는 방식이다. 먼저 PVC의 용량을 늘리면 CSI 드라이버와 kubelet이 볼륨 및 파일시스템 확장을 처리하고, 그다음 StatefulSet을 --cascade=orphan으로 삭제해 Pod는 유지한 채 컨트롤러만 분리한다.

절차는 다음과 같다.

  • Step 1. PVC 용량을 먼저 확장한다. kubectl patch pvc <pvc-name> -p '{"spec":{"resources":{"requests":{"storage":"100Gi"}}}}'
  • Step 2. StatefulSet을 Non-cascade로 삭제한다. ArgoCD에서는 Non-cascade 옵션을 체크하고, CLI에서는 kubectl delete sts <name> --cascade=orphan을 사용한다.
  • Step 3. 수정된 용량을 반영한 새 StatefulSet manifest를 배포한다. 이때 volumeClaimTemplates의 용량은 실제 PVC와 정확히 일치해야 한다.
  • Step 4. Pod 안에서 용량 반영을 확인한다. kubectl exec -it <pod-name> -- df -h로 확인하고, 반영이 지연되면 RollingUpdatekubectl rollout restart sts <name>, OnDelete는 Pod를 하나씩 수동 삭제해 재마운트를 유도한다.

핵심은 물리적 확장(PVC) → 명세 업데이트(STS) 순서를 지키는 것이다. 순서를 거꾸로 하면 API 서버가 기존 PVC와 새 템플릿의 용량 불일치를 이유로 배포를 차단한다. 작업 후에는 컨트롤러와 실제 리소스의 생명주기를 분리해 관리해야 안전하게 운영할 수 있다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.