资源配额
资源配额(ResourceQuota)
ResourceQuota
对象用来定义某个命名空间下所有资源的使用限额,其实包括:
- 计算资源的配额
- 存储资源的配额
- 对象数量的配额
如果集群的总容量小于命名空间的配额总额,可能会产生资源竞争。这时会按照先到先得来处理。 资源竞争和配额的更新都不会影响已经创建好的资源。
1. 启动资源配额
Kubernetes 的众多发行版本默认开启了资源配额的支持。当在apiserver的--admission-control
配置中添加ResourceQuota
参数后,便启用了。 当一个命名空间中含有ResourceQuota
对象时,资源配额将强制执行。
2. 计算资源配额
可以在给定的命名空间中限制可以请求的计算资源(compute resources)的总量。
资源名称 | 描述 |
---|---|
cpu | 非终止态的所有pod, cpu请求总量不能超出此值。 |
limits.cpu | 非终止态的所有pod, cpu限制总量不能超出此值。 |
limits.memory | 非终止态的所有pod, 内存限制总量不能超出此值。 |
memory | 非终止态的所有pod, 内存请求总量不能超出此值。 |
requests.cpu | 非终止态的所有pod, cpu请求总量不能超出此值。 |
requests.memory | 非终止态的所有pod, 内存请求总量不能超出此值。 |
3. 存储资源配额
可以在给定的命名空间中限制可以请求的存储资源(storage resources)的总量。
资源名称 | 描述 |
---|---|
requests.storage | 所有PVC, 存储请求总量不能超出此值。 |
persistentvolumeclaims | 命名空间中可以存在的PVC(persistent volume claims)总数。 |
.storageclass.storage.k8s.io/requests.storage | 和该存储类关联的所有PVC, 存储请求总和不能超出此值。 |
.storageclass.storage.k8s.io/persistentvolumeclaims | 和该存储类关联的所有PVC,命名空间中可以存在的PVC(persistent volume claims)总数。 |
4. 对象数量的配额
资源名称 | 描述 |
---|---|
congfigmaps | 命名空间中可以存在的配置映射的总数。 |
persistentvolumeclaims | 命名空间中可以存在的PVC总数。 |
pods | 命名空间中可以存在的非终止态的pod总数。如果一个pod的status.phase 是 Failed, Succeeded , 则该pod处于终止态。 |
replicationcontrollers | 命名空间中可以存在的rc 总数。 |
resourcequotas | 命名空间中可以存在的资源配额(resource quotas)总数。 |
services | 命名空间中可以存在的服务总数量。 |
services.loadbalancers | 命名空间中可以存在的服务的负载均衡的总数量。 |
services.nodeports | 命名空间中可以存在的服务的主机接口的总数量。 |
secrets | 命名空间中可以存在的secrets 的总数量。 |
例如:可以定义pod的限额来避免某用户消耗过多的Pod IPs。
5. 限额的作用域
作用域 | 描述 |
---|---|
Terminating | 匹配 spec.activeDeadlineSeconds >= 0 的pod |
NotTerminating | 匹配 spec.activeDeadlineSeconds is nil 的pod |
BestEffort | 匹配具有最佳服务质量的pod |
NotBestEffort | 匹配具有非最佳服务质量的pod |
6. request和limit
当分配计算资源时,每个容器可以为cpu或者内存指定一个请求值和一个限度值。可以配置限额值来限制它们中的任何一个值。
如果指定了requests.cpu
或者 requests.memory
的限额值,那么就要求传入的每一个容器显式的指定这些资源的请求。如果指定了limits.cpu
或者limits.memory
,那么就要求传入的每一个容器显式的指定这些资源的限度。
7. 查看和设置配额
# 创建namespace
$ kubectl create namespace myspace
# 创建resourcequota
$ cat <<EOF > compute-resources.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-resources
spec:
hard:
pods: "4"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
EOF
$ kubectl create -f ./compute-resources.yaml --namespace=myspace
# 查询resourcequota
$ kubectl get quota --namespace=myspace
NAME AGE
compute-resources 30s
# 查询resourcequota的详细信息
$ kubectl describe quota compute-resources --namespace=myspace
Name: compute-resources
Namespace: myspace
Resource Used Hard
-------- ---- ----
limits.cpu 0 2
limits.memory 0 2Gi
pods 0 4
requests.cpu 0 1
requests.memory 0 1Gi
8. 配额和集群容量
资源配额对象与集群容量无关,它们以绝对单位表示。即增加节点的资源并不会增加已经配置的namespace的资源。
参考文章:
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
最后修改 December 25, 2022: deploy by blog source (a162b04)