본문 바로가기

Cloud/Kubernetes

Persistent Volume과 Persistent Volume Claim

 Kubernetes는 스토리지 관리를 Persistent Volume과 Persistent Volume Claim이라는 두 가지 개념으로 제공한다. PersistentVolume(PV)는 직접 저장하는 부분이고 PersistentVolumeClain(PVC)는 사용자가 저장소에 하는 요청이다. PVC는 리소스가 얼마나 필요한지, 어떤 액세스 모드를 취할지 액션을 담고 있다.

 쉽게 이해하자면, 아래처럼 정의될 것이다.

PV = 클러스터의 리소스

PVC = 리소스에 대한 요청

PV는 Provisioning - Binding - Using - Reclaiming 의 생명주기를 가진다. 

1. Provisioning

 PV는 정적 프로비저닝과 동적 프로비저닝 두 가지 방법으로 할 수 있다. 

정적 프로비저닝 - 클러스터 관리자가 여러 PV를 생성하고 사용자가 사용할 수 있도록 제공한다.

동적 프로비저닝 - 사용자의 요청(PVC)에 알맞은 PV가 없을 경우 요청에 알맞은 PV를 생성한다. 동적 프로비저닝을 위해서 Storage Classes를 요청해야하고 관리자는 이를 사용해 프로비저닝을 발생시켜준다. StorageClass를 사용하기 위해서는  API서버에서 DefaultStorageClass 컨트롤러를 활성화 해야한다. 

2. Binding

 요청에 알맞은 스토리지와 액세스 모드를 사용할 수 있는 PV를 찾았다면 PV를 PVC에 바인딩한다. 1:1 매핑이며 요청을 초과한 리소스는 사용할 수 없다. 요청에 맞는 PV가 없으면 PVC는 알맞은 PV가 생길때까지 기다리고 있는다.

3. Using

 Pod는 Claim을 Volume로 사용한다. (Pod - PVC - PV) 클러스터는 Claim을 통해 바인딩 된 볼륨을 찾아내고 해당 볼륨을 포드에 마운트한다. 데이터의 손실을 줄이기 위해  사용중인 PVC는 함부로 삭제할 수 없다. 때문에 유저가 Pod에서 PVC를 삭제해도 PV는 곧바로 사라지지 않으며 PVC에서 바인딩을 해제했을 때 사라진다. 이는 pvc-protection으로 확인할 수 있다.

4. Reclaiming

 볼륨의 사용이 끝나고 PVC가 사라지면 PV는 회수된다. 회수된 PV는 설정에 따라 3가지 상태를 가지게 된다.

(1) Retain

  Retain은 PVC가 사라져도 PV는 여전히 남아있으며 사용했던 데이터 또한 그대로 남아있다. 빈 PV가 아니기 때문에 다른 곳에 할당되지 못하며 3가지 방법을 통해 재사용할 수 있다.

- PV를 지운다. 논리적인 할당이므로 물리적인 스토리지와는 상관없다.

- 수동으로 PV 안의 데이터를 정리한다.

- 남아있는 데이터를 사용하는 PV를 다시 만들어준다.

(2) Delete

  PV를 삭제한다. 이렇게 되면 PVC가 삭제된 이후 PV도 사라지고 데이터도 사라진다. 동적 할당의 경우 Delete가 기본이므로 남겨두고 싶다면 옵션의 수정이 필요하다.

(3) Recycle

 PV에서 데이터를 삭제한 뒤 새로운 PVC에 사용할 수 있도록 준비해준다. 현재는 쿠버네티스 환경에서 사용하고 있지 않다. (권유하고 있지 않다)