Kubernetes 在 Namespace 中配置默认的CPU和内存请求与限额
- 一、pod部分:
- 二、cpu实验:
- 三、cpu、内存配置实验
一、pod部分:
1.max表示pod中所有容器资源的Limit值和的上限,也就是整个pod资源的最大Limit,如果pod定义中的Limit值大于LimitRange中的值,则pod无法成功创建。
2.min表示pod中所有容器资源请求总和的下限,也就是所有容器request的资源总和不能小于min中的值,否则pod无法成功创建。
3.maxLimitRequestRatio表示pod中所有容器资源请求的Limit值和request值比值的上限,例如该pod中cpu的Limit值为3,而request为0.5,此时比值为6,创建pod将会失败。
container部分
1.在container的部分,max、min和maxLimitRequestRatio的含义和pod中的类似,只不过是针对单个的容器而言。下面说明几个情况:
2.如果container设置了max, pod中的容器必须设置limit,如果未设置,则使用defaultlimt的值,如果defaultlimit也没有设置,则无法成功创建
3.如果设置了container的min,创建容器的时候必须设置request的值,如果没有设置,则使用defaultrequest,如果没有defaultrequest,则默认等于容器的limit值,如果limit也没有,启动就会报错
defaultrequest和defaultlimit则是默认值,注意:pod级别没有这两项设置
二、cpu实验:
#创建名称空间
apiVersion: v1 #api版本
kind: Namespace #对象类型
metadata: #元数据
name: limitrange #对象名字
---
#创建limitrange
apiVersion: v1
kind: LimitRange #对象类型
metadata:
name: cpu-limitrange
namespace: limitrange #对象所在名字空间
spec: #对像部署期望
limits: #资源限制
- max: #最大
cpu: 5
min: #最小
cpu: 0.1
maxLimitRequestRatio: #pod中所有容器资源请求的Limit值和request值比值的上限
cpu: 50
type: Pod #pod限额
- default: #默认cpu限额
cpu: 0.5
defaultRequest: #默认cpu请求
cpu: 0.1
type: Container #容器限额
---
#创建deployment
apiVersion: apps/v1beta1 #api版本
kind: Deployment #对象类型
metadata: #元数据
name: nginx-v2
namespace: limitrange
spec: #期望
replicas: 3 #副本数
template: #pod设置
metadata: #元数据
labels:
app: nginx-v2
spec: #pod期望
containers:
- name: cpu-nginx
image: hlqlinux/hlq-test:nginx-v4
查看效果:
[root@iZbp16ke9g4qwtz7gw25fnZ limitrange]# kubectl create -f namespace.yaml
namespace/limitrange created
limitrange/cpu-limitrange created
deployment.apps/nginx-v2 created
[root@iZbp16ke9g4qwtz7gw25fnZ limitrange]# kubectl describe pod -n limitrange
Containers:
cpu-nginx:
cpu: 500m
Requests:
cpu: 100m
能够看到pod中容器做好了限制,现在如果在这个命名空间limitrange中创建一个容器,则该容器不需要指定它自己的CPU请求和CPU限额, 该容器会被赋予一个默认的CPU请求值0.1和一个默认的CPU限额值0.5。
三、cpu、内存配置实验
#创建名称空间
apiVersion: v1
kind: Namespace
metadata:
name: limitrange
---
#创建limitrange
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limitrange
namespace: limitrange
spec:
limits:
- max:
cpu: 5
memory: 2Gi
min:
cpu: 0.1
memory: 0.02Gi
maxLimitRequestRatio:
cpu: 50
memory: 20
type: Pod
- default:
cpu: 0.5
memory: 0.5Gi
defaultRequest:
cpu: 0.1
memory: 0.1Gi
type: Container
---
#创建deployment
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-v2
namespace: limitrange
spec:
replicas: 3
template:
metadata:
labels:
app: nginx-v2
spec:
containers:
- name: cpu-nginx
image: hlqlinux/hlq-test:nginx-v4
查看pod配置是否成功
[root@iZbp16ke9g4qwtz7gw25fnZ limitrange]# kubectl describe pod nginx-v2-5cdf7cfdf6-7szbh
Containers:
cpu-nginx:
Limits:
cpu: 500m
memory: 512Mi
Requests:
cpu: 100m
memory: 107374182400m
四、为容器配置cpu/内存最大最小限额
#创建名称空间
apiVersion: v1
kind: Namespace
metadata:
name: limitrange
---
#创建limitrange
apiVersion: v1
kind: LimitRange
metadata:
name: cpu-limitrange
namespace: limitrange
spec:
limits:
- max:
cpu: 4
memory: 2Gi
min:
cpu: 0.1
memory: 0.02Gi
maxLimitRequestRatio:
cpu: 40
memory: 100
type: Pod
- default:
cpu: 0.5
memory: 0.5Gi
defaultRequest:
cpu: 0.1
memory: 0.1Gi
max: #容器资源最大限制
cpu: 1
memory: 1Gi
min: #容器资源最小限制
cpu: 0.1
memory: 0.01Gi
type: Container
---
#创建deployment
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nginx-v2
namespace: limitrange
spec:
replicas: 3
template:
metadata:
labels:
app: nginx-v2
spec:
containers:
- name: cpu-nginx
image: hlqlinux/hlq-test:nginx-v4
resources:
limits: #资源限额
cpu: 0.5
memory: 0.8Gi
requests: #资源请求
cpu: 0.2
memory: 0.02Gi
kubectl describe pod -nlimitrange
Containers:
cpu-nginx:
Limits:
cpu: 500m
memory: 858993459200m
Requests:
cpu: 200m
memory: 21474836480m