一、ResourceQuota是什么¶
当多个用户或团队共享具有固定节点数目的集群时,人们会担心有人使用超过其基于公平原则所分配到的资源量。
资源配额是帮助管理员解决这一问题的工具。
资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。
资源配额的工作方式如下:
- 不同的团队可以在不同的命名空间下工作。这可以通过 RBAC强制执行。
- 集群管理员可以为每个命名空间创建一个或多个 ResourceQuota 对象。
- 当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。
- 如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。
- 如果命名空间下的计算资源 (如
cpu和memory)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用LimitRanger准入控制器来为没有设置计算资源需求的 Pod 设置默认值。
注意:大部分Kubernetes版本默认开启了ResourceQuota,也可以在APIServer配置文件的--enable-admission-plugins参数中添加ResourceQuota开启。
二、ResourceQuota出现背景¶
ResourceQuota是Kubernetes中的一种资源限制机制,它用于对命名空间内的资源使用进行限制和配额控制。它的出现背景是为了解决以下问题:
- 多租户隔离:在Kubernetes中,多个团队或用户可以在同一个集群中共享资源。为了确保每个命名空间或用户不会无限制地使用资源,需要一种机制来实现资源的隔离和限制。ResourceQuota提供了这样的能力,可以为每个命名空间设置资源使用的上限。
- 防止资源滥用:资源滥用可能导致整个集群的性能下降或崩溃。通过设置ResourceQuota,可以限制每个命名空间或用户可以使用的资源数量,以防止某个应用程序或用户抢占过多的资源,从而保护集群的稳定性和可靠性。
- 预测和控制成本:在云计算环境中,资源的使用与成本直接相关。通过设置ResourceQuota,可以根据团队或用户的需求和预算来限制资源使用,从而更好地预测和控制成本。
三、ResourceQuota使用场景¶
ResourceQuota使用场景有以下几点:
- 1)限制资源使用:控制命名空间中可以使用的CU、内存、存储等资源的总量。
- 2)限制对象数量:控制命名空间中可以创建的对象数量,如Pod、ConfigMap、Secret、Service等。
- 3)资源公平分配:确保资源在不同命名空间之间公平分配,避免资源争抢。
- 4)防止资源耗尽:防止某个命名空间或用户过度消耗资源,导致其他应用无法获得所需的资源。