系列目录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
的默认值.