介绍
当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。
资源配额是帮助管理员解决这一问题的工具。
资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。
资源配额的工作方式如下:
不同的团队可以在不同的命名空间下工作。这可以通过 RBAC强制执行。
集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象。
当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。
如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。
如果命名空间下的计算资源 (如 cpu 和 memory)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值
说明:
对于 cpu 和 memory 资源:ResourceQuota 强制该命名空间中的每个(新)Pod 为该资源设置限制。 如果你在命名空间中为 cpu 和 memory 制实施资源配额, 你或其他客户端必须为你提交的每个新 Pod 指定该资源的 requests 或 limits。 否则,控制平面可能会拒绝接纳该 Pod。
对于其他资源:ResourceQuota 可以工作,并且会忽略命名空间中的 Pod,而无需为该资源设置限制或请求。 这意味着,如果资源配额限制了此命名空间的临时存储,则可以创建没有限制/请求临时存储的新 Pod。 你可以使用限制范围自动设置对这些资源的默认请求。
支持的资源
支持的资源 | 描述 |
limits.cpu/memory | 所有Pod上限资源配置总量不超过该值(所有非终止状态的Pod) |
requests.cpu/memory | 所有Pod请求资源配置总量不超过该值(所有非终止状态的Pod) |
cpu/memory | 等同于requests.cpu/requests.memory |
requests.storage | 所有PVC请求容量总和不超过该值 |
persistentvolumeclaims | 所有PVC数量总和不超过该值 |
<storage-class-name>. storageclass.storage.k8s.io/requests.storage | 所有与<storage-class-name>相关的PVC请求容量总和不超过该值 |
<storage-class-name>. storageclass.storage.k8s.io/persistentvolumeclaims | 所有与<storage-class-name>相关的PVC数量总和不超过该值 |
pods、count/deployments.apps、 count/statfulsets.apps、count/services (services.loadbalancers、services.nodeports)、 count/secrets、count/configmaps、 count/job.batch、count/cronjobs.batch | 创建资源数量不超过该值 |
yaml示列:
#计算资源配额(创建pod时pod所需资源)
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: test
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
requests.nvidia.com/gpu: 4 #GPU
---
#存储资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: test
spec:
hard:
requests.storage: "10G"
managed-nfs-storage.storageclass.storage.k8s.io/requests.storage: "5G"
---
#对象数量配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
namespace: test
spec:
hard:
pods: "10"
count/deployments.apps: "3"
count/services: "3"
查看ns配额
【】kubectl get quota -n test
官方参考网址:https://kubernetes.io/zh-cn/docs/concepts/policy/resource-quotas/