限制存储消耗
本示例演示如何限制命名空间中存储的消耗量。
本演示中使用了以下资源:ResourceQuota、LimitRange 和 PersistentVolumeClaim。
准备工作
你需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在本教程中使用至少有两个非控制平面主机节点的集群。如果你没有现成的集群,可以使用 minikube 创建一个,或者可以使用以下 Kubernetes 练习环境之一
要检查版本,请输入
kubectl version
。
场景:限制存储消耗
集群管理员代表用户群体操作集群,希望控制单个命名空间可以消耗的存储量,以控制成本。
管理员希望限制:
- 命名空间中持久卷声明 (Persistent Volume Claim) 的数量
- 每个声明可以请求的存储量
- 命名空间可以拥有的累计存储量
LimitRange 用于限制存储请求
将 LimitRange
添加到命名空间中,可以强制存储请求大小必须符合最小值和最大值。存储是通过 PersistentVolumeClaim
请求的。强制执行限制范围的准入控制器 (admission controller) 将拒绝任何高于或低于管理员设置值的 PVC。
在此示例中,请求 10Gi 存储的 PVC 将被拒绝,因为它超过了 2Gi 的最大值。
apiVersion: v1
kind: LimitRange
metadata:
name: storagelimits
spec:
limits:
- type: PersistentVolumeClaim
max:
storage: 2Gi
min:
storage: 1Gi
当底层存储提供商要求特定最小值时,会使用最小存储请求。例如,AWS EBS 卷要求最小 1Gi。
ResourceQuota 用于限制 PVC 数量和累计存储容量
管理员可以限制命名空间中 PVC 的数量以及这些 PVC 的累计容量。超过任一最大值的新 PVC 将被拒绝。
在此示例中,命名空间中的第 6 个 PVC 将被拒绝,因为它超过了最大数量 5。或者,当 5Gi 的最大配额与上面 2Gi 的最大限制结合使用时,不能有 3 个 PVC,每个 PVC 请求 2Gi。那样总共将请求 6Gi,而命名空间的上限设置为 5Gi。
apiVersion: v1
kind: ResourceQuota
metadata:
name: storagequota
spec:
hard:
persistentvolumeclaims: "5"
requests.storage: "5Gi"
总结
LimitRange 可以限制请求的存储量,而 ResourceQuota 则可以通过控制声明数量和累计存储容量来有效限制命名空间消耗的存储。这使得集群管理员可以规划集群的存储预算,而无需担心任何一个项目超额使用。