首页 > 其他分享 > 通过 Resource 限制命名空间对象创建数量和计算资源使用

通过 Resource 限制命名空间对象创建数量和计算资源使用

时间:2023-02-12 17:31:57浏览次数:36  
标签:Resource 创建 空间 命名 配额 计算资源 资源

Resource Quotas 简单介绍

在 k8s 中,容器、Pod 级别的的计算资源约束设置,可以通过定义 yaml 文件时的 limits 和 requests 字段来做限制, 通过配置不同的 Limits 和 requests不但可以约束资源 , 还可以实现不同等级的 Qos,同时可以通过 LimitRange 来对命名空间内的所有 pod 计算资源配置做统一的约束管理。 那么对于集群级别命名空间的计算资源约束, k8s 提供了什么解决方案? 对于对象数量又有什么方式来进行约束,难道可以无限制的创建 pod、cm、svc 么?


当然不是,对于集群级别, k8s 可以通过 Resource Quotas 来实现集群级别的资源配额,实现对每个命名空间的资源消耗总量提供限制。这里的限制包括:


限制命名空间中某种类型的 对象的总数目上限

限制命名空间中的 Pod 可以使用的 计算资源的总上限

集群管理员可以为每个命名空间创建一个或多个 Resource Quota 对象。


当用户在命名空间下创建资源(如 Pod、Service 等)时,Kubernetes 的 配额系统 会跟踪集群的资源使用情况, 以确保使用的资源用量不超过 Resource Quota 中定义的 硬性资源限额。


如果资源创建或者更新请求 违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。


不管是资源竞争还是配额的修改,都不会影响已经创建的资源使用对象。


如果集群中总的可用资源小于各命名空间中资源配额的总和,那么可能会导致资源竞争。资源竞争时,Kubernetes 系统会遵循先到先得的原则。


对于计算资源,这里的 Resource Quota 和 LimitRange 职责并不重合,Resource Quota 限制命名空间 pod 总的用量(不考虑配额域),而 LimitRange 限制当前命名空间 中 每个 Pod 或者容器的计算资源。


启用资源配额

当 API 服务器 的命令行标志 --enable-admission-plugins= 中包含 ResourceQuota 时, 资源配额会被启用。当命名空间中存在一个 ResourceQuota 对象时,对于该命名空间而言,资源配额就是开启的。


如果需要开启资源配额,需要在 修改 apiservice 组件静态 pod 的 yaml 文件 kube-apiserver.yaml


┌──[[email protected]]-[/etc/kubernetes/manifests]

└─$cat kube-apiserver.yaml  | grep -i  quota

   - --enable-admission-plugins=NodeRestriction,ResourceQuota

1.

2.

3.

查看当前命名空间的 资源配额


┌──[[email protected]]-[/etc/kubernetes/manifests]

└─$kubectl get resourcequotas  -A

No resources found

1.

2.

3.

默认情况下,不指定 配额域 的情况,配额配置对当前命名空间有效,指定了配额域的情况,只对配额域匹配的资源有效。


计算资源配额

用户可以对给定命名空间下的可被请求的 计算资源 总量进行限制。


如果命名空间下的计算资源 (如 cpu 和 memory)的配额被启用, 则用户必须为这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。

-----------------------------------


标签:Resource,创建,空间,命名,配额,计算资源,资源
From: https://blog.51cto.com/u_15962735/6052119

相关文章