1. 简介

在kubernetets系统上,1个单位的CPU相当于虚拟机上的一颗虚拟CPU(vCPU)或者物理机上的一个超线程(HyperThread,或者称一个逻辑(CPU),它支持分数计量方式,一个核心(1core)相当于1000个微核心(millicores),因此500m相当于是0.5个核心,即二分之一个核心

2. resource字段来限制

创建pod做资源限制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1-new
spec:
#serviceAccount: sa1
containers:
- image: centos
imagePullPolicy: IfNotPresent
name: pod1
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}

requests —容器所在节点 资源的最小值
limits —容器消耗资源最大值

3. limitrange限制

如果容器里没有声明请求和限制则使用默认的请求和限制如果容器内没有声明最大值最小值则使用这里设置的
如果容器里声明了请求和限制大于或者小于 limitrange里的max或者min,都会导致pod创建不成功。
容器申请的资源不能超过limit

1
2
3
4
5
6
7
8
9
10
11
12
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo-lr
namespace: chap12-safe
spec:
limits:
- max:
memory: 1Gi
min:
memory: 512Mi
type: Container

查看资源

1
2
3
4
5
6
[root@node001 aa]# kubectl describe limitranges mem-min-max-demo-lr 
Name: mem-min-max-demo-lr
Namespace: chap12-safe
Type Resource Min Max Default Request Default Limit Max Limit/Request Ratio
---- -------- --- --- --------------- ------------- -----------------------
Container memory 512Mi 1Gi 1Gi 1Gi -

4. resourcequota

limitrange 用来限制每个pod的资源
resourcequtoa 用来限制一个ns里可以使用多少资源

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: v1
kind: ResourceQuota
metadata:
name: myquota
spec:
hard:
configmaps: "10"
persistentvolumeclaims: "4"
pods: "4"
replicationcontrollers: "20"
secrets: "10"
services: "10"
services.loadbalancers: "2"

查看资源

1
2
3
[root@node001 aa]# kubectl get resourcequotas 
NAME AGE REQUEST LIMIT
myquota 7s configmaps: 1/10, persistentvolumeclaims: 0/4, pods: 5/4, replicationcontrollers: 0/20, secrets: 1/10, services: 1/10, services.loadbalancers: 1/2