1. 课程导论:Serverless 平台概述、集群升级的重要性、版本兼容性测试的目标与范围

1.1 Serverless 平台架构概述

Serverless 平台的核心价值在于将基础设施的复杂性从开发者侧剥离,让开发者只需聚焦业务代码。从 SRE 和架构视角看,一个生产级 Serverless 平台通常由以下关键组件构成:

组件层 核心模块 职责说明
接入层 API Gateway / Ingress 请求路由、认证鉴权、限流熔断、协议转换
控制面 Function Controller / Scheduler 函数生命周期管理、弹性伸缩决策、版本管理与灰度发布
数据面 Pod / Sandbox / Runtime 函数实际执行环境,支持多种运行时(Node.js、Python、Java 等)
存储层 etcd / 对象存储 / 镜像仓库 集群状态持久化、函数代码与依赖存储、容器镜像分发
可观测层 Metrics / Logging / Tracing 调用链追踪、性能指标采集、日志聚合与告警
架构视角: 控制面与数据面的解耦程度直接决定了集群升级的复杂度。控制面组件(如 K8s API Server、自定义控制器)的升级往往需要数据面(如 kubelet、容器运行时)的版本匹配,否则会导致调度失败或函数执行异常。
Serverless 平台分层架构图 Serverless 平台分层架构图 接入层:API Gateway / Ingress / 认证限流 控制面:Function Controller / Scheduler / 版本管理 数据面:Pod / Sandbox / Runtime(Node.js/Python/Java) 存储层:etcd / 对象存储 / 镜像仓库 可观测层 说明:控制面与数据面的版本耦合度是集群升级兼容性测试的核心关注点

1.2 集群升级的重要性与挑战

Serverless 平台底层依赖 Kubernetes 集群及周边生态组件(如 Istio、Knative、Keda 等)。集群升级并非简单的版本号变更,而是一次涉及多组件协同、API 兼容性、数据面稳定性的高风险操作。升级失败可能导致:

  • 控制面不可用: API Server 版本升级导致自定义资源(CRD)版本失效,函数无法创建或更新。
  • 数据面异常: kubelet 版本与容器运行时不兼容,导致 Pod 启动失败或 Sandbox 创建超时。
  • 网络策略失效: CNI 插件版本不匹配,导致函数间调用超时或服务网格 Sidecar 注入失败。
  • 可观测性中断: Metrics Server 或日志采集 Agent 版本过旧,无法采集新版本集群的指标。
SRE 经验: 在 Serverless 场景下,集群升级的“回滚窗口”极短。由于函数实例生命周期短、调用频率波动大,一旦升级后出现兼容性问题,很难在不影响在线业务的情况下快速回退。因此,版本兼容性测试必须前置到升级流程中,作为卡点而非事后补救。

1.3 版本兼容性测试的目标与范围

本课程定义的版本兼容性测试,其核心目标是在集群升级前、中、后三个阶段,系统性地验证 Serverless 平台各组件在新旧版本间的行为一致性。具体目标与范围如下:

维度 目标 测试范围
API 兼容性 确保新旧版本 API 的请求/响应结构、字段语义、错误码一致 K8s API、CRD、自定义 API、gRPC 接口
数据面兼容性 验证函数执行环境(Pod/Sandbox)在升级后仍能正常启动、运行、销毁 容器运行时、Sandbox 镜像、Init 容器、健康检查
网络兼容性 确认服务发现、负载均衡、网络策略在升级后不退化 Service、Ingress、NetworkPolicy、mTLS 配置
可观测性兼容性 保证监控、日志、链路追踪数据在新集群中仍能正确采集与上报 Metrics 端点、日志格式、Trace Context 传播
存储兼容性 验证 etcd 数据迁移、PV/PVC 挂载、对象存储 SDK 版本兼容 etcd 版本、CSI 驱动、对象存储客户端
版本兼容性测试范围与流程 版本兼容性测试范围与流程 集群升级操作 升级前:API 兼容性扫描 升级中:数据面滚动验证 升级后:全链路回归测试 兼容性测试覆盖清单 API 兼容性 | 数据面兼容性 | 网络兼容性 | 可观测性兼容性 | 存储兼容性 测试策略:灰度升级 + 流量镜像 + 自动化断言 + 回滚预案

1.4 兼容性测试的层次划分

为了在有限资源下最大化测试效率,我们将兼容性测试划分为三个层次,每个层次对应不同的测试深度与执行频率:

  1. 单元级兼容性测试: 针对单个组件(如 Function Controller、K8s API 客户端)的 API 版本适配性进行验证,通常在 CI 阶段执行。
  2. 集成级兼容性测试: 验证控制面与数据面、控制面与存储层之间的接口兼容性,在预发环境执行。
  3. 端到端兼容性测试: 模拟真实用户流量,验证完整的函数创建、调用、监控、销毁链路在升级前后的行为一致性,在生产灰度环境执行。