簡介
主要講述如何給一個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請求數等於自定義的值。