K8S_ResourceQuota与LimitRange的作用
ResourceQuota
作用详解
- 资源总量控制:
ResourceQuota
能对命名空间内的资源使用总量进行限制。在一个Kubernetes集群中,存在多个命名空间,每个命名空间可看作一个独立的工作单元。通过设置ResourceQuota
,可以防止某个命名空间过度占用资源,保障其他命名空间的资源需求,实现资源在不同命名空间间的合理分配。 - 资源类型覆盖广泛:它可以对多种类型的资源进行限制,包括计算资源(如CPU和内存)、存储资源(如持久卷声明)以及对象数量(如Pod、Service、Deployment等)。
- 多租户管理:在多租户环境下,每个租户通常使用独立的命名空间。通过为不同租户的命名空间设置不同的
ResourceQuota
,能根据租户的需求和付费情况分配资源,实现租户间的资源隔离。
示例
下面是一个ResourceQuota
的YAML文件示例:
apiVersion: v1
kind: ResourceQuota
metadata:name: my-namespace-quotanamespace: my-namespace
spec:hard:pods: "10"requests.cpu: "2"requests.memory: "4Gi"limits.cpu: "4"limits.memory: "8Gi"persistentvolumeclaims: "5"
在这个例子中,为my - namespace
命名空间设置了资源配额:
pods: "10"
:该命名空间内最多可以创建10个Pod。requests.cpu: "2"
:所有Pod对CPU的请求总量不能超过2个核心。requests.memory: "4Gi"
:所有Pod对内存的请求总量不能超过4GiB。limits.cpu: "4"
:所有Pod对CPU的限制总量不能超过4个核心。limits.memory: "8Gi"
:所有Pod对内存的限制总量不能超过8GiB。persistentvolumeclaims: "5"
:该命名空间内最多可以创建5个持久卷声明。
LimitRange
作用详解
- 单个对象资源规范:
LimitRange
用于限制命名空间内单个Pod或容器的资源请求和限制范围。它能确保每个容器或Pod的资源使用在合理范围内,避免个别容器请求过多资源或设置过小的资源限制。 - 默认资源设置:当创建Pod或容器时,如果没有明确指定资源请求和限制,
LimitRange
可以为其提供默认值,保证资源使用的一致性和规范性。 - 防止资源滥用:通过设置最小和最大资源限制,
LimitRange
可以防止用户不合理地请求资源,避免资源的浪费和滥用。
示例
以下是一个LimitRange
的YAML文件示例:
apiVersion: v1
kind: LimitRange
metadata:name: my-namespace-limitrangenamespace: my-namespace
spec:limits:- default:cpu: "1"memory: "2Gi"defaultRequest:cpu: "0.5"memory: "1Gi"max:cpu: "2"memory: "4Gi"min:cpu: "0.1"memory: "256Mi"type: Container
在这个例子中,为my - namespace
命名空间设置了LimitRange
:
default
:当容器没有指定资源限制时,默认的CPU限制为1个核心,内存限制为2GiB。defaultRequest
:当容器没有指定资源请求时,默认的CPU请求为0.5个核心,内存请求为1GiB。max
:容器可以请求的最大CPU为2个核心,最大内存为4GiB。min
:容器可以请求的最小CPU为0.1个核心,最小内存为256MiB。type: Container
:表明这个限制范围是针对容器的。