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