본문 바로가기

Technical architecture/Kubernetes

[Kubernetes] PVC, PV, Storage class 개념

Volume이란?

  • 데이터를 저장하는 공간
  • 쿠버네티스 상에서 정확히는, 애플리케이션, 데이터베이스 및 파일 시스템이 docker 컨테이너에서 데이터를 저장하는 공간
  • Volume이 변경될 때마다 해당 volume을 사용하는 모든 Pod의 설정 변경 후 재배포 해야 함.
  • 필요성: 컨테이너는 언제든 변경, 삭제될 수 있기 때문에 데이터를 안전하게 보존하며 읽고 쓰기 위한 외부 볼륨 필요

PV, PVC, SC의 관계

요약: StorageClass 객체를 사용한 다음, 필요할 때마다 해당 스토리지 클래스를 사용하여 PV-PVC 쌍을 동적으로 생성

PV(Persistent Volume)

정의

  • Data 저장을 위해 Pod에 attach하는 별도의 volume
  • 관리자가 PV를 생성하면 PVC는 사용자가 볼륨을 사용하기 위해 PV에 요청하게 됨
  • 클러스터에서 공용으로 사용가능한 객체
  • Pod에 PV를 연결하기 위해서 먼저 SC와 PVC가 필요

상태 종류

  • Available: PV 생성 후 사용 가능
  • Bound: PVC 요청에 의해 바인딩 됨
  • Released: PVC가 삭제되어 요청이 없을 경우
  • Fail: 어떤 기타 이유로 문제가 생겼을 경우

생성 방법

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-device-pv
  labels:
    type: local
spec:
  storageClassName: local-device
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

PVC(Persistent Volume Claim)

정의

  • PV의 볼륨 생성 요청
  • Pod를 생성할 때 볼륨을 정하는 과정에서 생성하며, 관리자가 생성한 PV에 요청
  • Namespace object로, 해당 namespace에 의존적

생성 방법

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-device-pvc
spec:
  storageClassName: local-device
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

SC(Storage class)

정의

  • Pod의 PV 생성 정보를 저장하는 쿠버네티스 객체
  • PV 지정 전 정의해야 함
  • 클러스터당 하나만 존재

생성 방법

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-device
  annotations:
    openebs.io/cas-type: local
    cas.openebs.io/config: |
      - name: StorageType
        value: device
      - name: FSType
        value: xfs
provisioner: openebs.io/local
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

 

참고