限制存储消耗
本示例演示了如何限制命名空间中消耗的存储量。
在本演示中使用了以下资源:ResourceQuota、LimitRange 和 PersistentVolumeClaim。
开始之前
您需要一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议在至少有两个节点(不充当控制平面主机)的集群上运行本教程。如果您还没有集群,可以使用 minikube 创建一个,或者可以使用以下 Kubernetes 游乐场
要检查版本,请输入
kubectl version。
场景:限制存储消耗
集群管理员代表用户群体运行集群,并且管理员希望控制单个命名空间可以消耗的存储量,以控制成本。
管理员希望限制
- 命名空间中的持久卷声明数量
- 每个声明可以请求的存储量
- 命名空间可以拥有的累积存储量
LimitRange 以限制存储请求
将 LimitRange 添加到命名空间会强制执行存储请求大小的最小值和最大值。存储通过 PersistentVolumeClaim 请求。强制执行限制范围的准入控制器将拒绝超出管理员设置的值的任何 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。那将是命名空间上限为 5Gi 的 6Gi 请求。
apiVersion: v1
kind: ResourceQuota
metadata:
name: storagequota
spec:
hard:
persistentvolumeclaims: "5"
requests.storage: "5Gi"
总结
限制范围可以对请求的存储量设置上限,而资源配额可以通过声明计数和累积存储容量有效地限制命名空间消耗的存储量。这使集群管理员能够规划集群的存储预算,而无需担心任何一个项目超出其分配。