'2026/02/18'에 해당되는 글 1건

동적 프로비저닝을 사용할 때 기본적으로 영구 볼륨 클레임 리소스를 생성하면 자동으로 영구 볼륨이 생성된다. 하지만, 실제 볼륨을 사용하고자 하는 파드에서 영구 볼륨 클레임을 지정하여 파드를 생성하기 전까지는 영구 볼륨이 생성된 채로 유지가 되어 낭비가 발생한다. 스토리지 클래스에는 이를 조정하는 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

 

블로그 이미지

망원동똑똑이

프로그래밍 지식을 자유롭게 모아두는 곳입니다.

,