Skip to main content

PersistentVolume


Static provisioning

  • 관리자가 PV(PersistentVolume)를 생성
  • PVC(PersistentVolumeClaim) 생성, 명시된 요구 사항을 충족시킬 수 있는 PV가 있으면 바인딩

Dynamic provisioning

  • StorageClass에 프로비저닝을 위한 속성 설정
  • StorageClass를 명시한 PVC 생성
    • 부합하는 PV가 존재하면 바인딩
    • 없으면 StorageClass의 속성에 따라 PV 생성

StorageClass

기본 StorageClass로 등록하기 위해서는 아래 설정을 추가하면 됩니다.

#...
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
#...

AWS provisioner

aws-standard-storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp2
reclaimPolicy: Delete
allowVolumeExpansion: true
mountOptions:
- debug
volumeBindingMode: Immediate

PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
name: <name>
spec:
persistentVolumeReclaimPolicy: Retain # Retain, Delete
capacity:
storage: <storage> # 5Gi
volumeMode: Filesystem # Filesystem, Block
accessModes:
- ReadWriteOnce # ReadWriteOnce, ReadOnlyMany, ReadWriteMany
  • persistentVolumeReclaimPolicy
    • Retain: PVC를 삭제하더라도 PV는 삭제하지 않습니다
      • PV를 삭제하더라도 물리 볼륨은 삭제되지 않습니다
    • Delete: PVC를 삭제하면 PV와 물리 볼륨이 삭제됩니다

PersistentVolumeClaim

StatefulSet에서 미리 생성된 PV 사용하기

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: <name>
namespace: <namespace>
spec:
replicas: 3
template:
spec:
containers:
- volumeMounts:
- name: <PVCTemplateName>
mountPath: <mount-path>
volumeClaimTemplates:
- metadata:
name: <PVCTemplateName>
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: <storage>

위와 같이 StatefulSet을 생성하면, <PVCTemplateName>-<StatefulSetName>-<ReplicaIndex> 형태의 PVC가 생성되므로 아래와 같은 PersistentVolume을 미리 생성하면 됩니다.

apiVersion: v1
kind: PersistentVolume
metadata:
name: <name>
namespace: <namespace>
spec:
claimRef:
name: <PVCTemplateName>-<StatefulSetName>-<ReplicaIndex>
namespace: <namespace>
capacity:
storage: <storage>
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
persistentVolumeReclaimPolicy: Retain