동적 프로비저닝을 사용하면서 CSI 를 준수하는 벤더의 드라이버가 볼륨 resize 를 지원하는 경우에는 PVC 조정을 통해 볼륨 확장이 가능하다. 아래와 같이 실습을 진행해보자.
1. 스토리지 클래스 생성
다음과 같이 allowVolumeExpansion: true 를 지정하여 스토리지 클래스를 생성한다. 스토리지 클래스에 해당 항목을 지정하더라도, 실제 사용하는 볼륨 플러그인 드라이버 구현에서 지원해야 볼륨 확장이 가능한 점에 유의하자.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sample-block-storageclass-resize
provisioner: local.csi.openebs.io
parameters:
storage: "lvm"
volgroup: "lvmvg"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
2. PVC 생성
PVC 는 특별한 설정이 필요 없다. Static NFS 는 이미 존재하는 디렉토리를 스토리지로 사용하고, k8s 가 용량을 제어하지 않기 때문에 확장이 불가능하여 Block 스토리지로 사용하였다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sample-block-pvc-resize
spec:
storageClassName: sample-block-storageclass-resize
volumeMode: Block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 500Mi
3. Pod 생성
위 PVC 를 사용하는 파드를 생성하여 동적 프로비저닝이 일어나도록 한다. 블록 장치 연결 위치는 /dev/sample-block 이다.
apiVersion: v1
kind: Pod
metadata:
name: sample-block-pod-resize
spec:
containers:
- name: nginx-container
image: nginx:1.27
volumeDevices:
- name: nginx-pvc
devicePath: /dev/sample-block
volumes:
- name: nginx-pvc
persistentVolumeClaim:
claimName: sample-block-pvc-resize
4. 볼륨 크기 확인
동적 프로비저닝이 정상적으로 수행되었는지, 생성된 영구 볼륨의 크기는 몇인지, 실제 파드 연결된 볼륨의 크기는 몇인지 확인해본다.
$ kubectl get pvc sample-block-pvc-resize
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
sample-block-pvc-resize Bound pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4 500Mi RWO sample-block-storageclass-resize <unset> 115s
# PV 용량 확인
$ kubectl get pv pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4 500Mi RWO Delete Bound default/sample-block-pvc-resize sample-block-storageclass-resize <unset> 9s
# 파드에 연결된 볼륨 용량 확인
$ kubectl exec -it sample-block-pod-resize -- blockdev --getsize64 /dev/sample-block
524288000
5. 볼륨 크기 확장
이제 아래처럼 PVC 매니페스트의 spec.resources.requests.storage 를 이전보다 더 크게 수정/적용한 후 볼륨 사이즈를 확인해본다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: sample-block-pvc-resize
spec:
storageClassName: sample-block-storageclass-resize
volumeMode: Block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 800Mi # 여기를 수정한 후, 다시 kubectl apply 한다.
apply 후 실제 적용은 최대 1분까지 소요된다.
$ kubectl apply -f sample-block-pvc-resize.yaml
persistentvolumeclaim/sample-block-pvc-resize configured
$ kubectl get pvc sample-block-pvc-resize
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
sample-block-pvc-resize Bound pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4 800Mi RWO sample-block-storageclass-resize <unset> 13m
$ kubectl get pv pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pvc-2d5bf77e-956e-4e38-9517-bb8f4da44ca4 800Mi RWO Delete Bound default/sample-block-pvc-resize sample-block-storageclass-resize <unset> 11m
$ kubectl exec -it sample-block-pod-resize -- blockdev --getsize64 /dev/sample-block
838860800
같은 디스크에서 용량만 800Mi 로 증가된 것을 확인할 수 있다.
단, 아래처럼 볼륨 사이즈 축소는 불가한 점에 유의하자.
# PVC 의 spec.resources.requests.storage 를 축소한 후 적용시
$ kubectl apply -f sample-block-pvc-resize.yaml
The PersistentVolumeClaim "sample-block-pvc-resize" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value
'Kubernetes' 카테고리의 다른 글
| [Kubernetes] 블록 장치를 영구 볼륨으로 사용하기 (0) | 2026.02.22 |
|---|---|
| [Kubernetes] volumeBindingMode 영구 볼륨 할당 타이밍 제어 (0) | 2026.02.18 |
| [Kubernetes] 영구 볼륨 동적 프로비저닝 (0) | 2026.02.16 |
| [Kubernetes] PersistentVolumeClaim 이해 (0) | 2026.02.16 |
| [Kubernetes] PersistentVolume 이해 (0) | 2026.02.11 |

