Kubernetes YAML 详解之资源限制(ResourceQuota、LimitRange)

一、ResourceQuota YAML

对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。
\color{red}{注意}:如果 namespace 配置了限额,在创建资源时的 containers 里面必须也配置限额

kubectl explain resourcequota
字段 值类型 说明
apiVersion string v1
kind string ResourceQuota
metadata Object 定义元数据信息
spec Object 定义规则
kubectl explain resourcequota.metadata
  • resourcequota 的 resourcequota.spec 字段
kubectl explain resourcequota.spec
字段 值类型 说明
hard map[string]string 限制 pod 资源(也就是 pod 中容器的总和资源),在此 namespace 下的 pod 不能超过的限制
pod: 限制 pod 数量
limits.cpu: 所有非终止状态的 Pod,其 CPU 限额总量不能超过该值
limits.memory: 所有非终止状态的 Pod,其内存限额总量不能超过该值。
requests.cpu: 所有非终止状态的 Pod,其 CPU 需求总量不能超过该值。
requests.memory: 所有非终止状态的 Pod,其内存需求总量不能超过该值。
hugepages-<size>: 所有非终止状态的 Pod,针对指定尺寸的 hugepages 请求总数不能超过此值
cpu: 与 requests.cpu 相同
memory: 与 requests.memory 相同
scopeSelector Object 作用域选择器
scopes []string 作用域,配额只会对作用域内的资源生效

示例:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: quota-test
  namespace: xxx           # 对 xxx 这个命名空间内资源做限制
spec:
  hard:
    pods: "10"             # pod 不能超过 10 个           
    requests.cpu: "2"      # 所有 pod 总和的 requests.cpu 不能少于 2 个
    requests.memory: 2Gi   # 所有 pod 总和的 requests.memory 不能少于 2Gi
    limits.cpu: "4"        # 所有 pod 总和的 limits.cpu 最多可以有 4 个cpu
    limits.memory: 10Gi    # 所有 pod 总和的 limits.memory 最多可以有 10Gi 内存

二、LimitRange YAML

在限制命名空间内,可为每个对象类别 (例如 PodPersistentVolumeClaim)分别指定资源分配量(limitrequest)的策略。
定义了 LimitRange 在创建资源时可不用在写资源限制。

kubectl explain LimitRange
字段 值类型 说明
apiVersion string v1
kind string LimitRange
metadata Object 定义元数据信息,与 pod 类似
spec Object 定义规则
kubectl explain LimitRange.spec.limits
字段 值类型 说明
default map[string]string 当创建资源时没有指定 containers 里面的 limits 资源限制,使用这个默认的
defaultRequest map[string]string 当创建资源时没有指定 containers 里面的 request 资源限制,使用这个默认的
min map[string]string 如果创建资源时,指定了containers 里面的 request ,那么这个值不能小于 min 的值
max map[string]string 如果创建资源时,指定了containers 里面的 limits ,那么这个值不能大于 max 的值
maxLimitRequestRatio map[string]string 比率

如:maxLimitRequestRatio 里面的 memory: 4;

创建资源指定了 containers 里面的下线 requestmemory 为 500,那么上线 limit 就小于等于 2000。

同理定了 containers 里面的上线 limitsmemory 为 2000,下线 request 就大于等于 500
* type string 定义限制的资源类型;如 Container

示例:

apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-memory
  namespace: limit
spec:
  limits:
  - default:                # 当资源未定义 Limit 时使用这个
      cpu: 1000m   
      memory: 1000Mi
    defaultRequest:         # 当资源未定义 request 时使用这个
      cpu: 500m
      memory: 500Mi
    min:                    # 当资源指定 request 时最小值不能小于这个
      cpu: 500m
      memory: 500Mi
    max:                    # 当资源定义了 limit 最大值不能大于这个
      cpu: 2000m
      memory: 2000Mi
    maxLimitRequestRatio:  # 定义比率
      cpu: 4               # 当资源定义 limit 时,request >= limit / 4
      memory: 4            # 当资源定义 request 时,limit <= request * 4
    type: Container        # 定义 ccontainer 时生效

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容