2. 运行时流水线基础:CI/CD 流水线概念、运行时阶段定义、与传统构建阶段的区别

在深入故障事件设计与 Sandbox 准入核验之前,必须建立对“运行时流水线”的精确理解。传统 CI/CD 流水线以“构建-测试-部署”为核心,而运行时流水线则将关注点从“交付软件”转移到“持续保障已运行服务的正确性与安全性”。本章将拆解这一核心概念。

2.1 CI/CD 流水线基础概念

CI/CD(持续集成/持续交付或持续部署)是现代软件工程的基础设施。其核心目标是通过自动化手段,将代码变更快速、安全地交付到生产环境。

  • 持续集成(CI): 开发人员频繁地将代码变更合并到主干分支,每次合并都触发自动化的构建与测试,以尽早发现集成错误。
  • 持续交付(CD): 在 CI 的基础上,确保软件在任何时刻都可以被可靠地发布到生产环境。部署过程是手动触发的。
  • 持续部署(CD): 是持续交付的延伸,将通过所有测试阶段的变更自动部署到生产环境,无需人工干预。
关键认知: 传统 CI/CD 流水线的终点是“部署完成”。而运行时流水线的起点,正是“部署完成”的那一刻。

2.2 运行时阶段定义

“运行时阶段”并非指流水线中的一个具体步骤,而是指从应用进程启动、开始对外提供服务,到其生命周期结束(停止、缩容或故障)的整个时间段。在流水线语境下,它代表一系列针对已运行工作负载的自动化校验与保障活动。

运行时阶段的核心活动包括:

活动类别 具体内容 目标
健康检查与探针 Liveness、Readiness、Startup 探针 确认进程存活、服务就绪、启动完成
可观测性数据采集 Metrics(指标)、Logs(日志)、Traces(链路) 实时监控服务状态与性能
安全准入核验 Sandbox 策略、Seccomp/AppArmor 配置、镜像签名验证 确保运行环境符合安全基线
故障注入与混沌实验 模拟网络延迟、Pod 故障、资源耗尽 验证系统弹性与容错能力
配置热更新 ConfigMap/Secret 变更后的自动重载 在不重启进程的前提下调整行为

2.3 与传统构建阶段的区别

传统构建阶段(Build Phase)与运行时阶段(Runtime Phase)在关注点、执行环境和反馈速度上存在本质差异。以下通过对比表格和一张架构图来清晰展示。

对比维度 传统构建阶段 运行时阶段
关注点 代码编译、单元测试、镜像打包、制品存储 服务可用性、延迟、吞吐、安全策略、资源使用
执行环境 CI Runner(Jenkins、GitLab Runner)上的临时容器 生产环境或类生产环境的长期运行集群
数据状态 无状态,每次构建从零开始 有状态,依赖持久化数据、缓存、外部依赖
反馈速度 分钟级,快速失败,快速修复 秒级至实时,需要持续监控与告警
安全模型 依赖静态扫描(SAST)、镜像漏洞扫描 依赖动态准入控制(Admission Webhook)、运行时安全监控(RASP)
故障处理 构建失败,回退代码,重新构建 服务降级、自动扩缩容、流量切换、故障自愈

下图展示了传统 CI/CD 流水线与运行时流水线在软件交付生命周期中的位置与衔接关系。

传统 CI/CD 流水线 vs 运行时流水线 传统 CI/CD 流水线(构建阶段) 代码提交 编译测试 镜像打包 推送 部署 运行时流水线(运行时阶段) 健康检查 安全准入 可观测性 故障自愈 核心差异总结 1. 目标不同 构建阶段:产出正确的制品 运行时阶段:保障服务持续正确运行 2. 环境不同 构建阶段:临时、无状态、隔离 运行时阶段:持久、有状态、依赖复杂 3. 反馈机制不同 构建阶段:CI 任务日志与报告 运行时阶段:实时指标、告警、事件 4. 安全策略不同 构建阶段:静态扫描、镜像签名 运行时阶段:动态准入、行为监控

2.4 为什么需要区分运行时流水线

将运行时阶段从传统流水线中独立出来,并非简单的概念游戏,而是应对云原生复杂性的必然选择:

  • 故障模式的差异: 构建阶段的故障通常是代码逻辑错误或环境依赖缺失,而运行时故障可能是资源竞争、流量突发、安全攻击或配置漂移。两者需要完全不同的检测与恢复策略。
  • 安全威胁面的扩展: 镜像在构建时可能是安全的,但在运行时可能被利用 0-day 漏洞、被注入恶意进程或发生权限逃逸。运行时安全准入(如 Sandbox 核验)是最后一道防线。
  • 反馈闭环的实时性: 构建阶段的反馈是“事后”的,而运行时流水线要求“事中”甚至“事前”的预测性响应。例如,基于指标趋势的自动扩缩容,就是运行时流水线的典型动作。
常见误区: 不要将“运行时流水线”等同于“生产环境监控”。监控只是运行时流水线的数据输入源之一。完整的运行时流水线包含感知-决策-执行的闭环,例如:监控发现延迟升高 → 策略决策触发流量切换 → 执行组件完成路由变更。

2.5 运行时流水线的典型流程

一个完整的运行时流水线流程,通常包含以下步骤,这些步骤会持续循环执行:

  1. 部署完成事件触发: 当新版本通过传统 CD 流水线部署到集群后,运行时流水线被激活。
  2. Sandbox 准入核验: 在 Pod 真正启动前,由准入控制器(Admission Controller)检查其 Sandbox 配置、安全策略、资源限制是否符合运行时基线。
  3. 启动探针与健康检查: 确认应用进程正常启动,并已准备好接收流量。
  4. 流量接入与可观测性建立: 将服务注册到服务网格或负载均衡器,同时启动指标、日志、链路的采集。
  5. 持续合规审计: 在服务运行期间,定期或事件驱动地重新校验安全策略、镜像签名、配置一致性。
  6. 故障检测与自愈: 基于可观测性数据,自动发现异常(如 5xx 错误率飙升),并执行预定义的恢复动作(如重启、回滚、限流)。

下图展示了运行时流水线在 Kubernetes 环境中的典型执行流程。

Kubernetes 环境下的运行时流水线流程 1. 部署完成事件 2. Sandbox 准入核验 3. 启动探针检查 4. 流量接入 持续循环 5. 可观测性采集 6. 持续合规审计 7. 故障检测 8. 故障自愈 反馈闭环 关键设计原则 步骤 1-4 为“启动阶段”,步骤 5-8 为“稳态运行阶段”,两者通过持续循环和反馈闭环连接

2.6 小结