더북(TheBook)

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

  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4.  name: storagelimits
  5. spec:
  6.  limits:
  7.  - type: PersistentVolumeClaim
  8.  max:
  9.    storage: 5Mi
  10.  min:
  11.    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

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4.  name: storagequota
  5. spec:
  6.  hard:
  7.    persistentvolumeclaims: "5"
  8.    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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.