Kubernetes 源码 (17) 计算资源管理 3

Submitted by Lizhe on Fri, 07/17/2020 - 06:15

这一节讨论 LimitRange 和 ResourceQuota

API Server 在接收到带有 pod 描述信息的 POST 请求时,LimitRanger 插件对 Pod spec 进行校验。如果校验失败,会直接拒绝。

LimitRange 对象的一个广泛应用场景就是阻止用户创建大于 单个节点资源量的 pod。如果没有LimitRange,API Server 将接受任何请求,然后永远无法调度成功。

LimitRange 资源中的 limits 应用于同一个命名空间中的 每一个 独立 Pod、容器或者其他类型对象。但是它并不会限制这个命名空间中所有pod的可用资源总量

ResourceQuota 才是控制总量的配置。


 

 

实验一

如果你像我一样使用的是 rancher,那么rancher界面上只能配置默认 requests 和 limits,但是并没有影响 min 和 max

20200717025410

20200717024921

20200717024250


 

实验二

创建一个 LimitRange 

 

apiVersion: v1

kind: LimitRange

metadata:

  name: lizhe-limit-range

  namespace: lizhe

spec:

  limits:

  - default:  # default limit

      memory: 512Mi

      cpu: 1

    defaultRequest:  # default request

      memory: 256Mi

      cpu: 0.5

    max:  # max limit

      memory: 800Mi

      cpu: 1.5

    min:  # min request

      memory: 100Mi

      cpu: 0.3

    maxLimitRequestRatio:  # max value for limit / request

      memory: 2

      cpu: 2

    type: Container # limit type, support: Container / Pod / PersistentVolumeClaim

 

 20200717032711

 


 

实验三 小于 min

        resources:
          limits:
            cpu: 0.2
            memory: 50Mi

20200717040114

        resources:
          limits:
            cpu: 0.2

20200717040838

 


 

实验三 大于 max

        resources:
          limits:
            cpu: "1.6"

20200717042407

        resources:
          limits:
            cpu: 1400m
            memory: 900Mi

 

20200717042716

 


 

实验四

maxLimitRequestRatio: # max value for limit / request

        resources:
          limits:
            cpu: 1400m
            memory: 800Mi
          requests:
            cpu: 500m
            memory: 300Mi

上面的配置里,cpu和memory的比例都超过了2但是都在min和max范围之内

20200717043846