처음부터 차근차근

[Kubernetes] PV, PVC의 개념 본문

Devops/Kubernetes

[Kubernetes] PV, PVC의 개념

HangJu_95 2024. 8. 22. 22:53
728x90

Kubernetes Volumes의 정의

쿠버네티스 파드 내에서 돌아가는 컨테이너는 고유한 파일 시스템을 갖는다. 파일 시스템은 컨테이너 이미지에서 제공되기 때문이다.
컨테이너 내의 디스크에 있는 파일은 임시적이며, 컨테이너에서 실행될 때 애플리케이션에 적지 않은 몇 가지 문제가 발생한다.

  • 컨테이너가 재시작될 때 파일이 손실된다는 것이다. 컨테이너를 다시 시작하면 초기화된 상태이기 떄문이다.
  • Pod에서 같이 실행되는 컨테이너 간에 파일을 공유할 때 발생한다.

이러한 문제를 해결하기 위해 쿠버네티스는 볼륨 추상화를 제공하고 있다.

Kubernetes Volumes의 배경

Ephemeral volume(일회성의 볼륨)은 pod의 life time에 따라 결정되지만, persistent volume(PV, 영구적인 볼륨)은 pod의 life time을 넘어 영구적으로 보존된다.

Kubernetes는 수많은 Volume type을 지원한다. 또한 Pod는 상황에 따라 다양한 볼륨 형태를 사용할 수 있다.

Volume의 핵심

Volume은 Pod의 Container에 엑세스 할 수 있는 일부 데이터가 포함된 directory이다.
즉, 간단히 말하면 Container에서 읽고, 쓰기 작업이 가능한 폴더라는 말.

Persistent Volumes

한국어로 번역하면, 영구적인 볼륨을 의미한다.

공식 문서에 따르면, PV를 이렇게 표현하고 있다.
A PersistentVolume (PV) is a piece of storage in the cluster that has been provisioned by an administrator or dynamically provisioned using Storage Classes.

즉, 클러스터의 Storage, 저장소라는 의미이다.

관리자가 프로비저닝한 cluster의 storage 혹은 동적으로 provisioning한 cluster의 storage이다.
Node와 같은 k8s Cluster의 자원이라고 생각하면 되며, PV는 볼륨과 같은 볼륨 플러그인이지만 PV를 사용하는 개별 Pod와 독립적인 수명 주기를 갖는다.

NFS, 클라우드 스토리지 시스템 등 Storage system의 세부정보를 캡쳐해서 가지고 있다.

PersistentVolumeClaim

그렇다면 PVC는 무엇일까?

A PersistentVolumeClaim (PVC) is a request for storage by a user.
여기서 user는 사용자이며, 사용자가 Pod을 만들 때, 이 Storage를 사용하기 위해 PVC로 요청하는 것이다.

내가 이해한 바로는, '이 PV를 내가 사용하겠다' 라고 주장하는 것이다.
(영단어 그대로 해석..)

공식문서에도 나와있으며, Pod과 유사하다.
Pods consume node resources and PVCs consume PV resources.
Pods can request specific levels of resources (CPU and Memory). Claims can request specific size and access modes (e.g., they can be mounted ReadWriteOnce, ReadOnlyMany, ReadWriteMany, or ReadWriteOncePod, see AccessModes).

즉, Pod이 Node의 CPU와 Memory를 사용하듯이, PVC는 PV의 저장소를 사용하는 것이다.

PV와 PVC의 생명주기

1. Provisioning

Provisioning이라는 용어의 뜻을 Wiki에서 검색하면 다음과 같이 정의한다.
"프로비저닝은 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요 시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말한다."

kubernetes에서는 PV를 정적 또는 동적으로 프로비저닝 할 수 있는 두가지 방법을 제공한다.

  • 정적
    클러스터 관리자가 여러 PV를 만들며, 이 PV는 클러스터 사용자가 사용할 수 있는 실제 스토리지의 세부 정보를 담고 있습니다.
    즉, PV 및 PVC 리소스를 직접 생성하고 사용하는 방식입니다.
  • 동적
    동적 프로비저닝은 user의 PVC에서 일치하는 PV가 없을 때, 동적으로 PV를 만드는 방식을 의미한다.
    PVC는 동적으로 PV를 provisioning하기 위해 storage class를 요청해야 하며, 관리자는 동적 프로비저닝이 발생하도록 해당 storage class를 만들고 구성해야 한다.

2. Binding

K8s의 제어 Loop에서 새로운 PVC를 발견한다면, 일치하는 PV를 찾아 Binding한다.
즉, PV와 PVC를 연결하는 단계이며, PVC에서 스토리지 용량과 접근 방법을 명시적으로 요청하여 PV를 할당받는다.
여기서 PVC에 맞는 PV가 없으면, PVC가 PV가 생성될 때까지 대기하게 된다.
그리고 PV와 PVC는 반드시 일대일 대응되어야한다.

3. Using

Pod이 PV를 사용하는 것을 의미한다.
PVC가 Pod에 설정되고 Pod이 PV를 Mount해 사용하는 단계이다.
User가 Claim을 가지고 바인딩되면 바인딩 된 PV는 필요한 기간동안 사용자에게 속한다.

4. Reclaming

파드가 PVC 사용을 끝내고 PV를 회수하는 단계로, PV를 회수하는 방법에는 3가지가 존재한다.

  • Retain
    PV 리소스를 그대로 유지하는 것, 연결해제 정도로 바라볼 수 있다. 이 PV 리소스를 다른 PVC가 사용할 수 없다.
    PV를 재사용하기 위해서는 PV와 외부 스토리지의 정리를 직접 해주어야 한다.
  • Delete
    PVC가 삭제될 때 PV도 같이 삭제하는 것, 외부 스토리지의 데이터도 삭제된다.
    동적 프로비저닝의 기본 반환 정책이다.
  • Recycle
    외부 스토리지의 데이터를 삭제하고 다른 PVC가 이 PV를 사용할 수 있도록 하는 것

참고

 

Persistent Volumes

This document describes persistent volumes in Kubernetes. Familiarity with volumes, StorageClasses and VolumeAttributesClasses is suggested. Introduction Managing storage is a distinct problem from managing compute instances. The PersistentVolume subsystem

kubernetes.io

 

 

Volumes

On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem occurs when a container crashes or is stopped. Container state is not saved so all of the files that were created

kubernetes.io

 

 

[Kubernetes] Volume (emptyDir, hostPath, PV/PVC)

이번에는 쿠버네티스에서 데이터를 저장하는 Volume을 정리해보도록 한다. Volume 컨테이너가 데이터를 저장하고 공유하는 방식을 제공하는 객체, 기존 컨테이너에서의 Volume과 유사하나 더 유연하

blog.omoknooni.me

 

 

[개발 용어] 프로비저닝(Provisioning)이란?

최근 머신러닝의 영역에서 개발의 영역으로 발을 담구게 되면서, 커뮤니케이션을 위해 개발 용어를 익혀야겠다는 생각이 많아졌다. 회사에서 맡고있는 플랫폼의 아키텍처 정의서라던지, AWS 백

hong-yp-ml-records.tistory.com

 

 

'Devops > Kubernetes' 카테고리의 다른 글

[Kubernetes] NFS provisioner를 이용해 PV 생성  (0) 2024.08.26