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