2. SLO 基础概念:SLO/SLI/SLA 定义、服务等级目标的重要性、Cilium 场景下的 SLO 设计原则

在构建 Cilium 拉取加速体系之前,必须统一团队对服务等级的语言。SLO(Service Level Objective)不是简单的“可用性 99.9%”,而是连接用户感知与系统内部可观测性的桥梁。本节从定义出发,逐步推导 Cilium 场景下的设计原则。

2.1 核心定义:SLA / SLO / SLI

三个概念常被混用,但职责完全不同。下表从对象、度量、后果三个维度进行区分:

术语 全称 对象 度量方式 未达标后果
SLA Service Level Agreement 客户 / 合同 法律条款定义 赔偿 / 罚金
SLO Service Level Objective 内部团队 / 产品 百分比阈值 改进计划 / On-Call
SLI Service Level Indicator 具体指标 原始测量值 触发告警
实战口诀:SLI 是“测什么”,SLO 是“多少算好”,SLA 是“不好赔多少”。Cilium 场景下,我们只承诺 SLO,不直接对外暴露 SLA 条款。

2.2 服务等级目标的重要性

没有 SLO 的运维是“盲人摸象”。SLO 在 Cilium 拉取加速场景中承担三个关键角色:

  • 决策锚点:当镜像拉取延迟从 5s 上升到 8s,是否要立即回滚?SLO 阈值(如 P99 < 6s)提供明确判断标准。
  • 资源预算:SLO 定义了“错误预算”(Error Budget),允许团队在预算内进行灰度发布、内核升级或 eBPF 程序热更新。
  • 跨团队对齐:平台团队(Cilium 网络)与业务团队(镜像仓库、节点代理)通过 SLO 形成统一的“好”与“坏”定义。
关键认知:SLO 不是越高越好。99.99% 的 SLO 意味着全年不可用时间 < 52.6 分钟,对应的监控、冗余、故障转移成本呈指数级增长。Cilium 场景下,建议从 99.9%(拉取延迟 P99 < 10s)起步。

2.3 Cilium 场景下的 SLO 设计原则

Cilium 作为数据面组件,其 SLO 设计必须遵循以下四条原则:

  1. 用户感知优先:SLI 必须从“kubelet 发起拉取请求”到“容器运行时完成解压”的全路径采集,而非仅测量 Cilium 内部转发延迟。
  2. 分层定义:将 SLO 拆解为网络层(eBPF 转发延迟、连接建立成功率)和应用层(镜像层下载完成时间、解压吞吐量)。
  3. 错误预算可消耗:允许 Cilium 升级、eBPF Map 扩容、路由策略变更等操作消耗一定比例的预算,避免“零风险”导致的发布停滞。
  4. 可归因性:每个 SLO 违约事件必须能关联到具体的 Cilium Agent、Node、Endpoint 或 Hubble 流日志,否则无法驱动改进。
避坑提示:不要将“Cilium 控制面 API 响应时间”作为拉取加速的 SLI。控制面延迟与数据面拉取延迟之间没有线性关系。必须直接测量容器运行时拉取镜像的 wall-clock 时间。

2.4 Cilium 拉取加速 SLO 分层架构

下图展示 Cilium 场景下 SLO 的分层设计:从底层网络指标到顶层用户体验指标,每一层都有对应的 SLI 和 SLO 阈值。

Cilium 拉取加速 SLO 分层架构 用户体验层 SLO 镜像拉取完成时间 P99 ≤ 8s | 拉取成功率 ≥ 99.95% 应用层 SLI / SLO 镜像层下载时间 P99 ≤ 5s | 解压吞吐量 ≥ 200 MB/s (依赖:containerd / CRI 插件 / 镜像仓库) 网络层 SLI / SLO eBPF 转发延迟 P99 ≤ 2ms | 连接建立成功率 ≥ 99.99% (依赖:Cilium Agent / eBPF Map / Hubble) 基础设施层 SLI 节点网络带宽利用率 ≤ 70% | 磁盘 IOPS ≥ 5000 错误 预算 消耗 方向 升级 回滚 扩容 策略 变更

2.5 设计原则与 Cilium 特性的映射

将上述原则落地到 Cilium 技术栈时,需要明确每个原则对应的具体实现手段:

设计原则 Cilium 对应能力 实现方式
用户感知优先 Hubble 流日志 + 七层协议解析 通过 Hubble 采集 kubelet → containerd → Cilium 的全链路 TCP 流,计算实际拉取耗时
分层定义 Cilium Agent Metrics + eBPF 指标 Agent 暴露 cilium_forward_count、cilium_drop_count;eBPF 提供 tc_delay_ms
错误预算可消耗 Cilium 热升级 + 无中断 eBPF 重载 利用 Cilium 的 cilium-agent --restore 和 endpoint regeneration 机制,在预算内完成变更
可归因性 Endpoint 标签 + 身份策略 每个拉取请求关联到源 Pod 的 k8s:io.kubernetes.pod.namespace 标签,快速定位故障域

2.6 初始 SLO 推荐值

基于生产环境经验,以下为 Cilium 拉取加速场景的初始 SLO 推荐值。建议运行 2 周后根据实际数据调整:

  • 镜像拉取完成时间(P99):≤ 10s(宽松起步)→ 优化后 ≤ 5s(严格目标)
  • 拉取成功率:≥ 99.9%(排除镜像仓库故障)
  • eBPF 转发延迟(P99):≤ 5ms(含隧道封装开销)
  • 连接建立成功率:≥ 99.99%(Cilium 到镜像仓库节点)
  • 错误预算:每月 0.1% 的拉取请求可失败(约 43 分钟/月)
下一步行动:在 Prometheus 中定义 SLI 采集规则,使用 histogram_quantile 计算 P99 拉取延迟,并设置 SLO 告警规则。具体配置将在第 3 章详细展开。