一、ResourceQuota YAML
对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。
:如果
namespace
配置了限额,在创建资源时的containers
里面必须也配置限额
kubectl explain resourcequota
字段 | 值类型 | 说明 |
---|---|---|
apiVersion |
string |
v1 |
kind |
string |
ResourceQuota |
metadata |
Object |
定义元数据信息 |
spec |
Object |
定义规则 |
- resourcequota 的
resourcequota.metadata
字段,与 pod 类似
kubectl explain resourcequota.metadata
- resourcequota 的
resourcequota.spec
字段
kubectl explain resourcequota.spec
字段 | 值类型 | 说明 |
---|---|---|
hard |
map[string]string |
限制 pod 资源(也就是 pod 中容器的总和资源),在此 namespace 下的 pod 不能超过的限制pod : 限制 pod 数量limits.cpu : 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值limits.memory : 所有非终止状态的 Pod,其内存限额总量不能超过该值。requests.cpu : 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。requests.memory : 所有非终止状态的 Pod,其内存需求总量不能超过该值。hugepages-<size> : 所有非终止状态的 Pod,针对指定尺寸的 hugepages 请求总数不能超过此值cpu : 与 requests.cpu 相同memory : 与 requests.memory 相同 |
scopeSelector |
Object |
作用域选择器 |
scopes |
[]string |
作用域,配额只会对作用域内的资源生效 |
示例:
apiVersion: v1
kind: ResourceQuota
metadata:
name: quota-test
namespace: xxx # 对 xxx 这个命名空间内资源做限制
spec:
hard:
pods: "10" # pod 不能超过 10 个
requests.cpu: "2" # 所有 pod 总和的 requests.cpu 不能少于 2 个
requests.memory: 2Gi # 所有 pod 总和的 requests.memory 不能少于 2Gi
limits.cpu: "4" # 所有 pod 总和的 limits.cpu 最多可以有 4 个cpu
limits.memory: 10Gi # 所有 pod 总和的 limits.memory 最多可以有 10Gi 内存
二、LimitRange YAML
在限制命名空间内,可为每个对象类别 (例如
Pod
或PersistentVolumeClaim
)分别指定资源分配量(limit
和request
)的策略。
定义了LimitRange
在创建资源时可不用在写资源限制。
kubectl explain LimitRange
字段 | 值类型 | 说明 |
---|---|---|
apiVersion |
string |
v1 |
kind |
string |
LimitRange |
metadata |
Object |
定义元数据信息,与 pod 类似 |
spec |
Object |
定义规则 |
kubectl explain LimitRange.spec.limits
字段 | 值类型 | 说明 |
---|---|---|
default |
map[string]string |
当创建资源时没有指定 containers 里面的 limits 资源限制,使用这个默认的 |
defaultRequest |
map[string]string |
当创建资源时没有指定 containers 里面的 request 资源限制,使用这个默认的 |
min |
map[string]string |
如果创建资源时,指定了containers 里面的 request ,那么这个值不能小于 min 的值 |
max |
map[string]string |
如果创建资源时,指定了containers 里面的 limits ,那么这个值不能大于 max 的值 |
maxLimitRequestRatio |
map[string]string |
比率 如: maxLimitRequestRatio 里面的 memory: 4 ;创建资源指定了 containers 里面的下线 request 的 memory 为 500,那么上线 limit 就小于等于 2000。同理定了 containers 里面的上线 limits 的 memory 为 2000,下线 request 就大于等于 500 |
* type |
string |
定义限制的资源类型;如 Container
|
示例:
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-memory
namespace: limit
spec:
limits:
- default: # 当资源未定义 Limit 时使用这个
cpu: 1000m
memory: 1000Mi
defaultRequest: # 当资源未定义 request 时使用这个
cpu: 500m
memory: 500Mi
min: # 当资源指定 request 时最小值不能小于这个
cpu: 500m
memory: 500Mi
max: # 当资源定义了 limit 最大值不能大于这个
cpu: 2000m
memory: 2000Mi
maxLimitRequestRatio: # 定义比率
cpu: 4 # 当资源定义 limit 时,request >= limit / 4
memory: 4 # 当资源定义 request 时,limit <= request * 4
type: Container # 定义 ccontainer 时生效