限制存储消耗

此示例演示如何限制命名空间中消耗的存储量。

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

开始之前

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

    要检查版本,请输入 kubectl version

场景:限制存储消耗

集群管理员代表用户群体操作一个集群,管理员希望控制单个命名空间可以消耗多少存储空间,以控制成本。

管理员希望限制

  1. 命名空间中持久卷声明的数量
  2. 每个声明可以请求的存储量
  3. 命名空间可以拥有的累积存储量

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 的最大计数。或者,当与上面的 2Gi 最大限制相结合时,5Gi 的最大配额不能有 3 个 PVC,每个 PVC 都有 2Gi。这将是为上限为 5Gi 的命名空间请求的 6Gi。

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

总结

限制范围可以限制请求的存储量,而资源配额可以通过声明计数和累积存储容量有效地限制命名空间消耗的存储量。这使集群管理员可以规划其集群的存储预算,而无需担心任何一个项目超出其配额的风险。

上次修改时间为 2024 年 7 月 12 日下午 3:08 PST:更新 limit-storage-consumption.md (fbae400c87)