kubernetes资源配额限制 - ResouceQuota 和 LimitRange
🕗2019-06-18👁️77
K8S 资源限制 分为 ResouceQuota 和 LimitRange两种
资源限额(Resource Quota)
资源限额可以为每一个命名空间提供一个总体的资源使用的限制,限制命名空间某种类型的资源对象的总数目上线,限制pod可以使用到的计算资源的总上限
创建应该dev的命名空间kubectl create dev
创建Resource Quota对象资源文件
1
|
cat quota-mem-cpu.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "2"
requests.memory: 2Gi
limits.cpu: "4"
limits.memory: 4Gi
|
创建Resource Quota对象
1
|
kubectl apply -f quota-mem-cpu.yaml -n dev
|
创建应该pod测试
1
|
cat pod-quota-mem-cpu.yaml
apiVersion: v1
kind: Pod
metadata:
name: quota-mem-cpu-demo
spec:
containers:
- name: quota-mem-cpu-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
cpu: "800m"
requests:
memory: "600Mi"
cpu: "400m"
|
1
|
$ kubectl describe resourcequota mem-cpu-demo -n dev quota-mem-cpu
Name: mem-cpu-demo
Namespace: dev
Resource Used Hard
-------- ---- ----
limits.cpu 800m 4
limits.memory 800Mi 4Gi
requests.cpu 400m 2
requests.memory 600Mi 2Gi
|
当开启了resource quota时,用户创建pod,必须指定cpu、内存的 requests or limits ,否则创建失败
LimitRange配置默认CPU和内存
LimitRange分为默认请求和限额和限制大小,如果在一个拥有默认内存限额的命名空间中创建一个容器,并且这个容器未指定它自己的内存限额, 它会被分配这个默认的内存限额值
以下是一个 LimitRange 对象的配置文件。该配置指定了默认的内存请求与默认的内存限额。
1
|
cat /root/quota-mem-cpu/limit-range.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-cpu-limit-range
spec:
limits:
- default:
memory: 4Gi
cpu: 4
defaultRequest:
memory: 4Gi
cpu: 2
type: Container
|
限制可用最大最小配置文件,podLimitRange必须配置在最大资源的范围内。
1
|
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-min-max-demo-lr
spec:
limits:
- max:
cpu: "4"
min:
cpu: "2"
type: Container
|
测试
创建一个Pod尝试分配超过其限制的内存,下面的这个Pod的配置文档,它申请50M的内存, 内存限制设置为100M。在配置文件里的args段里,可以看到容器尝试分配250M的内存,超过了限制的100M。
1 |
apiVersion: v1 |
memory-limits-demo 0/1 OOMKilled 6