StatefulSet PVC 보존 정책 — 기본값은 '스케일다운해도 안 지운다'
Kubernetes StatefulSet PVC Retention Policy 및 Native Sidecar Containers 공식 문서 종합 (웹 리서치, 2026) — Kubernetes 공식 문서·블로그(StatefulSet PVC Auto-Deletion), KEP-753(Sidecar Containers) Kubernetes 공식 블로그 StatefulSet PVC Auto-Deletion (beta)
이 모듈을 다 읽으면
- StatefulSet을 스케일다운해도 PVC가 기본적으로 남는 이유를 설명할 수 있다
- persistentVolumeClaimRetentionPolicy의 whenScaled/whenDeleted 두 축을 구분해 설명할 수 있다
k8s-learn-03에서 다룬 StatefulSet의 순서 있는 고유 정체성(web-0, web-1...)을 전제로, 그 정체성에 묶인 PVC가 스케일다운·삭제 시 각각 어떻게 되는지를 정리한다.
왜 기본값이 '보존'인가 — 데이터 유실을 막기 위한 보수적 선택
StatefulSet의 각 Pod(예: web-0, web-1, web-2)는 각자 전용 PVC를 갖는다. replica 수를 3에서 1로 줄이면 web-1, web-2 Pod는 삭제되지만, 그 Pod들이 쓰던 PVC는 기본적으로 그대로 남는다 — Kubernetes가 PVC를 지워버리면 거기 바인딩된 PersistentVolume이 회수(recycle)되거나 삭제될 수 있어 데이터 유실로 이어지기 때문에, 기본값을 보수적으로 '보존(Retain)'으로 잡은 것이다. 이후 다시 replica를 3으로 늘리면(스케일업), 새로 생기는 web-1, web-2는 남아있던 그 PVC를 그대로 재사용한다.
핵심 포인트
- StatefulSet의 각 Pod는 전용 PVC를 가짐 — 스케일다운으로 Pod가 삭제돼도 PVC는 기본적으로 그대로 남음(데이터 유실 방지를 위한 보수적 기본값)
- 다시 스케일업하면 새로 생기는 같은 인덱스의 Pod가 남아있던 PVC를 그대로 재사용
persistentVolumeClaimRetentionPolicy — whenScaled와 whenDeleted를 따로 지정한다
이 기본 동작을 바꾸려면 StatefulSet 스펙에 persistentVolumeClaimRetentionPolicy를 지정한다 — whenScaled(스케일다운 시 어떻게 할지)와 whenDeleted(StatefulSet 자체를 삭제할 때 어떻게 할지) 두 축을 각각 Retain 또는 Delete로 독립적으로 설정할 수 있다. 예를 들어 whenScaled: Delete로 설정하면 스케일다운 시 그 PVC가 자동으로 삭제되지만, whenDeleted: Retain으로 함께 설정하면 StatefulSet 자체를 통째로 지워도 PVC는 남긴다는 식으로 두 상황을 다르게 다룰 수 있다. 이 기능(StatefulSetAutoDeletePVC)은 1.23에서 알파로 시작해 1.27 베타, 1.32에서 stable로 승격됐다.
핵심 포인트
- persistentVolumeClaimRetentionPolicy.whenScaled: 스케일다운 시 정책(Retain/Delete) / .whenDeleted: StatefulSet 자체 삭제 시 정책(Retain/Delete) — 서로 독립적으로 설정 가능
- 예: whenScaled=Delete + whenDeleted=Retain 조합도 가능 — 스케일다운은 자동 정리하되 StatefulSet 삭제 시엔 데이터 보존