kubernetes pod资源限制

资源限制namespace 设置 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: v1
kind: Pod
metadata:
name: memory-limits-demo
spec:
containers:
- name: memory-demo-2-ctr
image: vish/stress
resources:
requests:
memory: 50Mi
limits:
memory: "100Mi"
args:
- -mem-total
- 250Mi
- -mem-alloc-size
- 10Mi
- -mem-alloc-sleep
- 1s

memory-limits-demo 0/1 OOMKilled 6