개발/네트워크 & 인프라

PV와 PVC 뭐가 다를까?

최근 면접을 보는 중에 PV와 PVC에 대한 차이에 대한 질문을 받았습니다.

아는 만큼 대답을 하긴 했는데, 면접을 끝나고 계속 생각이나 바로 찾아보니 완전히 잘못 대답을 했다는 것을 알게 되었습니다.

그래서 이렇게 정리를 해보고자 글을 작성하기로 했습니다.

 

우선 PV, PVC는 각각 PersistentVolume, PersistentVolumeClaim의 줄임말입니다.

PersistentVolume은 그대로 번역하면 지속성 있는 볼륨 이라고 부릅니다.

이 지속성있는 볼륨, 퍼시스턴트 볼륨은 왜 이런 이름을 가졌을까요?

 

쿠버네티스에서는 Pod가 삭제되고 다시 생성되는 일이 빈번하게 발생합니다.

이때 컨테이너 내부의 임시 파일 시스템에 저장한 데이터는 컨테이너가 재생성되면서 사라질 수 있습니다.

그래서 계속 유지해야 하는 파일이 있다면 그것을 유지하기 위해 이것이 필요합니다.

 

그렇다면 PV와 PVC는 어떤 차이가 있을까요?

우선 쿠버네티스 공식 사이트의 설명을 보면 아래의 내용이 있습니다.

퍼시스턴트볼륨 (PV)은 관리자가 프로비저닝하거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지이다. 노드가 클러스터 리소스인 것처럼 PV는 클러스터 리소스이다. PV는 Volumes와 같은 볼륨 플러그인이지만, PV를 사용하는 개별 파드와는 별개의 라이프사이클을 가진다. 이 API 오브젝트는 NFS, iSCSI 또는 클라우드 공급자별 스토리지 시스템 등 스토리지 구현에 대한 세부 정보를 담아낸다.

정리하자면, 쿠버네티스 클러스터에서 사용할 수 있는 스토리지 리소스를 추상화한 API 객체를 PV라고 합니다. PV에는 스토리지의 용량, 접근 모드, 실제 스토리지 시스템에 대한 정보 등이 정의됩니다. PV는 관리자가 직접 생성할 수도 있고, StorageClass를 이용해 동적으로 생성할 수도 있습니다.

노드가 클러스터의 프로세싱 리소스를 말하는 것이라면, PV는 클러스터의 스토리지 리소스를 말한다고 생각하면 쉽습니다.

 

그러면 PVC, 지속성 있는 볼륨 요청은 무엇을 말할까요?

퍼시스턴트볼륨클레임(PVC)은 사용자의 스토리지에 대한 요청이다. 파드와 비슷하다. 파드는 노드 리소스를 사용하고 PVC는 PV 리소스를 사용한다. 파드는 특정 수준의 리소스(CPU 및 메모리)를 요청할 수 있다. 클레임은 특정 크기 및 접근 모드를 요청할 수 있다(예: ReadWriteOnce, ReadOnlyMany 또는 ReadWriteMany로 마운트 할 수 있음. AccessModes참고).

정리를 조금 해보자면, 사용자가 필요한 스토리지의 용량과 접근 모드 등을 요청하기 위한 API 객체가 PVC라고 합니다. PVC가 생성되면 쿠버네티스는 요청 조건에 맞는 PV를 찾아 바인딩합니다. 만약 적절한 PV가 존재하지 않는다면 StorageClass를 통한 동적 프로비저닝으로 새로운 PV가 생성될 수도 있습니다.

 

 

참고 자료

https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/

https://wikidocs.net/337572

'개발/네트워크 & 인프라'의 다른 글