k8s资源限制之LimitRange和ResourceQuota
在Kubernetes中,LimitRange和ResourceQuota都是用于资源管理的工具,但它们的目的、作用范围和使用方式有所不同。
作用范围
LimitRange是在Pod和容器级别上进行资源限制的工具,主要用于设定CPU和内存两种计算资源的可用范围,并且还可以支持在PersistentVolumeClaim资源级别设定存储空间的范围限制。ResourceQuota则作用于命名空间级别,用于限制命名空间中的资源使用量,例如Pod的数量、特定类型的资源对象的数量(如Services、Deployments等)以及命名空间内所有Pod可以使用的计算资源总量(如CPU、内存等)。
关注点
LimitRange主要关注资源的最小和最大限制,以确保公平性,例如设定Pod或容器的requests和limits属性必须在指定的资源范围内,否则将会被拒绝。而ResourceQuota主要关注资源的总量和分配,旨在防止资源的过度消耗和竞争,确保在多用户共享Kubernetes集群时,每个命名空间的资源使用量不会超过其配额限制。
默认值处理
当容器未显式指定request和limit属性时,LimitRange可以提供默认的requests和limits值给容器,这是变异型准入控制器的功能。ResourceQuota不提供这样的默认功能,而是要求显式地在创建资源时指定这些属性。
LimitRange
LimitRange用于限制命名空间中Pod和容器的资源使用范围。它可以设定最小和最大的CPU、内存等资源限制,并可以提供默认值和默认请求值。LimitRange主要关注资源的公平性和防止单个Pod或容器消耗过多资源。
LimitRange YAML示例:
apiVersion: v1
kind: LimitRange
metadata:
name: example-limitrange
spec:
limits:
- default:
cpu: 500m
memory: 512Mi
defaultRequest:
cpu: 200m
memory: 256Mi
type: Container
在这个示例中,LimitRange设置了容器的默认CPU和内存限制(default
)以及默认请求(defaultRequest
)。
ResourceQuota
ResourceQuota用于限制命名空间的资源总量,包括Pod数量、各种资源对象的总数以及Pod可以使用的计算资源总量。它主要用于多租户环境,以确保每个租户的资源使用都在其配额范围内。
ResourceQuota YAML示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: example-resourcequota
spec:
hard:
pods: "10"
requests.cpu: "1"
requests.memory: "2Gi"
limits.cpu: "2"
limits.memory: "4Gi"
在这个示例中,ResourceQuota限制了命名空间中可以创建的Pod数量为10个,以及Pod可以请求的CPU和内存总量,还有可以设置的CPU和内存限制总量。
对比
- 作用范围:LimitRange作用于Pod和容器级别,而ResourceQuota作用于命名空间级别。
- 关注点:LimitRange关注资源的最小、最大限制和公平性,ResourceQuota关注资源的总量和分配。
- 默认值:LimitRange可以提供默认的资源请求和限制值,ResourceQuota不提供默认值,而是要求显式配置。
它们通常一起使用,以实现对Kubernetes集群中资源的全面管理和控制。通过合理配置LimitRange和ResourceQuota,可以确保资源的合理分配和使用,防止资源的浪费和争用。
本文来自博客园,作者:dashery,转载请注明原文链接:https://www.cnblogs.com/ydswin/p/18088450