系列目錄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
這裏是針對上面的示例來講的,由於示例中配額同時配置了這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
的默認值.