Resource Quotas,资源配额,是用来限制用户资源用量的一种机制。
使用资源配额前提条件
-
在 API Server 启动时配置准入控制
--admission-control=ResourceQuota
-
在 namespace 中创建一个
ResourceQuota
对象,并且每个 Namespace 最多只能有一个ResourceQuota
对象 -
创建容器时必须配置计算资源请求或限制(也可以用
LimitRange
设置默认值) -
用户超额后禁止创建新的资源
资源配额类型
- 计算资源,包括 cpu 和 memory
- cpu: limits.cpu, requests.cpu
- memory:limits.memory, requests.memory
- 存储资源,包括存储资源的总量以及指定 storage class 的总量
- requests.storage:存储资源总量
- persistentvolumeclaims:pvc 的个数
- .storageclass.storage.k8s.io/requests.storage
- .storageclass.storage.k8s.io/persistentvolumeclaims
- requests.ephemeral-storage 和 limits.ephemeral-storage (需要 v1.8+)
- 对象资源,即可创建的资源对象的个数
- pods, replicationcontrollers, configmaps, secrets
- resourcequotas, persistentvolumeclaims
- services, services.loadbalancers, services.nodeports
资源配额限制
apiVersion: v1
kind: ResourceQuota
metadata:
name: resources
namespace: default
spec:
hard:
pods: "4"
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
configmaps: "10"
persistentvolumeclaims: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"
LimitRange
默认情况下,Kubernetes 中所有容器都没有任何 CPU 和内存限制。LimitRange 用来给 Namespace 增加一个资源限制,包括最小、最大和默认资源。
apiVersion: v1
kind: LimitRange
metadata:
name: mylimits
namespace: mylimits
spec:
limits:
- max:
cpu: "2"
memory: 1Gi
min:
cpu: 200m
memory: 6Mi
type: Pod
- default:
cpu: 300m
memory: 200Mi
defaultRequest:
cpu: 200m
memory: 100Mi
max:
cpu: "2"
memory: 1Gi
min:
cpu: 100m
memory: 3Mi
type: Container
网友评论