首页/云/Kubernetes 速查/LimitRange 给命名空间设默认资源
调度与资源52 条

LimitRange 给命名空间设默认资源

在命名空间里定义 LimitRange:为未写 resources 的容器补默认 requests/limits,并约束单容器上下限,避免 BestEffort 容器遍地。

Kubernetes 速查云更新于 2026-10-13

LimitRange 是干什么的

LimitRange 是命名空间级的资源约束对象,做两件事:为没有声明 resources 的容器补上默认的 requests 与 limits,以及限制单个容器、Pod 或 PVC 的用量上下限与请求限制比例。它的核心价值在于把「默认值」集中管理,防止命名空间里出现大量既没有 requests 又没有 limits 的容器——那类容器会让调度失去计算依据,也让扩缩容与容量评估失去基础。

基本信息

作用范围单个命名空间,对象需建在目标命名空间内
可约束类型Container、Pod、PVC
默认值字段default(补 limits)、defaultRequest(补 requests)
限制字段max、min、maxLimitRequestRatio
生效时机对象创建与更新时由准入控制器注入

为命名空间设默认资源

为命名空间设默认资源
apiVersion: v1
kind: LimitRange
metadata:
  name: default-limits
  namespace: prod
spec:
  limits:
    - type: Container
      default:
        cpu: 500m
        memory: 512Mi
      defaultRequest:
        cpu: 100m
        memory: 128Mi
      max:
        cpu: '4'
        memory: 4Gi
      maxLimitRequestRatio:
        cpu: '10'                             # 限制超卖倍数,避免 requests 与 limits 差距过大

验证注入结果

验证注入结果
kubectl describe limitrange default-limits -n prod               # 查看声明与默认值
kubectl get pod web-x -n prod -o jsonpath='{.spec.containers[0].resources}'   # 看容器实际拿到的值
kubectl get pod web-x -n prod -o jsonpath='{.spec.containers[0].resources.requests}'   # 确认 requests 被补上
kubectl get events -n prod --field-selector reason=FailedCreate  # 超出上下限时创建会被拒

典型使用场景

  • 新命名空间基线:业务团队接入时先给默认资源,避免大量无 requests 的容器流入集群
  • 防止资源失控:用 max 拦住明显写错的清单,例如把内存写成 400Gi
  • 避免超卖过度:用 maxLimitRequestRatio 限制 requests 与 limits 的差距,减少节点争抢
  • PVC 容量约束:对命名空间内申请的存储容量设置上下限,防止误申请超大卷
  • 配合 HPA:容器必须有 requests 才能算使用率,默认注入能保证这一前提不被破坏

字段读法

字段作用设置建议
default未写 limits 时补齐的上限按业务常规峰值设置,不宜过大
defaultRequest未写 requests 时补齐的请求量不写时 requests 会等于 limits,弹性下降
max单容器或单 Pod 的上限过大失去保护意义,过小会拒绝正常扩容
min下限,防止写 0 或极小值结合最小可用资源评估
maxLimitRequestRatiolimits 与 requests 的比例上限在线服务宜控制在较小倍数
默认值只在对象创建(以及部分更新场景)时注入,不会修改已运行的 Pod。调整 LimitRange 后,存量工作负载要重建才会带上新默认值。
只写 default 不写 defaultRequest 时,被注入的 requests 会等于 limits,容器在 QoS 分类上偏向 Guaranteed,扩展弹性下降。希望保持弹性时两者都要写,并让 requests 明显小于 limits。

易错点

  • 只设 default 不设 defaultRequest:注入后 requests 等于 limits,调度按峰值计算,集群装箱率骤降
  • max 设得过小:存量业务日后扩容会被创建阶段直接拒绝,告警出现在发布时而不是调整时
  • 以为改 LimitRange 会更新已运行 Pod:注入发生在创建阶段,存量必须重建
  • 多个命名空间共用一套默认值:不同业务特征差异大,统一值要么浪费要么不足,应按命名空间分类设置

数据来源与参考

  • Kubernetes 官方文档 · LimitRange
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌