Support for PVC block volume expansion
OKE에서 Block Volume을 Persistent Volume으로 사용하는 경우, 할당 받은 이후에도 사용 중인 볼륨의 크리를 확장하는 기능을 지원합니다.
Block Volume Expansion 설정 확인
클러스터 생성후 기본 구성된StorageClass를 업데이트 전후로 확인한 내용입니다.
-
기능 업데이트 전
oke_admin@cloudshell:~ (ap-seoul-1)$ kubectl get storageclass NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE oci (default) oracle.com/oci Delete Immediate false 2d oci-bv blockvolume.csi.oraclecloud.com Delete WaitForFirstConsumer false 2d
-
업데이트 후
ALLOWVOLUMEEXPANSION 항목이 기존 false -> true로 변경되었습니다.
winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE oci (default) oracle.com/oci Delete Immediate false 22h oci-bv blockvolume.csi.oraclecloud.com Delete WaitForFirstConsumer true 22h
-
기본 구성된 oci-bv StorageClass를 사용하면 기본적으로 볼륨 사이즈 확장이 됩니다. 새롭게 Block Volume CSI Driver(provisioner: blockvolume.csi.oraclecloud.com)로 StorageClass를 생성한다고 하면 아래와 같이 allowVolumeExpansion: true 를 추가하면 됩니다.
$ kubectl get sc oci-bv -o yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: oci-bv provisioner: blockvolume.csi.oraclecloud.com reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true
Block Volume Expansion 기능 확인
-
아래와 같이 PV 요청 yaml을 사용하여 50Gi 사이즈로 요청합니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-bvs-pvc spec: storageClassName: "oci-bv" accessModes: - ReadWriteOnce resources: requests: storage: 50Gi
-
테스트 앱 배포
- 요청한 Persistent Volume을 컨테이너 상에 마운트한 테스트 앱
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-bvs-pvc name: nginx-bvs-pvc spec: replicas: 1 selector: matchLabels: app: nginx-bvs-pvc template: metadata: labels: app: nginx-bvs-pvc spec: containers: - name: nginx image: nginx:latest volumeMounts: - name: data mountPath: /usr/share/nginx/html volumes: - name: data persistentVolumeClaim: claimName: csi-bvs-pvc
-
생성 결과
- 아래와 같이 정상적으로 PV가 생성되고, 테스트 앱로 구동된 것을 볼 수 있습니다.
winter@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f csi-bvs-pvc.yaml persistentvolumeclaim/csi-bvs-pvc created winter@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f nginx-deployment-bvs-pvc.yaml deployment.apps/nginx-bvs-pvc created winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE csi-f0f36095-34fa-4d57-8868-a2a102a044c7 50Gi RWO Delete Bound default/csi-bvs-pvc oci-bv 15s winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-bvs-pvc-7b574c9c5c-lst4d 1/1 Running 0 72s
-
PV를 사용하는 앱이 배포된 상태에서 볼륨 크기를 늘립니다. 50Gi -> 100Gi로 변경후 적용합니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: csi-bvs-pvc spec: storageClassName: "oci-bv" accessModes: - ReadWriteOnce resources: requests: storage: 100Gi
-
적용
winter@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f csi-bvs-pvc.yaml persistentvolumeclaim/csi-bvs-pvc configured winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE csi-f0f36095-34fa-4d57-8868-a2a102a044c7 100Gi RWO Delete Bound default/csi-bvs-pvc oci-bv 4m23s
-
볼륨 확장 결과확인
- 이벤트를 확인해 보면, 볼륨 확장이 성공했음을 알 수 있습니다. 컨테이너 재기동도 일어나지 않았습니다.
winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get events ... 6m50s Normal Created pod/nginx-bvs-pvc-7b574c9c5c-lst4d Created container nginx 6m50s Normal Started pod/nginx-bvs-pvc-7b574c9c5c-lst4d Started container nginx 3m53s Normal Resizing persistentvolumeclaim/csi-bvs-pvc External resizer is resizing volume csi-f0f36095-34fa-4d57-8868-a2a102a044c7 3m53s Warning ExternalExpanding persistentvolumeclaim/csi-bvs-pvc Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC. 3m52s Normal FileSystemResizeRequired persistentvolumeclaim/csi-bvs-pvc Require file system resize of volume on node 3m14s Normal FileSystemResizeSuccessful persistentvolumeclaim/csi-bvs-pvc MountVolume.NodeExpandVolume succeeded for volume "csi-f0f36095-34fa-4d57-8868-a2a102a044c7" 3m14s Normal FileSystemResizeSuccessful pod/nginx-bvs-pvc-7b574c9c5c-lst4d MountVolume.NodeExpandVolume succeeded for volume "csi-f0f36095-34fa-4d57-8868-a2a102a044c7" winter@cloudshell:~ (ap-chuncheon-1)$ kubectl get pod NAME READY STATUS RESTARTS AGE nginx-bvs-pvc-7b574c9c5c-lst4d 1/1 Running 0 4m42s
-
컨테이너 내부 확인
컨테이너 내부를 확인해 보면 PV가 마운트된 /usr/share/nginx/html의 사이즈가 99G인 것을 알 수 있습니다. 볼륨이 확장된 것을 알 수 있습니다.
winter@cloudshell:~ (ap-chuncheon-1)$ kubectl exec -it nginx-bvs-pvc-7b574c9c5c-lst4d -- /bin/bash root@nginx-bvs-pvc-7b574c9c5c-lst4d:/# df -h Filesystem Size Used Avail Use% Mounted on overlay 39G 6.8G 32G 18% / tmpfs 64M 0 64M 0% /dev tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup shm 64M 0 64M 0% /dev/shm tmpfs 7.7G 28M 7.7G 1% /etc/hostname /dev/sda3 39G 6.8G 32G 18% /etc/hosts /dev/sdb 99G 60M 94G 1% /usr/share/nginx/html tmpfs 7.7G 12K 7.7G 1% /run/secrets/kubernetes.io/serviceaccount tmpfs 7.7G 0 7.7G 0% /proc/acpi tmpfs 7.7G 0 7.7G 0% /proc/scsi tmpfs 7.7G 0 7.7G 0% /sys/firmware
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.