DEV Community

Cover image for จำกัดขนาดของ Storage ที่ใช้ใน Namespace
Damrongsak Reetanon
Damrongsak Reetanon

Posted on

จำกัดขนาดของ Storage ที่ใช้ใน Namespace

ผมเขียนเรื่อง "จำกัดขนาดของ PersistentVolumeClaim ไม่ให้เกินกว่าที่กำหนด" ที่สามารถกำหนดขนาดของการสร้าง Persistent Volume Claim ไม่ให้มีขนาดใหญ่เกินกว่าที่กำหนด หรือไม่ให้เล็กกว่าที่กำหนดได้ด้วย Kubernetes Object ที่ชื่อว่า LimitRange ... ก็คิดต่อว่า ถ้าผู้ใช้งานสร้าง PersistentVolumeClaim จำนวนมากล่ะ !!! การใช้ storage ก็อาจจะเกินความจำเป็นในการใช้งาน หรือไม่ก็อาจจะทำให้ Persistent Volume ไม่เพียงพอสำครับผู้ใช้งานทุกคน
Alt Text
ยังมี Kubernetes Object อีกชนิดที่สามารถจำกัดทั้งจำนวนและขนาด PersistentVolumeClaim รวมแต่ละ namespace ได้ สามารถใช้ ResourceQouta จำกัดจำนวนและขนาด PersistentVolumeClaim ที่สามารถสร้างได้ใน Namespace นั้น ๆ หน้าตาของ ResourceQuota ที่สามารถจำกัดจำนวนนวนและขนาดของ storage ใน Namespace คงประมาณนี้ ...

apiVersion: v1
kind: ResourceQuota
metadata:
  name: max-storage
  namepsace: default
spec:
  hard:
    persistentvolumeclaims: "3"
    requests.storage: "6Gi"
Enter fullscreen mode Exit fullscreen mode

ถ้าสร้าง ResourceQuota ตาม YAML ทางด้านบน ผลที่ได้ ผู้ใช้ทุกคนที่จะสร้าง storage ใน Namespace default จะสร้าง PersistentVolumeClaim ได้ไม่เกิน 3 PersistentVolumeClaim หรือ มีขนาดรวมกันได้ไม่เกิน 6 GB

]# kubectl apply -f storage-resourcequota.yaml
resourcequota/max-storage created

]# kubectl get resourcequotas
NAME          AGE   REQUEST                                                LIMIT
max-storage   41s   persistentvolumeclaims: 0/3, requests.storage: 0/6Gi
Enter fullscreen mode Exit fullscreen mode

ทดสอบ ร้องขอ PersistentVolumeClaim ที่มีขนาด 10 GB พบว่าไม่สามารถสร้างได้ และมีข้อความแสดงว่า ไม่สามารถสร้างได้เพราะเกินโควต้า Error from server (Forbidden): error when creating "pvc10G.yaml": persistentvolumeclaims "pvc-10g" is forbidden: exceeded quota: max-storage, requested: requests.storage=10Gi, used: requests.storage=0, limited: requests.storage=6G

]# kubectl apply -f pvc10G.yaml 
Error from server (Forbidden): error when creating "pvc10G.yaml": persistentvolumeclaims "pvc-10g" is forbidden: exceeded quota: max-storage, requested: requests.storage=10Gi, used: requests.storage=0, limited: requests.storage=6G
Enter fullscreen mode Exit fullscreen mode

ทดสอบ ร้องขอ PersistentVolumeClaim ที่มีขนาด 1 GB ตัวที่ 4 พบว่าไม่สามารถสร้างได้ และมีข้อความแสดงว่า ไม่สามารถสร้างได้เพราะเกินโควต้า rror from server (Forbidden): error when creating "pvc1G.yaml": persistentvolumeclaims "pvc-1g" is forbidden: exceeded quota: max-storage, requested: persistentvolumeclaims=1, used: persistentvolumeclaims=3, limited: persistentvolumeclaims=3

]# kubectl get persistentvolumeclaim
NAME       STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-1g-1   Bound    data1    1Gi        RWO            slow           3m33s
pvc-1g-2   Bound    data0    1Gi        RWO            slow           3m28s
pvc-1g-3   Bound    data2    2Gi        RWO            slow           3m25s

]# kubectl apply -f pvc1G.yaml
Error from server (Forbidden): error when creating "pvc1G.yaml": persistentvolumeclaims "pvc-1g" is forbidden: exceeded quota: max-storage, requested: persistentvolumeclaims=1, used: persistentvolumeclaims=3, limited: persistentvolumeclaims=3
Enter fullscreen mode Exit fullscreen mode

พบว่า ​​​ResourceQuota สามารถจำกัดจำนวนและขนาด PersistentVolumeClaim รวมแต่ละ namespace ได้ ถ้านำมาประยุกต์ใช้ร่วมกับ LimitRange ที่จำกัดขนาดของการสร้าง PersistentVolumeClaim ไม่ให้มีขนาดใหญ่เกินกว่าที่กำหนด หรือไม่ให้เล็กกว่าที่กำหนดเป็นราย PersistentVolumeClaim สามารถช่วยให้ Kubernetes Administrator บริการจัดการ storage ใน Kubernetes Administrator ได้อย่างมีประสิทธิภาพ

มูลค่าความสุข

Discussion (1)

Collapse
terngr profile image
terngr

ขอบคุณครับ