limitRange:为命名空间配置默认的默认的资源请求和限制 如果在一个有默认资源限制的命名空间创建容器,
该容器没有声明自己的资源限制时,将会被指定默认的资源限制.
LimitRange是在pod和container级别的资源限制
内存配额
创建命名空间
创建默认内存配额
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
vim mem-lr-demo.yaml
---
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
|
1
|
kubectl apply -f mem-lr-demo.yaml -n lr
|
测试
创建pod
1
2
3
4
5
6
7
8
9
10
11
|
vim mem-demo.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo
spec:
containers:
- name: default-mem-demo
image: nginx
|
1
|
kubectl apply -f mem-demo.yaml -n lr
|
查看pod详情
1
2
3
4
5
6
7
8
9
10
11
12
13
|
kubectl get pods -n lr -o yaml
.....
containers:
- image: nginx
imagePullPolicy: Always
name: default-mem-demo
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
.....
|
注意:
如果创建容器时仅指定限制,不指定申请。那么容器里的申请值和限制值是一样,而不是LimitRange里的默认值256M。
如果创建容器时仅指定申请,不指定限制时。那么容器里的申请值就是指定的值,而限制值是LimitRange的默认值
内存最大和最小限制
创建命名空间
创建LimitRange
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
vim maxmin-lr-demo.yaml
---
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo
spec:
limits:
- max:
memory: 1Gi
min:
memory: 500Mi
type: Container
|
测试
创建pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
vim maxmin-demo.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo
spec:
containers:
- name: constraints-mem-demo
image: nginx
resources:
limits:
memory: "800Mi"
requests:
memory: "600Mi"
|
1
|
kubectl apply -f maxmin-demo.yaml -n lr-1
|
查看pod详情
1
2
3
4
5
6
7
8
9
10
11
12
13
|
kubectl get pods -n lr-1 -o yaml
......
containers:
- image: nginx
imagePullPolicy: Always
name: constraints-mem-demo-ctr
resources:
limits:
memory: 800Mi
requests:
memory: 600Mi
......
|
注意:创建pod时资源请求值和限制值必须在LimitRange设置的范围内,否则创建pod时会报错。如果创建容器时没有声明请求和限制,它会从LimitRange那里获得默认的请求和限制
CPU配额
创建命名空间
创建默认cpu配额
1
2
3
4
5
6
7
8
9
10
11
12
13
|
vim cpu-lr-demo.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
|
1
|
kubectl apply -f vim cpu-lr-demo.yaml -n lr-2
|
测试
创建pod
1
2
3
4
5
6
7
8
9
10
11
|
vim cpu-demo.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo
spec:
containers:
- name: default-cpu-demo
image: nginx
|
1
|
kubectl apply -f cpu-demo.yaml -n lr-2
|
查看pod详情
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
kubectl get pods -n lr-1 -o yaml
......
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: default-cpu-demo
resources:
limits:
cpu: "1"
requests:
cpu: 500m
......
|
注意:
如果创建容器时仅指定限制,不指定申请。那么容器里的申请值和限制值是一样,而不是LimitRange里的默认值0.5cpu。
如果创建容器时仅指定申请,不指定限制时。那么容器里的申请值就是指定的值,而限制值是LimitRange的默认值
CPU的最大和最小限制
创建命名空间
创建LimitRange
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
vim cpu-maxmin-lr-demo.yaml
---
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-min-max-demo-lr
spec:
limits:
- max:
cpu: "800m"
min:
cpu: "200m"
type: Container
|
1
|
kubectl apply -f cpu-maxmin-lr-demo.yaml -n lr-3
|
测试
创建pod
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
vim cpu-maxmin.yaml
---
apiVersion: v1
kind: Pod
metadata:
name: constraints-cpu-demo
spec:
containers:
- name: constraints-cpu-demo-ctr
image: nginx
resources:
limits:
cpu: "800m"
requests:
cpu: "500m"
|
1
|
kubectl apply -f cpu-maxmin.yaml -n lr-3
|
查看pod详情
1
2
3
4
5
6
7
8
9
10
11
12
|
kubectl get pods -n lr-3 -o yaml
......
containers:
- image: nginx
imagePullPolicy: Always
name: constraints-cpu-demo-ctr
resources:
limits:
cpu: 800m
requests:
cpu: 500m
......
|
注意:创建pod时资源请求值和限制值必须在LimitRange设置的范围内,否则创建pod时会报错。如果创建容器时没有声明请求和限制,它会从LimitRange那里获得默认的请求和限制
完整示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
apiVersion: v1
kind: LimitRange
metadata:
name: limit-range-demo
spec:
limits:
- default:
memory: 512Mi
cpu: 1
defaultRequest:
memory: 256Mi
cpu: 0.5
max:
memory: 1024Mi
cpu: 1
min:
memory: 128Mi
cpu: 0.5
type: Container
|
说明:
default
:即该namespace配置resourceQuota时,创建container的默认limit上限
defaultRequest
:即该namespace配置resourceQuota时,创建container的默认request上限
max
:即该namespace下创建container的资源最大值
min
:即该namespace下创建container的资源最小值
其中: min <= defaultRequest <= default <= max
如果指定了 LimitRange 对象的 spec.limits.maxLimitRequestRatio 字段,名称空间中的 Pod/容器的 request 和 limit 都不能为 0,且 limit 除以 request 的结果必须小于或等于 LimitRange 的 spec.limits.maxLimitRequestRatio
Author
dylan
LastMod
2020-03-28
License
如需转载请注明文章作者和出处。谢谢!