kubernetes之配置namespace的默认CPU请求和限制
简介
主要讲述如何给一个namespace中的容器配置默认的CPU请求数和CPU限制数。如果该命名空间中的容器创建时没有指定自定义的CPU策略,则会使用默认的CPU策略。
备注:此文档参考官方文档,并加以自己的理解。如有误导性的内容,请批评指正。
指定namespace中创建的pod配置默认的CPU请求大小和内存最大限额
创建一个namespace
# kubectl create namespace default-cpu-example
在default-cpu-example
命名空间中创建一个pod的LimitRange
对象,设置默认CPU最大限制数为1
,CPU默认请求数为0.5
。文件名:cpu-defaults.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limit-range
spec:
limits:
- default:
cpu: 1
defaultRequest:
cpu: 0.5
type: Container
创建资源对象
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults.yaml --namespace=default-cpu-example
如果容器创建于default-cpu-example
的namespace中,CPU请求数默认为0.5
,最大限制数为1
。
例如,创建一个包含一个容器的pod,文件名为:cpu-defaults-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo
spec:
containers:
- name: default-cpu-demo-ctr
image: nginx
创建pod
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod.yaml --namespace=default-cpu-example
查看pod资源详情:
# kubectl get pod default-cpu-demo --output=yaml --namespace=default-cpu-example
从下可以看到,容器default-cpu-demo
中的CPU资源均为默认值
containers:
- image: nginx
imagePullPolicy: Always
name: default-cpu-demo-ctr
resources:
limits:
cpu: "1"
requests:
cpu: 500m
定义容器的CPU限制数且限制数大于默认容器限制数,不定义CPU请求数
创建一个pod,自定义CPU最大限制数为1
,CPU请求数不设置。文件名:cpu-defaults-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo-2
spec:
containers:
- name: default-cpu-demo-2-ctr
image: nginx
resources:
limits:
cpu: "1"
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod-2.yaml --namespace=default-cpu-example
查看该pod的资源信息:
# kubectl get pod default-cpu-demo-2 --output=yaml --namespace=default-cpu-example
在容器default-cpu-demo-2
中,定义的CPU最大限制数是1
,刚好等于默认的最大限制数1
。从结果中看出,CPU的请求值是1
,而不是默认的0.5
。
resources:
limits:
cpu: "1"
requests:
cpu: "1"
定义容器请求数,且容器请求数小于默认容器请求数,不定义限制数
创建一个包含一个容器的Pod,文件名:cpu-defaults-pod-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-cpu-demo-3
spec:
containers:
- name: default-cpu-demo-3-ctr
image: nginx
resources:
requests:
cpu: "0.75"
# kubectl apply -f /root/k8s-example/namespace/cpu-defaults-pod-3.yaml --namespace=default-cpu-example
在容器default-cpu-demo-3
中,定义了CPU的请求是是0.75
,大于默认的CPU请求数0.5
。从结果看,容器default-cpu-demo-3
中的CPU请求数等于自定义值,容器的限制数不变,为默认值1
resources:
limits:
cpu: "1"
requests:
cpu: 750m
实验完毕,删除namespace
# kubectl delete namespace default-cpu-example
总结
1、指定命名空间可以设置容器默认的CPU资源请求数(CPU requests)和CPU最大限制数(CPUlimits)
2、容器可以自定义自身的CPU资源请求数和CPU最大限制数:
- 如果容器定义的
CPU最大限制数大于或等于默认的CPU最大限制数
,则容器的CPU最大限制数为自定义的值
,此时,容器CPU资源请求数也将等于容器自定义的CPU最大限制数
。 - 如果定义的
CPU请求数大于默认的CPU请求数且小于默认最大CPU限制数
,则容器的CPU请求数等于自定义的CPU请求数
;如果定义的CPU请求数小于默认的CPU请求数
,则容器的CPU请求数等于自定义的CPU请求数
。总的来说,只要定义的容器CPU请求数小于默认最大CPU限制数
,则自定义CPU请求数优先级更高,此时CPU请求数等于自定义的值。