# CPU/内存资源限额
参考文档:Configure Memory and CPU Quotas for a Namespace (opens new window)
本文通过实例演示了如何通过ResourceQuota为名称空间配置CPU和内存的资源限额。演示的步骤如下:
# 创建名称空间
执行如下命令,创建名称空间:
kubectl create namespace quota-mem-cpu-example
1
# 创建ResourceQuota
下面是 ResourceQuota 的YAML文件:
apiVersion: v1
kind: ResourceQuota
metadata:
name: mem-cpu-demo
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
执行命令以创建该 ResourceQuota:
kubectl apply -f https://kuboard.cn/statics/learning/policy/rq-mem-cpu-quota.yaml --namespace=quota-mem-cpu-example
1
执行命令查看刚创建的 ResourceQuota:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
1
ResourceQuota 为 quota-mem-cpu-example
名称空间设定了如下资源配额:
- 每一个容器必须有 内存请求(request)、内存限制(limit)、CPU请求(request)、CPU限制(limit)
- 所有容器的内存请求总和不超过 1 GiB
- 所有容器的内存限定总和不超过 2 GiB
- 所有容器的CPU请求总和不超过 1 cpu
- 所有容器的CPU限定总和不超过 2 cpu
# 创建Pod
下面是一个 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"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
执行命令以创建该 Pod
kubectl apply -f https://kuboard.cn/statics/learning/policy/rq-mem-cpu-pod.yaml --namespace=quota-mem-cpu-example
1
执行命令验证 Pod 已运行:
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example
1
此时执行命令再次查看名称空间的资源配额消耗情况:
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
1
输出结果中除了显示名称空间的资源配额之外,同时还显示了该配额的使用情况。结果如下所示:
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
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 尝试创建第二个Pod
下面是另外一个 Pod 的 YAML 文件:
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"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
在此配置文件中,Pod 请求了 700MiB 的内存,如果加上第一个 Pod 所请求的内存,其结果已经超出了名称空间的资源配额中对内存请求的限制:600MiB + 600MiB > 1GiB
执行如下命令尝试创建该 Pod:
kubectl apply -f https://kuboard.cn/statics/learning/policy/rq-mem-cpu-pod-2.yaml --namespace=quota-mem-cpu-example
1
第二个 Pod 将不能创建成功,该命令的输出结果将提示创建 Pod 失败的原因是内存请求之和超过了内存请求的资源配额,错误信息如下所示:
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
1
2
3
2
3
# 总结
在本文的例子中,您可以使用 ResourceQuota
来限定名称空间中所有容器的内存请求(request)之和不超过指定的配额。同时也可以设置内存限定(limit)、CPU请求(request)、CPU限定(limit)的资源配额。
如果需要限定单个Pod、容器的资源使用情况,请参考 LimitRange
# 清理
删除名称空间可清理本文所创建的所有内容:
kubectl delete namespace quota-mem-cpu-example
1
免费答疑
微信群
微信扫码 进群发广告者死全家...
赞赏
微信扫码