쿠버네티스 Kubernetes 스토리지 볼륨 5 / PersistenVolume(PV) 및 PersistentVolumeClaim(PVC)
EmptyDir, hostPath 같은 경우는 스토리지에 대한 많은 지식이 필요하지 않다
하지만 네트워크 기반 스토리지의 경우 스토리지 자체의 지식이 많이 필요하다
또한 볼륨의 라이프사이클이 컨트롤러 및 파드의 생명주기가 같아 컨트롤러 및 파드가 삭제되면 볼륨도 같이 삭제된다
# PersistentVolume(PV), PersistentVolumeClaim(PVC)
컨트롤러 및 파드와 별개의 쿠버네티스 리소스이며, 파드의 생명주기와 별개로 작동
# PV
: 쿠버네티스 클러스터 외부 스토리와 연결 담당 리소스
# PVC
: PV와 파드를 연결하기 위한 리소스
- 주로 관리자는 스토리지(PV), 개발자는 PVC로 많이 사용을 하고 있어 , 개발자는 스토리지 지식이 없어도 PVC를 작성해 사용할 PV를 지정하면 원하는 볼륨을 제공받을 수 있다. (파드의 생명주기랑 별도로 볼륨 생명주기를 가지게 됨)
- 관리자는 스토리지 지식이 있으니 PV를 생성해 스토리지와 연결, 파드 개발자는 PVC를 생성해 자신의 파드 및 관리자가 제공해준 PV와 연결해 파드에서 볼륨을 사용한다.
# PV 및 PVC 생명주기 (LifeCycle)
# 프로비저닝 (Provisioning)
- PV가 만들어지는 단계
- 정적 프로비저닝
: PV를 직접 사용하고 생성한다
- 동적 프로비저닝
: 볼륨 사용 요청이 있을 때마다 자동으로 생성, 추가 리소스(스토리지 클래스) 필요
# 바인딩 (Biding)
- PVC 리소스를 만들어 준비된 PV 리소스와 연결하는 단계
- PVC 리소스에 원하는 PV 리소스나 스토리지 용량 및 접근 방법을 정의한다.
적절한 PV 리소스가 없다면 요청을 실패하고, 적절한 PV 리소스가 생성되어 연결될 때까지 대기한다.
- PV와 PVC는 1:1로 연결한다.
# 사용 (Using)
- PVC에서 제공한 볼륨을 파드가 마운트해서 사용하고 있는 단계
- 연결되어 사용중인 PV와 PVC는 임의로 삭제되지 않는다
# 회수 (Reclaiming)
- 사용이 끝난 PVC가 종료/삭제되면 연결된 PV를 회수
- 유지 정책, 삭제 정책, 재활용 정책이 있다.
A) 유지 정책 (Retain)
: PV 리소스를 그대로 유지 --> PV 리소스를 삭제하더라도 외부 스토리지를 사용하고 있으면
외부 스토리지의 데이터는 그대로 남아있다 --> 그치만 PVC를 사용할 수 있는 건아니다
(수동으로 볼륨 회수)
- PV 삭제(외부 데이터 남아있음)
- 데이터가 더 이상 필요하지않으면 실제 스토리지에서도 삭제(자원낭비 방지)
- 동일한 데이터를 사용해야하면 해당 데이터를 가지고 둔 상태에서 PV리소스를 다시 생성
B) 삭제 정책 (Delete)
: PVC 리소스가 삭제되면 PV 리소스도 같이 삭제되고 연결되어 있는 외부 스토리지(실제 데이터)도
삭제된다. (파드만 삭제해서 다시 연결할 수 있다) --> 자동으로 PV가 만들어진다(PVC만 안지우면
데이터는 없어지지 않는다.)
- 동적 프로비저닝, AWS, GCP, Azure의 기본 정책이다
C) 재활용 정책 (Recycle)
: 말그대로 PV를 재활용하는 것, 근데 스토리지마다 다르기 때문에 구현하기 어렵다.
- NFS, hostPath 볼륨 지원