[kubernetes] 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨클레임(PVC) - 기본

vinca·2023년 11월 17일
0

☸️ kubernetes

목록 보기
10/35
post-thumbnail

PV


위 그림을 보면 실제 PV가 사용되는 데이터 저장공간은 일반적으로 클러스터 노드의 로컬 디스크가 아닌, 네트워크를 통해 액세스 된다.

클라우드 벤더사가 직접 클러스터 내부에 PV를 제공하는(클라우드 제공업체의 솔루션을 통해서 클러스터 내부에 생성하는) 경우도 있겠지만, 보편적으로는 외부의 실제 스토리지에 네트워크를 통해서 액세스한다.

위 그림을 보면 실제 저장공간(Strage)는 쿠버네티스 클러스터 외부에 있고, 개념적으로 쿠버네티스 클러스터 내부에 연결하여(마운트하여) PV로 사용하는 것이다.

이후 클러스터 내 파드들은 PVC를 이용해서 PV를 바인딩하고, 파드 내부 경로에 마운트해서 사용할 수 있게된다.

PVC

여기서 PV 앞에 나오는 PVC는 뭘까?

PVC는 사용자가 PV에 하는 요청(Claim)이다.
PV를 사용하는 사용자가 사용하고 싶은 용량이 얼마인지, 읽기/쓰기 정책은 어떻게 설정할 것인지를 요청한다.

즉, 파드에 PV를 적접적으로 할당하는 방식이 아닌 PVC를 중간에 둬서 파드와 저장공간(PV)를 분리했다.

이를 통해서 파드가 PV에 종속되지 않아, 파드의 스토리지 요구사항이 변경되었을 때 PVC를 수정함으로써 PV를 좀 더 유연성 있게 변경할 수 있다.

PV / PVC 생성 과정

1. PV 생성

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: standard
  hostPath:
    path: /mnt/data

PV를 사용하기 위해서는 먼저 생성해 주어야한다.

  • name : PV의 이름입니다.
  • capacity : 저장소의 크기.
    이 경우 5 기가바이트로 설정되어 있습니다.
  • accessModes : PV에 대한 액세스 모드를 나타내며, 이 예제에서는 ReadWriteOnce로 설정되어 있습니다.
    이는 한 번에 한 노드에서 읽기/쓰기 액세스를 의미합니다.
  • persistentVolumeReclaimPolicy : PV가 삭제될 때 재사용되거나 클린업될 때의 정책을 나타냅니다.
    이 예에서는 Retain으로 설정되어 있어 PV가 삭제되도 데이터가 보존됩니다.
  • storageClassName : 스토리지 클래스를 지정합니다.
  • hostPath : 호스트 머신의 파일 시스템 경로를 제공합니다.

2. PVC 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: standard

이후 PVC는 PV와 일치하는 PV를 요청하고 할당받게 된다.
따라서, 해당 PVC 요구사항을 충족하는 PV가 클러스터 내에 이미 존재해야 한다.

만약, PVC에 해당하는 PV가 없다면 PVC 요청이 보류 상태(Pending)가 된다.
(PV가 없다고, 새롭게 생성해 주지않음)

PV에 변경사항이 발생했을 때

PV의 스토리지 용량 및 액세스 모드를 변경하려면 PV 자체를 수정해야 한다.

1. kubectl edit을 통한 수정

kubectl edit pv <pv-name>

2. PV YAML 수정

apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 10Gi  # 변경할 용량으로 수정
  accessModes:
    - ReadWriteMany  # 변경할 액세스 모드로 수정
  # 기타 필요한 속성들

PVC는 사용자가 PV를 요청하는 방식을 나타낸 파일로, 한번 생성된 PVC는 수정할 수 없다.

따라서, PVC의 요구사항을 변경하고자 한다면 기존 PVC를 삭제하고 변경된 설정을 반영한 PVC를 새롭게 생성해 주어야한다.

PV와 데이터베이스의 차이?

💚 PV

쿠버네티스에서의 저장 공간의 개념이다.
컴퓨터에 있는 C/D와 같은 드라이브로 생각하면 된다.
클러스터 내에서 애플리케이션이 실행되는데 필요한 스토리지를 제공한다.

💛 데이터베이스

데이터를 저장하고 관리하는 시스템이다.
즉, PV는 저장소 자체를 관리하고 할당하는 개념이라면, 데이터베이스는 이를 구조화하고, 실제로 데이터를 저장하는 시스템이다.

profile
붉은 배 오색 딱다구리 개발자 🦃Cloud & DevOps

0개의 댓글