LimitRange 校验资源申请和限制量
Kubernetes 提供了 LimitRange 资源,用来校验 Pod 中的资源申请量以及限制量,包括 设置默认值 以及 校验是否在指定范围内:
设置默认值:避免必须为每个容器都配置
requests
和limits
;校验范围:阻止用户创建大于宿主机资源量的 Pod;
LimitRange 资源被 API 服务器中的 LimitRanger 准入控制插件加载,当 API 服务器收到 Pod 的请求时,会对其规格进行校验,如果校验失败就拒绝请求。(该准入插件默认开启)
LimitRange 是 命名空间级别 的资源,因此其只能应用于 同一个命名空间中 每个独立的 Pod、容器或者其他类型的对象。
创建 LimitRange
可以通过 YAML 描述文件创建 LimitRange 对象。下面展示一个创建案例,该案例中分别针对 Pod、容器以及 PVC 三类资源进行校验:
apiVersion: v1
kind: LimitRange # 资源类型为 LimitRange
metadata:
namespace: default # 对 default 命名空间中的资源有效
name: example
spec:
limits:
- type: Pod # 针对 Pod 进行限制
min: # Pod 中所有容器的 CPU 和内存的 requests 的总和的最小值
cpu: 50m
memory: 5Mi
max: # Pod 中所有容器的 CPU 和内存的 limits 的总和的最大值
cpu: 1
memory: 1Gi
- type: Container # 针对容器进行限制
defaultRequest: # 设置容器的默认 CPU 和内存的 requests 值
cpu: 100m
memory: 10Mi
default: # 设置容器的默认 CPU 和内存的 limits 值
cpu: 200m
memory: 100Mi
min: # 设置容器的 CPU 和内存的 requests 的最小值
cpu: 50m
memory: 5Mi
max: # 设置容器的 CPU 和内存的 limits 的最大值
cpu: 1
memory: 1Gi
maxLimitRequestRatio: # 设置容器的 CPU 和内存两种资源各自的 requests 和 limits 的最大比值
cpu: 4 # CPU 的 limits 不能超过 requests 的 4 倍
memory: 10
- type: PersistentVolumeClaim # 针对 PVC 进行限制
min: # 创建的 PVC 资源请求的存储容量最小值
storage: 1Gi
max: # 创建的 PVC 资源请求的存储容量最大值
storage: 10Gi
假设存在某种情况,同一个命名空间中创建了多个 LimitRange 对象,则:
若各 LimitRange 对象 无交集,则无论怎样定义资源的申请量和限制量,都是不会创建成功的;
若各 LimitRange 对象 有交集,则仅当资源的申请量和限制量在交集范围内,才会创建成功;
因此通常情况下,同一个用户在同一个命名空间中创建一条 LimitRange 资源即可,没有必要创建多条,给自己找麻烦。
Last updated
Was this helpful?