Kubernetes之配置namespace的默認內存請求和限制


簡介

在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、容器可以自定義自身的內存資源請求數和內存最大限制數:

  • 如果容器定義的內存最大限制數大於默認的內存最大限制數,則容器的內存最大限制數為自定義的值,此時,容器內存資源請求數也將等於容器自定義的內存最大限制數
  • 如果容器定義的內存請求數小於默認的內存請求數,則容器的內存請求數等於自定義的值,此時,容器內存最大限制數等於默認的容器最大限制數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM