2. 核心概念解析:资源配额、限制范围、QoS 等级与命名空间隔离策略

在 Kubernetes 集群中实施策略即代码(Policy as Code)资源配额模型之前,必须深入理解四个核心的底层概念:资源配额(Resource Quota)、限制范围(LimitRange)、服务质量(QoS)等级以及命名空间(Namespace)隔离策略。这四个概念共同构成了资源治理的基石,决定了 CI/CD 流水线中 Pod 的调度行为与资源保障。

2.1 资源配额(Resource Quota)

Resource Quota 是 Kubernetes 中用于限制命名空间级别资源消耗总量的策略对象。它通过硬性上限来防止单个团队或流水线任务过度占用集群资源,从而保障多租户环境下的公平性。

核心作用: 为命名空间设置资源“天花板”,包括 CPU、内存、持久卷存储以及对象数量(如 Pod、Service、ConfigMap 等)。

以下是一个典型的 Resource Quota YAML 定义,适用于 CI/CD 流水线的“构建”命名空间:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: ci-build-quota
  namespace: ci-pipeline
spec:
  hard:
    requests.cpu: "4"
    requests.memory: "8Gi"
    limits.cpu: "8"
    limits.memory: "16Gi"
    persistentvolumeclaims: "5"
    pods: "20"
    services: "10"

在策略即代码模型中,Resource Quota 通常由 OPA/Gatekeeper 或 Kyverno 策略动态生成,而非手动编写。流水线触发时,策略引擎会根据项目标签自动计算并注入配额。

2.2 限制范围(LimitRange)

LimitRange 在命名空间级别为 Pod 和容器设置默认的资源请求/限制,以及最小/最大约束。它解决了 Resource Quota 无法覆盖的“单个 Pod 资源规格”问题,防止流水线中某个微服务容器申请过大的资源。

参数 说明 CI/CD 场景示例
default 容器未指定资源限制时的默认值 构建容器默认限制 512Mi 内存
defaultRequest 容器未指定资源请求时的默认值 构建容器默认请求 256Mi 内存
max 容器资源限制的上限 单个测试容器内存上限 4Gi
min 容器资源请求的下限 Sidecar 容器最小 CPU 请求 50m
最佳实践: 在 CI/CD 命名空间中,将 LimitRange 的 max 值设置为 Resource Quota 的 1/4 到 1/2,避免单个 Pod 占满整个命名空间配额。

2.3 服务质量(QoS)等级

Kubernetes 根据 Pod 中容器的资源请求(requests)和限制(limits)配置,自动将 Pod 划分为三种 QoS 等级。这一等级直接决定了节点资源紧张时 Pod 被驱逐的优先级。

Kubernetes QoS 等级分类与驱逐优先级 Guaranteed requests == limits CPU & Memory 均设置 驱逐优先级:最低 适合:关键服务、数据库 Burstable requests < limits 至少一项资源设置 驱逐优先级:中等 适合:CI/CD 构建任务 BestEffort 未设置 requests/limits 无资源保障 驱逐优先级:最高 适合:批处理、低优任务 驱逐优先级:低 → 高
策略即代码要点: 在 CI/CD 流水线中,应通过策略强制构建 Pod 至少达到 Burstable 等级(设置 requests),避免出现 BestEffort Pod。因为 BestEffort Pod 在节点资源紧张时会被优先驱逐,导致构建任务中断。

2.4 命名空间(Namespace)隔离策略

命名空间是 Kubernetes 实现多租户隔离的基本单元。在策略即代码资源配额模型中,命名空间不仅是逻辑隔离边界,更是策略的绑定目标。每个 CI/CD 流水线阶段(构建、测试、预发布)应使用独立的命名空间。

隔离策略通常包含以下三个维度:

  • 资源隔离: 每个命名空间绑定独立的 Resource Quota 和 LimitRange,防止流水线间资源争抢。
  • 网络隔离: 通过 NetworkPolicy 限制命名空间之间的流量,例如禁止测试命名空间访问生产数据库。
  • 策略绑定: 使用命名空间标签(如 tier: ci)作为 OPA/Gatekeeper 策略的匹配条件,实现策略的自动生效。
CI/CD 命名空间隔离策略架构 ns: ci-build 标签: tier=ci Quota: CPU 4, Mem 8Gi LimitRange: max 2Gi NetworkPolicy: 仅出口 QoS: Burstable 强制 ns: ci-test 标签: tier=test Quota: CPU 8, Mem 16Gi LimitRange: max 4Gi NetworkPolicy: 隔离 QoS: Guaranteed 推荐 ns: ci-staging 标签: tier=staging Quota: CPU 16, Mem 32Gi LimitRange: max 8Gi NetworkPolicy: 严格 QoS: Guaranteed 强制
策略即代码映射: 在 OPA/Gatekeeper 中,使用 data.namespace.labels 作为输入,动态生成 Resource Quota 和 LimitRange。例如,当命名空间标签包含 tier: ci 时,自动注入构建专用的配额模板。

2.5 四者协同关系

Resource Quota、LimitRange、QoS 等级和 Namespace 并非孤立存在,它们在策略即代码模型中形成层层递进的约束链:

层级 控制对象 策略示例
Namespace 隔离边界与策略绑定 标签 tier: ci 触发配额策略
Resource Quota 命名空间总资源上限 CPU 限制不超过 8 核
LimitRange 单个 Pod/容器资源范围 容器内存限制在 256Mi ~ 4Gi
QoS 等级 Pod 驱逐优先级 强制 Burstable 以上等级

在 CI/CD 流水线中,策略引擎首先根据命名空间标签选择适用的配额模板,然后验证 Pod 的资源声明是否同时满足 LimitRange 的边界和 QoS 等级要求,最后汇总检查是否超出 Resource Quota 的总量。任何一环失败,流水线都将被拒绝进入调度队列。