kubernetes集群之资源配额(Resource Quotas

一.简单介绍

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

二.资源配额的启用

首先,在API Server启动时配置ResourceQuota adminssion control,然后在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

对象数,即可创建的对象的个数

pods, replicationcontrollers, configmaps, secrets
resourcequotas, persistentvolumeclaims
services, services.loadbalancers, services.nodeports

四.LimitRange

默认情况下,kubernetes中所有容器都没有任何cpu和内存限制。limitRange用来给Namespace增加一个资源限制,包括最小、最大和默认资源。比如:

apiVersion: v1
kind: LimitRange
metadata:
  name: 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

五.kubernetes Resource QoS Classes 介绍

对于每一种Resource都可以将容器分为三种Qos Classes: Guaranteed,Burstable,Best-Effort,它们的QoS级别依次递减。

5.1 Guaranteed

如果pod中所有Container的所有Resource的limit和request相等都不为0,则这个Pod的Qos Class就是Guaranteed。
注意:如果一个容器只指明了limit,而未指明request,则表明request的值等于limit的值。
例子如下:

containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
    name: bar
        resources:
            limits:
                cpu: 100m
                memory: 100Mi
containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar
        resources:
            limits:
                cpu: 100m
                memory: 100Mi
            requests:
                cpu: 100m
                memory: 100Mi

5.2 Best-Effort

如果Pod中所有容器的所有Resource的request和limit都没有赋值,则这个Pod的QoS Class就是Best-Effort.

containers:
    name: foo
        resources:
    name: bar
        resources:

5.3 Burstable
除了符合Guaranteed和Best-Effort的场景,其他场景的Pod QoS Class都属于Burstable。
注意:当limit值未指定时,其有效值其实是对应Node Resource的Capacity。

# 容器bar没有对Resource进行指定。
containers:
    name: foo
        resources:
            limits:
                cpu: 10m
                memory: 1Gi
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar
# 容器foo和bar对不同的Resource进行了指定。
containers:
    name: foo
        resources:
            limits:
                memory: 1Gi

    name: bar
        resources:
            limits:
                cpu: 100m
容器foo未指定limit,容器bar未指定request和limit。
containers:
    name: foo
        resources:
            requests:
                cpu: 10m
                memory: 1Gi

    name: bar

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注