1. 对 Pod 进行资源分配和资源限制

有两种方式可以限制资源:

  1. 在 Pod 的属性中配置

    • resource 字段

  2. 通过 limitRange 限制

注意:

  • 在 kubernetes 系统上,1 个单位的 cpu 相当于虚拟机上的一颗虚拟 cpu(vcpu),或者相当于物理机上的一个超线程(HyperThread,也就是一个逻辑CPU)

  • 支持分数计量方式

    • 一个核心(1 core)相当于 1000 个微核心(millicores)

    • 因此,500m 相当于 0.5 个核心,即二分之一个核心

1.1 resource 限制

resource 下有两个字段:

  1. requests : 表示容器所在节点资源的最小值

  2. limits : 表示消耗资源的最大值

其中:requests 和 limits 下都有两个字段以供限制:

  1. memory : 内存

  2. cpu : cpu

yaml 文件的模板为:

Copy to Clipboard

1.2 limitRange 限制

一个 LimitRange(限制范围) 对象提供的限制能够做到:

  • 在一个命名空间中实施对每个 Pod 或 Container 最小和最大的资源使用量的限制。

  • 在一个命名空间中实施对每个 PersistentVolumeClaim 能申请的最小和最大的存储空间大小的限制。

  • 在一个命名空间中实施对一种资源的申请值和限制值的比值的控制。也就是设置一个命名空间中对计算资源的默认申请/限制值,并且自动的在运行时注入到多个 Container 中

注意:如果 Pod 中设置了 resources 来限制,又有 limitrange 限制,那么:

  • 如果容器里声明了请求和限制大于或者小于 LimitRange 里的 max 或者 min,都会导致 Pod 创建不成功。

  • 也就是说 Pod 中 resources 的范围,必须小于 LimitRange 的范围,是其的一个子集。

limitRange 的 yaml 文件:

Copy to Clipboard

limitRange 设置 default 默认值:

Copy to Clipboard

注意:如果容器里没有声明请求和限制则,使用默认的请求和限制

2. 对命名空间进行资源配额

对命名空间进行资源配额,例如: 某个命名空间中最多能创建多少个 Pod

注意:

  • limitRange 用来限制每个 Pod 的资源

  • resourceQuota 用来限制项目里可以使用多少资源

创建 resourcequota 的模板文件为:

Copy to Clipboard