Kubernetes가 9월 21일 글에서 PersistentVolumeClaimUnusedSinceTime 기능 게이트를 1.37의 기본 활성 베타로 소개했다. PVC(PersistentVolumeClaim)는 Pod가 저장소를 요청하는 객체다.

PVC 보호 컨트롤러가 각 PVC에 Unused 조건을 붙인다. Unused=True는 종료되지 않은 Pod가 그 PVC를 참조하지 않는다는 뜻이다.

스케줄되지 못한 Pending Pod도 사용 중으로 친다. 완료(Succeeded)나 실패(Failed) 상태의 Pod는 제외한다.

글은 조건 상태를 확인하는 명령을 이렇게 안내한다.

kubectl get pvc my-data -o jsonpath='{.status.conditions[?(@.type=="Unused")].status}'

주의할 점: 관찰 시각과 기능 해제 후의 낡은 조건

KEP-5541에 따르면 lastTransitionTime은 컨트롤러가 참조 없음을 관찰한 시각이다. 인프라에서 실제로 언마운트된 시각이 아니며, 보고된 미사용 기간은 실제보다 짧을 수는 있어도 길지는 않다.

기능을 끄면 기존 Unused 조건은 etcd에 남지만 더 갱신되지 않는다. 업그레이드 직후의 PVC에는 전환이 관찰될 때까지 조건이 없을 수 있다.

미사용 PVC 자동 삭제는 설계 목표에서 명시적으로 빠졌다. 여기 적은 동작은 자료의 정의이며, 시험 클러스터에서 관측한 결과가 아니다.

회수 정책이 정하는 실제 삭제 범위

정리 작업의 결과는 회수 정책(reclaim policy)이 정한다. 지원 플러그인에서 Delete 정책은 PersistentVolume과 실제 저장소를 함께 제거한다.

동적으로 만든 볼륨은 StorageClass의 회수 정책을 따르며, 그 기본값이 Delete다. 참조가 없다는 신호만으로 데이터를 지워도 되는지는 알 수 없다.

읽기 전용 검토 목록부터 만드는 순서

Unused=True PVC를 읽기 전용 목록으로 먼저 모은다. 정리 전에 소유자, 재사용 계획, 백업, 실제 회수 정책을 확인한다.

조건이 없거나 기능을 껐던 기간이 있다면 그 값만으로는 근거가 부족하다.

Unused 조건은 삭제 권한이 아니라, 누군가 확인해야 할 PVC 목록이다.