ผมเขียนเรื่อง "จำกัดขนาดของ PersistentVolumeClaim ไม่ให้เกินกว่าที่กำหนด" ที่สามารถกำหนดขนาดของการสร้าง Persistent Volume Claim ไม่ให้มีขนาดใหญ่เกินกว่าที่กำหนด หรือไม่ให้เล็กกว่าที่กำหนดได้ด้วย Kubernetes Object ที่ชื่อว่า LimitRange ... ก็คิดต่อว่า ถ้าผู้ใช้งานสร้าง PersistentVolumeClaim จำนวนมากล่ะ !!! การใช้ storage ก็อาจจะเกินความจำเป็นในการใช้งาน หรือไม่ก็อาจจะทำให้ Persistent Volume ไม่เพียงพอสำครับผู้ใช้งานทุกคน
ยังมี 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"
ถ้าสร้าง 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
ทดสอบ ร้องขอ 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
ทดสอบ ร้องขอ 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
พบว่า ResourceQuota สามารถจำกัดจำนวนและขนาด PersistentVolumeClaim รวมแต่ละ namespace ได้ ถ้านำมาประยุกต์ใช้ร่วมกับ LimitRange ที่จำกัดขนาดของการสร้าง PersistentVolumeClaim ไม่ให้มีขนาดใหญ่เกินกว่าที่กำหนด หรือไม่ให้เล็กกว่าที่กำหนดเป็นราย PersistentVolumeClaim สามารถช่วยให้ Kubernetes Administrator บริการจัดการ storage ใน Kubernetes Administrator ได้อย่างมีประสิทธิภาพ
Top comments (1)
ขอบคุณครับ