灰度批次概念

灰度批次是容器运行时发布流水线中实现渐进式交付的核心机制。它通过将目标实例划分为多个有序子集,按预设策略逐步引入新版本,从而在每一批次中验证稳定性、收集反馈,并在异常发生时将影响范围控制在最小。理解灰度批次的定义、大小策略、等待时间及其与全量发布的关系,是构建风险清单留痕体系的基础。

3.1 灰度批次定义

灰度批次(Gray Batch)是指将一组待更新的容器实例(Pod/Node)按照逻辑分组,每个分组即为一个批次。发布流水线按顺序依次处理每个批次,只有当前批次验证通过后,才会触发下一批次的更新。

  • 批次单元:最小操作单位,通常为一个或多个 Pod、一组 Node 或一个可用区(AZ)。
  • 批次顺序:严格串行,前一批次完成后才能启动下一批次。
  • 批次状态:每个批次在生命周期中经历 Pending → Rolling → Verifying → Completed / Rollback 四个阶段。
  • 风险隔离:异常仅影响当前批次,不会扩散至后续批次或已稳定的实例。
实践要点:在 Kubernetes 环境中,灰度批次通常通过 Deployment 的 maxSurge 和 maxUnavailable 参数配合 RollingUpdate 策略实现,但更精细的批次控制需要借助 Argo Rollouts、Flagger 或自研发布引擎。

3.2 批次大小策略

批次大小决定了每个灰度批次中包含的实例数量或比例。常见的策略包括:

策略类型 定义 适用场景 风险特征
固定数量 每批次固定更新 N 个实例(如 2 个 Pod) 小规模集群、实例总数已知且稳定 批次间负载均衡偏差小,但大集群下批次数量过多
百分比 每批次更新总实例数的 X%(如 10%) 大规模集群、实例数动态伸缩 自动适配规模,但首批次可能过大(如 1000 实例的 10% = 100)
阶梯递增 批次大小逐步扩大(如 1→2→4→8→16…) 高风险变更、需要极低初始暴露面 首批次极小,风险最低;但总发布时长较长
可用区/拓扑感知 按可用区、机架或故障域划分批次 多 AZ 部署、跨区域发布 可验证区域级容灾,但单批次内实例数可能不均衡
风险清单留痕建议:在发布工单中记录 batch_size_strategy、first_batch_count、max_batch_count 三个字段。当首批次实例数超过集群总实例的 20% 时,自动触发风险告警并强制人工确认。

3.3 批次间等待时间

批次间等待时间(Inter-batch Wait Time)是指完成一个批次更新后,到启动下一个批次更新之间的观察窗口。这段时间用于收集监控指标、运行自动化测试、等待人工审批或观察日志异常。

  • 固定等待:每批次完成后等待固定时长(如 5 分钟),适用于变更风险较低、监控体系成熟的场景。
  • 条件等待:等待直到满足特定条件(如错误率 < 0.1%、P99 延迟 < 200ms、人工点击“继续”),适用于高风险变更。
  • 自适应等待:根据前一批次的异常指标动态调整等待时间(如异常增多则延长等待),适用于自动化程度高的流水线。
  • 零等待:批次间无间隔,等同于快速滚动更新,仅用于紧急修复或低风险配置变更。
常见陷阱:批次间等待时间过短(< 30 秒)可能导致监控数据尚未稳定,漏检慢速故障(如内存泄漏、连接池耗尽)。建议至少等待 2~3 个完整监控采集周期(通常 1~3 分钟)。

3.4 灰度批次与全量发布的关系

灰度批次是全量发布的分解执行过程,二者在发布流水线中形成“策略-执行”的映射关系:

维度 灰度批次 全量发布
粒度 分批、逐步、可暂停 一次性、不可中断
风险控制 每批次可回滚、可跳过 失败即整体回滚
验证时机 批次间持续验证 发布完成后统一验证
用户影响 逐步暴露,影响面可控 瞬间全量切换
发布时长 较长(批次数 × 等待时间) 较短(仅更新耗时)

在实际流水线中,灰度批次执行完毕后,通常需要执行一次全量确认操作,将剩余未更新的实例(如有)一次性更新至目标版本,或通过调整 Deployment 的 replicas 完成最终收敛。

风险清单留痕字段示例:
{
  "gray_batch": {
    "total_batches": 5,
    "batch_size_strategy": "阶梯递增",
    "first_batch_count": 2,
    "inter_batch_wait_seconds": 180,
    "wait_condition": "error_rate < 0.1% AND p99_latency < 200ms",
    "full_release_after_gray": true,
    "full_release_trigger": "manual_approval"
  }
}
灰度批次与全量发布关系流程图 灰度批次阶段 批次 1:2 个实例(首批次) 批次 2:4 个实例(阶梯递增) 批次 3:8 个实例 批次 N:剩余实例 等待 3 分钟 等待 3 分钟 等待 3 分钟 全量发布阶段 全量确认(人工/自动) 剩余实例一次性更新 全量发布完成 灰度验证通过后触发

3.5 灰度批次风险清单留痕模板

在发布流水线中,每个灰度批次都应生成结构化的风险留痕记录。以下为推荐模板:

字段 类型 说明 示例值
batch_index int 批次序号(从 1 开始) 3
batch_size int 本批次实例数 8
cumulative_percent float 累计更新比例 35.0
start_time datetime 批次开始时间 2025-03-21T14:30:00Z
end_time datetime 批次结束时间 2025-03-21T14:32:15Z
wait_duration_seconds int 批次间等待时长 180
error_count int 批次内错误数 0
rollback_triggered bool 是否触发回滚 false
verification_result string 验证结果(pass/fail/skip) pass
留痕自动化建议:在发布流水线中集成 batch_risk_logger 组件,在每个批次完成时自动写入上述字段到 Elasticsearch 或 Prometheus 自定义指标,并关联发布工单 ID。后续审计或复盘时可直接查询批次级风险时间线。