限制存储消耗

本示例展示了如何限制命名空间中的存储消耗总量。

演示中使用了以下资源:ResourceQuotaLimitRangePersistentVolumeClaim

开始之前

  • 你需要有一个 Kubernetes 集群,并且必须配置 kubectl 命令行工具以与你的集群通信。建议在至少有两个节点的集群上运行本教程,且这些节点不能作为控制平面主机。如果你还没有集群,可以通过 minikube 创建一个,或者使用以下 Kubernetes 演练场之一。

    要检查版本,请输入 kubectl version

场景:限制存储消耗

集群管理员代表用户群体运营集群,为了控制成本,管理员希望控制单个命名空间可以消耗的存储量。

管理员希望限制:

  1. 命名空间中持久卷声明(Persistent Volume Claim)的数量
  2. 每个声明可以申请的存储量
  3. 命名空间可以拥有的累积存储总量

使用 LimitRange 限制存储请求

向命名空间添加 LimitRange 会将存储请求的大小强制限制在最小值和最大值之间。存储是通过 PersistentVolumeClaim(PVC)申请的。强制实施限制范围的准入控制器将拒绝任何超出管理员设定值的 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 个各申请 2Gi 的 PVC,因为这会使命名空间的需求达到 6Gi,从而超过 5Gi 的配额。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: storagequota
spec:
  hard:
    persistentvolumeclaims: "5"
    requests.storage: "5Gi"

总结

限制范围(Limit Range)可以为存储请求设置上限,而资源配额(Resource Quota)可以通过声明计数和累积存储容量有效地限制命名空间消耗的存储量。这使集群管理员可以在不冒任何一个项目超过其配额风险的情况下,规划集群的存储预算。


最后修改于 2024年7月12日下午3:08 PST: 更新 limit-storage-consumption.md (fbae400c87)