簡介
在Kubernetes中通過namespace隔離資源,也可以對每個namespace中的新創建的pod設置默認的內存資源請求數和最大限制數,此時,在pod中資源對象中就不用配置內存資源了,內存資源等於默認值
備注:此文檔參考官方文檔,並加以自己的理解。如有誤導性的內容,請批評指正。
指定namespace中創建的pod配置默認的內存請求大小和內存最大限額
創建一個namespace
# kubectl create namespace default-mem-example
創建一個名為memory-defaults.yml
的配置文件,以下配置文件中給出了一個LimitRange
對象文件,配置中定義了內存請求大小及內存的最大限額。
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
創建資源,限制namespace為default-mem-example
的資源使用率
# kubectl apply -f /root/k8s-example/namespace/memory-defaults.yml --namespace=default-mem-example
如果上面的配置已創建,那么在default-mem-example
的namespace中創建的新的p容器不需要指定內存的請求數和限制數,容器中默認的內存請求數為256Mi
,內存限制數為512Mi
。
例如:創建只有一個容器的pod,文件名memory-defaults-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo
spec:
containers:
- name: default-mem-demo-ctr
image: nginx
# kubectl apply -f /root/k8s-example/namespace/memory-defaults-pod.yaml --namespace=default-mem-example
查看該Pod的資源詳情,如下:
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
從輸出的結果中,可以看到如下信息,該pod默認請求的內存資源是256Mi
,最大請求的內存資源是512Mi
。
containers:
- image: nginx
imagePullPolicy: Always
name: default-mem-demo-ctr
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
刪除Pod資源
# kubectl delete pod default-mem-example --namespace=default-mem-example
定義容器的限制數且限制數大於默認容器限制數,不定義請求數
創建只用一個容器的pod,文件名:memory-defaults-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-2
spec:
containers:
- name: default-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1Gi"
# kubectl apply -f /root/k8s-example/namespace/memory-defaults-pod-2.yaml --namespace=default-mem-example
查看該pod資源詳情
# kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
我們一開始設置的default-mem-example
命名空間內存請求數為256Mi
,內存最大限制為512Mi
。從default-mem-demo-2
容器中的輸出的結果可以看出,當default-mem-demo-2
容器的內存資源限制數1Gi
大於默認限制數512Mi
時,以容器自定義的資源限制數為准,且資源請求數等於自定義的最大資源限制數。
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
定義容器請求數,且容器請求數小於默認容器請求數,不定義限制數
創建只包含一個容器的pod,文件名:memory-defaults-pod-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-3
spec:
containers:
- name: default-mem-demo-3-ctr
image: nginx
resources:
requests:
memory: "128Mi"
# kubectl apply -f /root/k8s-example/namespace/memory-defaults-pod-3.yaml --namespace=default-mem-example
查看輸出結果
# kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
從結果中可以看出,當容器自定義的請求數小於默認請求數時,以容器自定義個資源請求數作為准。
resources:
limits:
memory: 512Mi
requests:
memory: 128Mi
實驗完畢,刪除命名空間
# kubectl delete namespace default-mem-example
總結
1、指定命名空間可以設置容器默認的內存資源請求數(memory requests)和最大限制數(memory limits)
2、容器可以自定義自身的內存資源請求數和內存最大限制數:
- 如果容器定義的
內存最大限制數大於默認的內存最大限制數
,則容器的內存最大限制數為自定義的值
,此時,容器內存資源請求數也將等於容器自定義的內存最大限制數
。 - 如果容器定義的
內存請求數小於默認的內存請求數
,則容器的內存請求數等於自定義的值
,此時,容器內存最大限制數等於默認的容器最大限制數
。