Resource Quota
资源配额(Resource Quotas)是用来限制用户资源用量的一种机制。
它的工作原理为
    资源配额应用在 Namespace 上,并且每个 Namespace 最多只能有一个 ResourceQuota 对象
    开启计算资源配额后,创建容器时必须配置计算资源请求或限制(也可以用 LimitRange 设置默认值)
    用户超额后禁止创建新的资源

开启资源配额功能

    首先,在 API Server 启动时配置准入控制 --admission-control=ResourceQuota
    然后,在 namespace 中创建一个 ResourceQuota 对象

资源配额的类型

    计算资源,包括 cpu 和 memory
      cpu, limits.cpu, requests.cpu
      memory, limits.memory, requests.memory
    存储资源,包括存储资源的总量以及指定 storage class 的总量
      requests.storage:存储资源总量,如 500Gi
      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
计算资源示例
1
apiVersion: v1
2
kind: ResourceQuota
3
metadata:
4
name: compute-resources
5
spec:
6
hard:
7
pods: "4"
8
requests.cpu: "1"
9
requests.memory: 1Gi
10
limits.cpu: "2"
11
limits.memory: 2Gi
Copied!
对象个数示例
1
apiVersion: v1
2
kind: ResourceQuota
3
metadata:
4
name: object-counts
5
spec:
6
hard:
7
configmaps: "10"
8
persistentvolumeclaims: "4"
9
replicationcontrollers: "20"
10
secrets: "10"
11
services: "10"
12
services.loadbalancers: "2"
Copied!

LimitRange

默认情况下,Kubernetes 中所有容器都没有任何 CPU 和内存限制。LimitRange 用来给 Namespace 增加一个资源限制,包括最小、最大和默认资源。比如
1
apiVersion: v1
2
kind: LimitRange
3
metadata:
4
name: mylimits
5
spec:
6
limits:
7
- max:
8
cpu: "2"
9
memory: 1Gi
10
min:
11
cpu: 200m
12
memory: 6Mi
13
type: Pod
14
- default:
15
cpu: 300m
16
memory: 200Mi
17
defaultRequest:
18
cpu: 200m
19
memory: 100Mi
20
max:
21
cpu: "2"
22
memory: 1Gi
23
min:
24
cpu: 100m
25
memory: 3Mi
26
type: Container
Copied!
1
$ kubectl create -f https://k8s.io/docs/tasks/configure-pod-container/limits.yaml --namespace=limit-example
2
limitrange "mylimits" created
3
$ kubectl describe limits mylimits --namespace=limit-example
4
Name: mylimits
5
Namespace: limit-example
6
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
7
---- -------- --- --- --------------- ------------- -----------------------
8
Pod cpu 200m 2 - - -
9
Pod memory 6Mi 1Gi - - -
10
Container cpu 100m 2 200m 300m -
11
Container memory 3Mi 1Gi 100Mi 200Mi -
Copied!

配额范围

每个配额在创建时可以指定一系列的范围
范围
说明
Terminating
podSpec.ActiveDeadlineSeconds>=0 的 Pod
NotTerminating
podSpec.activeDeadlineSeconds=nil 的 Pod
BestEffort
所有容器的 requests 和 limits 都没有设置的 Pod(Best-Effort)
NotBestEffort
与 BestEffort 相反
最近更新 2yr ago