Tip ☆ 볼륨 용량을 제한하는 방법
볼륨 용량을 제한하는 방법은 크게 두 가지가 있습니다. 첫 번째는 PVC로 PV에 요청되는 용량을 제한하는 것이고, 두 번째는 스토리지 리소스에 대한 사용량을 제한하는 것입니다.
먼저 PVC로 PV에 요청되는 용량을 제한하는 방법을 살펴보겠습니다.
1. PVC로 PV를 요청할 때 용량을 제한하는 오브젝트 스펙을 가져와 적용합니다.
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.3/limits-pvc.yaml
limitrange/storagelimits created
다음 코드를 적용하면 PVC를 통해 PV를 요청할 때 최소 1Mi에서 최대 5Mi로 용량을 제한합니다.
limits-pvc.yaml
-
apiVersion: v1
-
kind: LimitRange
-
metadata:
-
name: storagelimits
-
spec:
-
limits:
-
- type: PersistentVolumeClaim
-
max:
-
storage: 5Mi
-
min:
-
storage: 1Mi
2. PV와 PVC를 새로 생성하고 PVC가 최대 용량 제한(5Mi)에 걸려 수행되지 못하는지 확인합니다.
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.3/nfs-pv.yaml
persistentvolume/nfs-pv created
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.3/nfs-pvc.yaml
Error from server (Forbidden): error when creating "/root/_Book_k8sInfra/ch3/3.4.3/nfs-pvc.yaml": persistentvolumeclaims "nfs-pvc" is forbidden: maximum storage usage per PersistentVolumeClaim is 5Mi, but request is 10Mi
3. 용량 제한 설정을 삭제합니다.
[root@m-k8s ~]# kubectl delete limitranges storagelimits
limitrange "storagelimits" deleted
두 번째 방법인 스토리지 리소스에 대한 총 용량을 제한하는 방법도 살펴보겠습니다.
1. 총 누적 사용량을 제한하기 위해 다음 오브젝트 스펙을 적용합니다.
[root@m-k8s ~]# kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.3/quota-pvc.yaml
resourcequota/storagequota created
해당 코드는 PVC는 5개, 용량은 25Mi가 넘지 않도록 제한합니다.
quota-pvc.yaml
-
apiVersion: v1
-
kind: ResourceQuota
-
metadata:
-
name: storagequota
-
spec:
-
hard:
-
persistentvolumeclaims: "5"
-
requests.storage: "25Mi"
2. 지금까지 배운 내용을 활용해 PV 3개((100Mi)의 상태를 만들고 오브젝트 스펙을 작성합니다(스스로 작성해 보세요). 그런 다음 PVC 3개(10Mi)를 요청해 25Mi 제한으로 더 이상 PVC가 수행되지 못하는지 확인합니다.
[root@m-k8s ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS … AGE
nfs-pv 100Mi RWX Retain Available … 2s
nfs-pv1 100Mi RWX Retain Available … 2m4s
nfs-pv2 100Mi RWX Retain Available … 2m1s
[root@m-k8s ~]# kubectl apply -f nfs-pvc.yaml
persistentvolumeclaim/nfs-pvc created
[root@m-k8s ~]# kubectl apply -f nfs-pvc1.yaml
persistentvolumeclaim/nfs-pvc1 created
[root@m-k8s ~]# kubectl apply -f nfs-pvc2.yaml
Error from server (Forbidden): error when creating "nfs-pvc2.yaml": persistentvolumeclaims "nfs-pvc2" is forbidden: exceeded quota: storagequota, requested: requests.storage=10Mi, used: requests.storage=20Mi, limited: requests.storage=25Mi
3. PVC를 생성하기 위해 설정한 리소스 제한을 삭제합니다.
[root@m-k8s ~]# kubectl delete resourcequotas storagequota
resourcequota "storagequota" deleted
4. 과도하게 생성한 PV(nfs-pv1, nfs-pv2)와 PVC(nfs-pvc1)를 삭제합니다. 이때 Bound(PV와 PVC가 연결된 대상)의 상대를 잘 보고 삭제해야 합니다. Bound는 기본적으로 생성된 시간에 맞춰 연결됩니다.
[root@m-k8s ~]# kubectl delete pvc nfs-pvc1
persistentvolumeclaim "nfs-pvc1" deleted
[root@m-k8s ~]# kubectl delete pv nfs-pv2
persistentvolume "nfs-pv2" deleted
[root@m-k8s ~]# kubectl delete pv nfs-pv1
persistentvolume "nfs-pv1" deleted