DevOps/Kubernetes

쿠버네티스 스토리지: Persistent Volume(PV)

techrybbit 2025. 3. 4. 21:17

쿠버네티스의 스토리지와 관련된 리소스는 3가지가 있습니다.
 
1. Persistent Volume(PV)
2. Persistent Volume Claim(PVC)
3. StorageClass
 
그중에서 2가지 리소스인 Persistent Volume(PV)와 Persistent Volume Claim(PVC)에 대해서 알아보겠습니다.
 
 
먼저, 쿠버네티스의 데이터 영속성(persistent)이라는 용어부터 정리해보겠습니다.
 

데이터 영속성(persistent)


쿠버네티스의 데이터 영속성(Persistence이란, 컨테이너가 종료되거나 다시 실행되더라도 데이터가 지속적으로 보존되는 것을 의미합니다.
 
즉, 임시 데이터가 아니라 영구적으로 유지되는 데이터를 의미하는 개념입니다.
 
예를 들어 파드의 EmptyDir라는 비영속적, 임시적인 스토리지가 있습니다.
EmptyDir라는 친구는 파드가 삭제되면, 같이 삭제됩니다.(친구 따라 강남 가는 느낌)
 
하지만 Persistent Volume(PV)라는 영속적인 스토리지는 다릅니다.
파드가 삭제되더라도, Persistent Volume(PV)는 같이 삭제되지 않습니다.(마이웨이, 나의 길이 있습니다.)
 
(참고) PV를 삭제하려면, PV 삭제하겠다고 명시적으로 적어야함
 
 

PersistenceVolume(PV)


Persistent(영속적)인 데이터 저장소
이며, 쿠버네티스 클러스터 레벨의 리소스입니다.
 
PV의 STATUS(상태)로는 크게 두가지가 있습니다.
 
1. STATUS가 Available이면, 아직 PV를 아무도 안 쓰고 있는 상태입니다.
2. STATUS가 Bound이면, 어떤 파드가 PV를 쓰고 있는 상태입니다.
 

Persistent Volume Claim(PVC)


파드가 PV를 마운트 받고 싶을 때 사용하는 주문서같은 리소스입니다.
 
비유하자면, 중고차를 사러 온 손님이라고 볼 수 있습니다.
 
손님은 아래와 같은 조건에 맞는 PV를 요청합니다.

  • StorageClassName
  • accessModes
  • resources

 
실제 쿠버네티스로 구현할 때는, 아래와 같이 실행합니다.
 
1. PV 생성
2. PVC를 생성
3. Pod YAML의 Volume부분에 PVC를 작성하고, Pod를 생성
4. PVC에 명시되어있는 PV를 Pod에 할당
5. Pod 삭제시, PV와 PVC는 삭제되지않음
 
 

왜 굳이 이렇게 구분 지어 나눌까?


굳이 PVC라는걸 추가해서 PV를 마운트할까요?

미리 PV를 생성해 두고, PVC의 조건에 맞는 PV를 가져가도록 하면 수동으로 PV를 만들 필요 없이, 요청 시 조건에 맞는 PV가 자동으로 할당되어 더 효율적으로 운영할 수 있기 때문입니다.
 
이를 중고차 구매 심리에 빗대어 설명해 보겠습니다.
 
새 차를 주문하면 제작까지 오랜 시간이 걸리지만, 중고차 매장에서 조건에 맞는 차량을 바로 선택하면 더 빠르게 구매할 수 있습니다.
 
마찬가지로, 사용자가 직접 스토리지를 생성하는 대신, 미리 준비된 PV 중에서 PVC가 적절한 것을 찾아 즉시 할당받도록 하는 것이 더 효율적입니다.
 
 
참고자료

  • 핵심만 콕! 쿠버네티스: 스토리지
728x90