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 流水线与运行时流水线在软件交付生命周期中的位置与衔接关系。
2.4 为什么需要区分运行时流水线
将运行时阶段从传统流水线中独立出来,并非简单的概念游戏,而是应对云原生复杂性的必然选择:
- 故障模式的差异: 构建阶段的故障通常是代码逻辑错误或环境依赖缺失,而运行时故障可能是资源竞争、流量突发、安全攻击或配置漂移。两者需要完全不同的检测与恢复策略。
- 安全威胁面的扩展: 镜像在构建时可能是安全的,但在运行时可能被利用 0-day 漏洞、被注入恶意进程或发生权限逃逸。运行时安全准入(如 Sandbox 核验)是最后一道防线。
- 反馈闭环的实时性: 构建阶段的反馈是“事后”的,而运行时流水线要求“事中”甚至“事前”的预测性响应。例如,基于指标趋势的自动扩缩容,就是运行时流水线的典型动作。
常见误区: 不要将“运行时流水线”等同于“生产环境监控”。监控只是运行时流水线的数据输入源之一。完整的运行时流水线包含感知-决策-执行的闭环,例如:监控发现延迟升高 → 策略决策触发流量切换 → 执行组件完成路由变更。
2.5 运行时流水线的典型流程
一个完整的运行时流水线流程,通常包含以下步骤,这些步骤会持续循环执行:
- 部署完成事件触发: 当新版本通过传统 CD 流水线部署到集群后,运行时流水线被激活。
- Sandbox 准入核验: 在 Pod 真正启动前,由准入控制器(Admission Controller)检查其 Sandbox 配置、安全策略、资源限制是否符合运行时基线。
- 启动探针与健康检查: 确认应用进程正常启动,并已准备好接收流量。
- 流量接入与可观测性建立: 将服务注册到服务网格或负载均衡器,同时启动指标、日志、链路的采集。
- 持续合规审计: 在服务运行期间,定期或事件驱动地重新校验安全策略、镜像签名、配置一致性。
- 故障检测与自愈: 基于可观测性数据,自动发现异常(如 5xx 错误率飙升),并执行预定义的恢复动作(如重启、回滚、限流)。
下图展示了运行时流水线在 Kubernetes 环境中的典型执行流程。