개요
kubernetes에서 사용이 끝난 PVC가 삭제되면 PVC가 사용 중이던 PV는 초기화(reclaim)하는 과정을 거친다. 초기화 정책은 3가지가 존재한다.
- Retain
PVC가 삭제되면 PV를 Released 상태로 만들어 PV를 보존한다. PV 내 데이터는 유지되지만 PV를 재사용할 수 없다. PV에 연결되어 있던 외부 스토리지 볼륨을 삭제하려면 관리자가 작업해야 한다. 또한 볼륨을 재사용하기 위해서는 해당 볼륨을 이용하는 PV를 재생성하는 등의 작업이 필요하다. - Delete
PV 및 연결되어 있던 외부 스토리지 볼륨을 삭제한다. 동적 프로비저닝으로 생성된 PV는 Delete가 기본값이다. - Recycle
Reclaiming 시 새 PVC에서 사용할 수 있는 상태로 만든다. 과정 중 PV 내 데이터는 삭제된다. 다만 지원이 어려워 deprecated 된 정책이다.
이 글에서는 아래와 같이 Retain 정책으로 인해 Released 상태로 남아있는 PV를 삭제하거나 재생성하지 않고 다시 사용하는 방법을 정리한다.
원인
Release 상태로 남아있는 PV의 정보를 yaml 형식으로 확인하면 spec.claimRet 항목에 기존 바인딩되었던 PVC 정보가 남아있는 것을 확인할 수 있다.
표시한 부분에 값이 없어야 하고, status 또한 Avaiable 상태여야 한다.
patch
edit 명령과 비슷하게 기존 리소스의 설정 정보 중 여러 필드를 수정할 때 사용한다. -p 옵션에 변경하고자 하는 설정을 YAML 또는 JSON 형식으로 전달한다. YAML 형식을 한 줄에 작성해야 하므로 띄어쓰기에 조심해야 한다.
kubectl patch (-f FILENAME | TYPE NAME) -p PATCH
PV의 spec.claimRef를 삭제하는 명령은 아래와 같다.
kubectl patch pv <PV_NAME> -p '{"spec":{"claimRef": null}}'
# 예시
kubectl patch pv pv-log -p '{"spec":{"claimRef": null}}'
yaml 형식으로 다시 값을 확인해 보면 ClaimRef 값이 삭제된 것을 확인할 수 있다.
edit
또는 edit 명령으로 PV 리소스 설정을 변경해도 된다. 아래 사진과 같이 표시한 spec.claimRef 값을 삭제하거나 주석처리한다. status 값은 수정하지 않아도 된다.
kubectl edit pv <PV_NAME>
참고 문서
https://www.skyer9.pe.kr/wordpress/?p=7478
https://jamesdefabia.github.io/docs/user-guide/kubectl/kubectl_patch/