동적 프로비저닝을 사용할 때 기본적으로 영구 볼륨 클레임 리소스를 생성하면 자동으로 영구 볼륨이 생성된다. 하지만, 실제 볼륨을 사용하고자 하는 파드에서 영구 볼륨 클레임을 지정하여 파드를 생성하기 전까지는 영구 볼륨이 생성된 채로 유지가 되어 낭비가 발생한다. 스토리지 클래스에는 이를 조정하는 volumeBindingMode 라는 항목이 있다. volumeBindingMode: WaitForFirstConsume 으로 지정하면 아래와 같이 동작한다.
- 정적 프로비저닝시: PV는 Available(미리 생성하기 때문), PVC는 Pending 상태로 존재하다가, 파드에서 사용하는 시점에 바인딩됨
- 동적 프로비저닝시: PV 는 없고, PVC는 Pending 상태로 존재하다가, 파드에서 사용하는 시점에 PV 생성 & 바인딩됨
즉, 실제 파드에서 영구 볼륨을 사용하는 시점에 영구 볼륨을 생성할 수가 있는 것이다. 이 항목에 올 수 있는 값은 아래와 같다.
| volumeBindingMode 설정값 | 설명 |
| Immediate | 기본값. 즉시 영구 볼륨이 생성됨 |
| WaitForFirstConsumer | 처음으로 파드에 의해 사용될 때 영구 볼륨이 생성됨 |
아래와 같은 스토리지 클래스를 통해 PVC 를 생성한 후, 실제 파드에서 사용할 때까지 PV가 어떻게 동작하는지 살펴보자.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
archiveOnDelete: "false"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
# volumeBindingMode: WaitForFirstConsumer 인 스토리지 클래스는 위 매니페스트로 미리 생성해둔다.
# PV, PVC, POD 상태를 확인한다.
$ kubectl get pv
No resources found
$ kubectl get pvc
No resources found in default namespace.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-cc5544bc4-v62cz 1/1 Running 0 2d3h
# PV 만 생성한 후, PVC 의 상태가 Pending이고, PV 가 아직 생성되지 않았음을 확인한다.
$ kubectl apply -f sample-nfs-provisioning-pvc.yaml
persistentvolumeclaim/sample-nfs-provisioning-pvc created
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
sample-nfs-provisioning-pvc Pending nfs-client <unset> 4s
$ kubectl get pv
No resources found
# 해당 PVC 를 사용하는 파드를 띄운 후 PV 가 자동으로 생성 및 바인딩 되었는지 확인한다.
$ kubectl apply -f sample-nfs-provisioning-pod.yaml
pod/sample-nfs-provisioning-pod created
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
sample-nfs-provisioning-pvc Bound pvc-37ae35bc-517e-4c0c-a175-cc0aee0c6f44 200Mi RWO nfs-client <unset> 27s
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pvc-37ae35bc-517e-4c0c-a175-cc0aee0c6f44 200Mi RWO Delete Bound default/sample-nfs-provisioning-pvc nfs-client <unset> 7s
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] allowVolumeExpantion 으로 볼륨 확장하기 (0) | 2026.02.22 |
|---|---|
| [Kubernetes] 블록 장치를 영구 볼륨으로 사용하기 (0) | 2026.02.22 |
| [Kubernetes] 영구 볼륨 동적 프로비저닝 (0) | 2026.02.16 |
| [Kubernetes] PersistentVolumeClaim 이해 (0) | 2026.02.16 |
| [Kubernetes] PersistentVolume 이해 (0) | 2026.02.11 |
