kubernetes之建立基於名稱空間的內存和cpu限額示例

系列目錄html

首先咱們建立一個名稱空間nginx

kubectl create namespace quota-mem-cpu-example

建立資源配額

apiVersion: v1
kind: ResourceQuota
metadata:
  name: mem-cpu-demo
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

經過命令建立它redis

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu.yaml --namespace=quota-mem-cpu-example

查看它的詳細信息:api

kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml

資源配額對名稱空間quota-mem-cpu-example增長了如下限制:app

  • 每個pod都必須內存申請/限制,cpu申請/限制

這裏是針對上面的示例來講的,由於示例中配額同時配置了這4個選項,所以pod必須聲明這四個選項spa

  • 全部容器內存申請總和不得超過1Gcode

  • 全部內存限制不得超過2gserver

  • 全部容器申請的cpu不得超過1htm

  • 全部容器限制的cpu不得超過2blog

下面建立一個pod

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo
spec:
  containers:
  - name: quota-mem-cpu-demo-ctr
    image: nginx
    resources:
      limits:
        memory: "800Mi"
        cpu: "800m" 
      requests:
        memory: "600Mi"
        cpu: "400m"

建立它

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example

查看配額詳細信息

kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
status:
  hard:
    limits.cpu: "2"
    limits.memory: 2Gi
    requests.cpu: "1"
    requests.memory: 1Gi
  used:
    limits.cpu: 800m
    limits.memory: 800Mi
    requests.cpu: 400m
    requests.memory: 600Mi

經過輸出信息能夠看到資源的配額值和已經使用的值,能夠看到pod的申請和限制均沒有超限

嘗試再建立一個pod

apiVersion: v1
kind: Pod
metadata:
  name: quota-mem-cpu-demo-2
spec:
  containers:
  - name: quota-mem-cpu-demo-2-ctr
    image: redis
    resources:
      limits:
        memory: "1Gi"
        cpu: "800m"      
      requests:
        memory: "700Mi"
        cpu: "400m"

經過配置文件能夠看到,pod申請的內存爲700M,請注意已使用的申請內存和新請求的和已經超限.

600M+700M>1G

嘗試建立pod

kubectl apply -f https://k8s.io/examples/admin/resource/quota-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example

輸出信息

Error from server (Forbidden): error when creating "examples/admin/resource/quota-mem-cpu-pod-2.yaml":
pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo,
requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.memory=1Gi

從輸出信息能夠看到,建立這個pod將會致使內存申請超限,所以第二個pod不會建立成功

若是想要對pod的資源進行限制,則能夠使用LimitRange,使用了LimitRange後,超過LimitRange限制資源的pod將不會建立,而且若是容器沒有指定申請或者限制,會被賦以LimitRange的默認值.

相關文章
相關標籤/搜索