限制存储消耗

此示例演示了一种限制命名空间中存储使用量的简便方法。

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

准备开始

  • 你必须拥有一个 Kubernetes 的集群,同时你的 Kubernetes 集群必须带有 kubectl 命令行工具。 如果你还没有集群,你可以通过 Minikube 构建一 个你自己的集群,或者你可以使用下面任意一个 Kubernetes 工具构建:

    要获知版本信息,请输入 kubectl version.

场景:限制存储消耗

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

管理员想要限制:

  1. 命名空间中持久卷申领(persistent volume claims)的数量
  2. 每个申领(claim)可以请求的存储量
  3. 命名空间可以具有的累计存储量

使用 LimitRange 限制存储请求

LimitRange 添加到命名空间会为存储请求大小强制设置最小值和最大值。存储是通过 PersistentVolumeClaim 来发起请求的。执行限制范围控制的准入控制器会拒绝任何高于或低于管理员所设阈值的 PVC。

在此示例中,请求 10Gi 存储的 PVC 将被拒绝,因为它超过了最大 2Gi。

  1. apiVersion: v1
  2. kind: LimitRange
  3. metadata:
  4. name: storagelimits
  5. spec:
  6. limits:
  7. - type: PersistentVolumeClaim
  8. max:
  9. storage: 2Gi
  10. min:
  11. storage: 1Gi

当底层存储提供程序需要某些最小值时,将会用到所设置最小存储请求值。例如,AWS EBS volumes 的最低要求为 1Gi。

使用 StorageQuota 限制 PVC 数目和累计存储容量

管理员可以限制某个命名空间中的 PVCs 个数以及这些 PVCs 的累计容量。新 PVCs 请求如果超过任一上限值将被拒绝。

在此示例中,命名空间中的第 6 个 PVC 将被拒绝,因为它超过了最大计数 5。或者,当与上面的 2Gi 最大容量限制结合在一起时,意味着 5Gi 的最大配额不能支持 3 个都是 2Gi 的 PVC。后者实际上是向命名空间请求 6Gi 容量,而该命令空间已经设置上限为 5Gi。

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: storagequota
  5. spec:
  6. hard:
  7. persistentvolumeclaims: "5"
  8. requests.storage: "5Gi"

小结

限制范围对象可以用来设置可请求的存储量上限,而资源配额对象则可以通过申领计数和累计存储容量有效地限制命名空间耗用的存储量。这两种机制使得集群管理员能够规划其集群存储预算而不会发生任一项目超量分配的风险。