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

요약: 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
참고