系列目錄html
LimitRange從字面意義上來看就是對範圍進行限制,其實是對cpu和內存資源使用範圍的限制nginx
前面咱們講到過資源配額,資源配額是對整個名稱空間的資源的總限制,是從總體上來限制的,而LimitRange則是對pod和container級別來作限制的api
因爲LimitRange是基於名稱空間的,所以爲了測試,咱們先建立一個名稱空間app
kubectl create namespace default-mem-example
建立LimitRange和Pod對象測試
如下配置文件聲明瞭內存的默認限制量和默認請求量spa
admin/resource/memory-defaults.yaml apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range spec: limits: - default: memory: 512Mi defaultRequest: memory: 256Mi type: Container
在default-mem-example名稱空間下建立它code
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example
如今,若是有在容器在default-mem-example
名稱空間下建立,而且在建立的時候沒有指定內存申請值和內存限制值,則它會被默認分配256M的內存請求和512M的內存上限htm
下面是一個包含容器的pod的配置.容器沒有顯式聲明資源申請和內存限制對象
admin/resource/memory-defaults-pod.yaml apiVersion: v1 kind: Pod metadata: name: default-mem-demo spec: containers: - name: default-mem-demo-ctr image: nginx
下面建立這個podblog
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example
查看這個pod的詳細信息
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
containers: - image: nginx imagePullPolicy: Always name: default-mem-demo-ctr resources: limits: memory: 512Mi requests: memory: 256Mi
以上輸出信息顯示pod的容器包含了一個256M的內存申請和一個512M的內存限制.它們是LimitRange
裏聲明的默認值
下面是一個pod的其中一個容器的聲明文件,它聲明瞭內存限制,可是沒有內存申請
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 https://k8s.io/examples/admin/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example
查看信息
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
resources: limits: memory: 1Gi requests: memory: 1Gi
能夠看到容器的內存申請值和限制值是同樣的.須要注意它並非LimitRange裏的默認值256M
下面是一個包含一個容器的pod聲明,容器只申請了資源,沒有限制
apiVersion: v1 kind: Pod metadata: name: default-mem-demo-3 spec: containers: - name: default-mem-demo-3-ctr image: nginx resources: requests: memory: "128Mi"
建立pod
kubectl apply -f https://k8s.io/examples/admin/resource/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
輸出信息顯示容器的申請值被設置爲聲明的值.而限制值被設置成了512M,這是LimitRange的默認設置
若是一個名稱空間包含有資源限額,那麼設置申請和限制默認值每每也是有幫助的.如下是資源配額對命名空間施加的兩個限制
在命名空間運行的每個容器必須有它本身的內存限額(CPU限額)。
在命名空間中全部的容器使用的內存總量(CPU總量)不能超出指定的限額。
apiVersion: v1 kind: LimitRange metadata: name: mem-limit-range namespace: example spec: limits: - default: # default limit memory: 512Mi cpu: 2 defaultRequest: # default request memory: 256Mi cpu: 0.5 max: # max limit memory: 800Mi cpu: 3 min: # min request memory: 100Mi cpu: 0.3 maxLimitRequestRatio: # max value for limit / request memory: 2 cpu: 2 type: Container # limit type, support: Container / Pod / PersistentVolumeClaim
default爲默認值,即pod不設置的時候的默認值.
defaultRequest 默認請求
max 請求上限
min請求下限
注意默認請求值即爲建立pod的時候不指定resource申請時默認賦予的值,默認值即爲默認限制的上限.即不指定的時候默認賦予的值.min和max是能夠指定的最大值和最小值.而且須要注意的是以上都是
Pod
級別的.
-maxLimitRequestRatio
顧名思義,是一個比率值,它是限制值和請求值的比率.因爲資源調度都是基於申請的值,所以可能會出現資源超售狀況(固然,可使用配額來限制總的量),這個比率顯示了超售的比率.