【博客540】k8s资源限制管理:LimitRange and ResourceQuota
LimitRangeResourceQuota用于管理中命名空间每个pod 和容器的资源申请约束ResourceQuota用于限制命名空间的总资源消耗。
·
k8s资源限制管理:LimitRange and ResourceQuota
LimitRange vs ResourceQuota
LimitRangeResourceQuota用于管理中命名空间每个pod 和容器的资源申请约束
ResourceQuota用于限制命名空间的总资源消耗
ResourceQuota example:
apiVersion: v1
kind: ResourceQuota
metadata:
name: object-counts
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
LimitRange example
apiVersion: "v1"
kind: "LimitRange"
metadata:
name: "resource-limits"
spec:
limits:
-
type: "Pod"
max:
cpu: "2"
memory: "1Gi"
min:
cpu: "200m"
memory: "6Mi"
-
type: "Container"
max:
cpu: "2"
memory: "1Gi"
min:
cpu: "100m"
memory: "4Mi"
default:
cpu: "300m"
memory: "200Mi"
defaultRequest:
cpu: "200m"
memory: "100Mi"
maxLimitRequestRatio:
cpu: "10"
LimitRange:每个pod 和容器的资源申请约束
LimitRange提供的约束可以:
1、在命名空间中限制每个 Pod 或容器的最小和最大计算资源使用量,如:cpu,memory
2、在命名空间中限制最小和最大存储持久卷或者本地存储容量,如:pvc,local-storage
3、为命名空间中的计算资源设置默认请求/限制,并在运行时自动将它们注入容器
4、在命名空间中限制pod或者容器申请的资源的limit与request的比值,即:limit/request的值
参数设置:
Container 参数:
* max: Pod 中所有容器的 Limits 值上限。
* min: Pod 中所有容器的 Requests 值下限。
* default: Pod 中容器未指定 Limits 时,将此值设置为默认值。
* defaultRequest: Pod 中容器未指定 Requests 是,将此值设置为默认值。
* maxLimitRequestRatio:
Pod 中的容器设置 Limits 与 Requests 的比例的值不能超过 maxLimitRequestRatio 参数
设置的值,即:Limits/Requests ≤ maxLimitRequestRatio。
Pod 参数:
* max: Pod 中所有容器资源总和值上限。
* min: Pod 中所有容器资源总和值下限。
* maxLimitRequestRatio:
Pod 中全部容器设置 Limits 总和与 Requests 总和的比例的值不能超过
maxLimitRequestRatio 参数设置的值,即:
(All Container Limits)/(All Container Requests) ≤ maxLimitRequestRatio。
示例:使用limitrange限制pod使用本地存储的空间,即:pod直接写入容器读写层的空间
apiVersion: v1
kind: LimitRange
metadata:
name: storage-limit
namespace: mytest
spec:
limits:
- default:
ephemeral-storage: 2Gi
defaultRequest:
ephemeral-storage: 1Gi
type: Container
ResourceQuota:命名空间的总资源消耗约束
ResourceQuota提供的约束可以:
1、计算资源配额: 限制一个 Namespace 中所有 Pod 的计算资源(CPU、Memory)的总和。
2、存储资源配额: 限制一个 Namespace 中所有存储资源的总量。
3、对象数量配额: 限制一个 Namespace 中指定类型对象的数量。
1、ResourcesQuota 支持的计算资源:
cpu: 所有非终止状态的Pod中,其CPU需求总量不能超过该值。
limits.cpu: 所有非终止状态的Pod中,其CPU限额总量不能超过该值。
limits.memory: 所有非终止状态的Pod中,其内存限额总量不能超过该值。
memory: 所有非终止状态的Pod中,其内存需求总量不能超过该值。
requests.cpu: 所有非终止状态的Pod中,其CPU需求总量不能超过该值。
requests.memory: 所有非终止状态的Pod中,其内存需求总量不能超过该值。
2、ResourcesQuota 支持限制的存储资源:
requests.storage:所有 PVC 请求的存储大小总量不能超过此值。
Persistentvolumeclaims: PVC 对象存在的最大数目。
.storageclass.storage.k8s.io/requests.storage:
和 StorageClass 关联的 PVC 的请求存储的量大小不能超过此设置的值。
.storageclass.storage.k8s.io/persistentvolumeclaims:
和 StorageClass 关联的 PVC 的总量。
3、ResourcesQuota 支持限制的对象资源:
Configmaps: 允许存在的 ConfigMap 的数量。
Pods: 允许存在的非终止状态的 Pod 数量,
如果 Pod 的 status.phase 为 Failed 或 Succeeded , 那么其处于终止状态。
Replicationcontrollers: 允许存在的 Replication Controllers 的数量。
Resourcequotas: 允许存在的 Resource Quotas 的数量。
Services: 允许存在的 Service 的数量。
services.loadbalancers: 允许存在的 LoadBalancer 类型的 Service 的数量。
services.nodeports: 允许存在的 NodePort 类型的 Service 的数量。
Secrets: 允许存在的 Secret 的数量。
配额作用域
每个配额都有一组相关的作用域(scope),配额只会对作用域内的资源生效。
当一个作用域被添加到配额中后,它会对作用域相关的资源数量作限制,
如配额中指定了允许(作用域)集合之外的资源,会导致验证错误。
作用域:
Terminating: 匹配 spec.activeDeadlineSeconds ≥ 0 的 Pod。
NotTerminating: 匹配 spec.activeDeadlineSeconds 是 nil(空) 的 Pod。
BestEffort: 匹配所有 QoS 等级是 BestEffort 级别的 Pod。
NotBestEffort: 匹配所有 QoS 等级不是 BestEffort 级别的 Pod。
配额作用域示例:
限制 Namespace 下 Pod 数量并只作用域 BestEffort
创建 resources-test3.yaml 用于设置 Pod 对象数量的配额,并设置作用域 BestEffort:
apiVersion: v1
kind: ResourceQuota
metadata:
name: besteffort
spec:
hard:
pods: "5"
scopes:
- BestEffort
LimitRange和ResourceQuota的对象设计
更多推荐
已为社区贡献51条内容
所有评论(0)