1. SLO 与误差预算基础

1.1 什么是 SLO(Service Level Objective)

SLO(服务等级目标)是衡量服务可靠性的核心量化指标,它定义了在特定时间窗口内,服务必须达到的可用性或性能水平。在 Kubernetes 集群运维中,SLO 将抽象的“稳定”转化为可度量、可追踪的数字。

概念 定义 Kubernetes 场景示例
SLI(服务等级指标) 实际测量的原始指标 API Server 请求延迟 P99、Pod 就绪率
SLO(服务等级目标) SLI 的目标阈值 + 时间窗口 API Server P99 延迟 ≤ 200ms,30 天内 99.9% 达标
SLA(服务等级协议) 对外的承诺,通常附带惩罚 客户合同约定 99.95% 可用性
关键区别:SLO 是内部工程目标,SLA 是外部商业承诺。SLO 通常比 SLA 更严格(例如内部 SLO 为 99.99%,对外 SLA 为 99.95%),为故障留出缓冲空间。

1.2 误差预算(Error Budget)概念

误差预算 = 100% - SLO。它表示服务在 SLO 时间窗口内允许发生故障的总时间或总错误量。例如:

  • SLO = 99.9% → 误差预算 = 0.1%
  • 30 天窗口 → 允许不可用时间 = 30 × 24 × 60 × 0.1% = 43.2 分钟
  • 季度窗口(90 天) → 允许不可用时间 = 90 × 24 × 60 × 0.1% = 129.6 分钟
核心思想:误差预算不是“失败配额”,而是“创新预算”。只要误差预算充足,团队可以放心部署新版本、进行集群升级;一旦预算耗尽,必须暂停变更,优先恢复可靠性。
误差预算概念模型 总时间窗口(30天 = 43,200 分钟) 误差预算(0.1% = 43.2 分钟) ✅ 预算充足 → 可部署变更 ❌ 预算耗尽 → 冻结变更 误差预算连接了“可靠性”与“开发速度”,是 SRE 决策的核心杠杆 预算耗尽时,优先做稳定性工作;预算充足时,加速功能迭代

1.3 为什么需要误差预算台账

误差预算台账(Error Budget Ledger)是对误差预算消耗情况的持续记录与可视化。在 Kubernetes 集群环境中,台账解决了三个核心问题:

  1. 量化决策依据:避免“感觉集群不稳定”的主观判断,用数据决定是否允许变更上线。
  2. 故障成本可视化:每次 Pod 重启、节点故障、API 超时都会消耗预算,台账让团队看到故障的累积影响。
  3. 对齐业务与运维:业务方关注功能交付,SRE 关注稳定性,台账提供了双方都能理解的“可靠性货币”。
场景 无台账时 有台账时
版本发布决策 依赖个人经验判断“是否稳定” 查看预算剩余,剩余 > 50% 可发布
故障复盘 仅关注故障本身影响 量化该故障消耗了多少预算
容量规划 凭感觉扩容 根据预算消耗趋势预测扩容时机
团队绩效考核 用“不出故障”衡量 用“预算消耗率”衡量可靠性投入产出
常见误区:误差预算台账不是“追责工具”。它的目的是让团队在可靠性与创新速度之间做出有数据支撑的权衡,而不是在故障发生后寻找责任人。

1.4 台账的核心构成要素

一个完整的误差预算台账至少包含以下字段:

  • 时间窗口:滚动窗口(如 30 天)或固定窗口(如自然月)
  • SLO 目标:例如 99.9%、99.99%
  • 总预算:窗口内允许的最大故障时间或错误次数
  • 已消耗预算:当前窗口内累计的故障时间或错误次数
  • 剩余预算:总预算 - 已消耗预算
  • 消耗速率:每日/每小时的平均消耗量,用于预测何时耗尽
  • 预算状态:充足(> 50%)、警告(20% - 50%)、危险(< 20%)、耗尽(0%)
误差预算台账数据流 Kubernetes 指标源 SLI 聚合计算 SLO 达标判定 台账记录 变更决策 告警阈值 容量规划 故障复盘 台账是 SRE 数据驱动决策的中枢,连接原始指标与运维动作 每个环节都需要自动化采集与实时更新

1.5 本章小结

  • SLO 是可靠性目标,误差预算 是允许的故障空间,台账 是预算的记账本。
  • 误差预算 = 100% - SLO,时间窗口越长,预算越大。
  • 台账让可靠性决策从“凭感觉”变为“看数据”,是 SRE 实践的基础设施。
  • 在 Kubernetes 集群中,台账需要从 API Server、etcd、节点、Pod 等多个维度采集 SLI 并持续计算。