3. 容量基线定义

在灰度发布流水线中,容量基线是描述服务在稳定运行状态下所需最小资源供给能力的数字化快照。它并非静态的固定值,而是随业务周期、版本特性、集群水位动态调整的基准线。容量基线留痕的本质,是在灰度批次推进的每个关键节点,将当前服务的副本数、资源规格、弹性策略等要素记录为可追溯的版本化数据,用于回滚对比、容量规划与异常溯源。

3.1 什么是容量基线

容量基线是服务在特定版本、特定流量模型下,为满足 SLO(服务等级目标)所需的最小资源供给集合。它包含三个核心维度:

  • 静态容量:由 Deployment/StatefulSet 定义的固定副本数与 Pod 资源请求/限制。
  • 动态容量:由 HPA(Horizontal Pod Autoscaler)定义的弹性伸缩策略与阈值。
  • 边界容量:集群节点资源余量、QoS 等级、Pod 调度约束等隐性限制。
实践要点:容量基线不是“当前运行值”,而是“经过验证的安全值”。灰度批次每推进一个阶段(如 10% → 50% → 100%),都应重新采集并留痕一次基线,确保回滚时能精确恢复到上一验证点的容量状态。
容量基线 vs 资源配额:资源配额(ResourceQuota)是集群维度的硬限制,容量基线是服务维度的软基准。前者防止资源滥用,后者保障发布安全。
容量基线概念结构图 容量基线概念结构 容量基线 静态容量 动态容量 边界容量 静态容量要素 • 固定副本数(replicas) • 资源 requests / limits • Pod 调度约束 • QoS 等级 动态容量要素 • HPA 最小/最大副本 • 指标阈值(CPU/内存) • 扩缩容冷却时间 • 自定义指标策略 边界容量要素 • 集群节点资源余量 • 节点亲和性/反亲和性 • PodDisruptionBudget • 资源配额限制

3.2 容量基线的组成要素

容量基线由三个相互关联的要素构成,任何一项缺失都会导致基线不完整,无法在灰度发布中提供可靠的容量参考。

3.2.1 副本数(Replicas)

副本数是容量基线的第一要素,直接决定服务能同时处理多少请求。在灰度发布中,副本数需要区分以下场景:

场景 副本数策略 留痕要求
稳定运行态 满足日常峰值流量的最小副本数 记录当前实际运行副本数
灰度发布态 新版本副本数 = 基线副本数 × 灰度比例 记录灰度批次各阶段的副本数
回滚态 恢复到上一验证点的副本数 从基线记录中读取历史副本数
弹性伸缩态 HPA 动态调整后的实际副本数 记录伸缩前后的副本数变化
常见误区:部分团队只记录 Deployment 的 YAML 中定义的 replicas 字段,忽略了 HPA 动态调整后的实际副本数。容量基线留痕应同时记录“期望副本数”和“实际副本数”,两者在弹性场景下可能不一致。

3.2.2 资源请求/限制(Requests & Limits)

资源请求与限制定义了每个 Pod 实例能获得的 CPU 和内存资源量。在容量基线中,这两个值直接影响集群调度决策和 Pod 运行稳定性。

参数 含义 对容量的影响 留痕建议
requests.cpu Pod 启动时保证获得的 CPU 资源 决定调度时节点能否容纳该 Pod 记录每个容器的 requests 值
limits.cpu Pod 可使用的 CPU 上限 限制突发 CPU 使用,影响性能 记录 limits 与 requests 的比例
requests.memory Pod 启动时保证获得的内存资源 决定调度时节点能否容纳该 Pod 记录每个容器的 requests 值
limits.memory Pod 可使用的内存上限 超过后触发 OOMKill,影响稳定性 记录 limits 与 requests 的比例
资源比例黄金法则:生产环境建议 limits/requests 比例不超过 2:1(CPU)和 1.5:1(内存)。比例过大会导致节点超卖严重,触发资源竞争;比例过小则浪费集群资源。容量基线留痕时应同时记录这个比例值。

3.2.3 HPA 策略(Horizontal Pod Autoscaler)

HPA 是容量基线的动态调节器,它根据实时指标自动调整副本数。在灰度发布中,HPA 策略的留痕尤为重要,因为新版本的资源消耗模式可能与旧版本不同,导致弹性行为异常。

HPA 策略的核心参数包括:

  • minReplicas / maxReplicas:弹性伸缩的上下边界,定义容量的安全区间。
  • metrics:触发伸缩的指标,常见的有 CPU 使用率、内存使用率、QPS、请求延迟等。
  • targetValue / targetAverageValue:指标的阈值,超过则扩容,低于则缩容。
  • behavior:扩缩容行为配置,包括稳定窗口、冷却时间、策略等。
HPA 策略与容量基线关系图 HPA 策略与容量基线关系 HPA 策略配置 minReplicas / maxReplicas metrics 指标定义 target 阈值设定 behavior 行为策略 容量基线记录 副本数范围记录 指标类型与阈值 实际触发记录 伸缩行为日志 映射 映射 映射 映射 HPA 策略是容量基线的动态部分,每次策略变更都应触发基线重新留痕

3.3 容量基线 YAML 示例

以下是一个完整的容量基线记录示例,包含副本数、资源请求/限制、HPA 策略三个要素:

apiVersion: v1
kind: ConfigMap
metadata:
  name: capacity-baseline-v1.2.3
  namespace: production
  labels:
    app: order-service
    baseline-version: "1.2.3"
    grayscale-phase: "100%"
data:
  # 副本数基线
  replicas: |
    desired: 12
    actual: 12
    minAllowed: 6
    maxAllowed: 24
  
  # 资源请求/限制基线
  resources: |
    containers:
      - name: order-service
        requests:
          cpu: "500m"
          memory: "512Mi"
        limits:
          cpu: "1000m"
          memory: "768Mi"
  
  # HPA 策略基线
  hpa: |
    minReplicas: 6
    maxReplicas: 24
    metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 70
      - type: Resource
        resource:
          name: memory
          target:
            type: Utilization
            averageUtilization: 80
    behavior:
      scaleDown:
        stabilizationWindowSeconds: 300
        policies:
          - type: Percent
            value: 10
            periodSeconds: 60
      scaleUp:
        stabilizationWindowSeconds: 0
        policies:
          - type: Percent
            value: 100
            periodSeconds: 60
          - type: Pods
            value: 4
            periodSeconds: 60
        selectPolicy: Max
留痕最佳实践:将容量基线存储为 ConfigMap 或自定义资源(CRD),并关联到对应的 Deployment 版本。每次灰度批次推进前,自动生成当前基线的快照 ConfigMap,命名格式建议为 capacity-baseline-{version}-{phase},便于后续检索和回滚。

3.4 容量基线变更触发条件

在灰度发布流水线中,以下场景必须触发容量基线的重新采集与留痕:

触发事件 变更类型 留痕动作
灰度批次推进(如 10% → 50%) 副本数变化 记录新批次的副本数与资源使用率
HPA 策略调整 动态容量变化 记录策略变更前后的完整配置
资源请求/限制修改 静态容量变化 记录新旧资源规格对比
集群节点扩缩容 边界容量变化 记录节点数量与资源总量
版本回滚 容量恢复 从历史基线中恢复容量配置
关键提醒:容量基线留痕不是一次性工作,而是伴随灰度发布全生命周期的持续动作。每次变更都应在流水线中插入“基线采集”步骤,确保留痕数据与发布进度严格对齐。