볼륨은 쿠버네티스 오브젝트가 아니기 때문에 스스로 생성/삭제가 되지 않는다. 영구 볼륨(Persistent Volume)은 데이터베이스 서버의 데이터 영역을 마운트하여 데이터베이스 서버를 삭제하더라도 유지하도록 한다.
StorageClass 가 정의되면 PV를 동적으로 프로비저닝할 수 있다. 관리자는 StorageClass를 정의하고, 개발자는 PVC에 StorageClass 를 명기함으로써 원하는 용량과 유형의 저장소를 POD에 마운트할 수 있다.
로컬에서 진행할 경우 저장장치 공급자에 의해 제공되는 볼륨이 없으므로 provisoner를 kubernetes.io/no-provisioner 로 설정한다.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
vagrant@master:~$ k apply -f mdb-sc.yml
storageclass.storage.k8s.io/local-storage unchanged
vagrant@master:~$ k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage kubernetes.io/no-provisioner Delete Immediate false 2d1h
마스터 1개, 슬레이브 2개 데이터베이스 서버 생성을 위해 PV 3개 정의
mdb-pv.ymlapiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
labels:
type: local
spec:
storageClassName: local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data1"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv2
labels:
type: local
spec:
storageClassName: local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data2"
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv3
labels:
type: local
spec:
storageClassName: local-storage
persistentVolumeReclaimPolicy: Delete
capacity:
storage: 500Mi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data3"
vagrant@master:~$ k apply -f mdb-pv.yml
persistentvolume/mypv1 created
persistentvolume/mypv2 created
persistentvolume/mypv3 created
vagrant@master:~$ k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 500Mi RWO Delete Available local-storage 6s
mypv2 500Mi RWO Delete Available local-storage 6s
mypv3 500Mi RWO Delete Available local-storage 6s