2. Knative 核心概念回顾:Service、Revision、Configuration、Route 的关系与职责

在深入探讨生命周期漂移复测之前,必须重新校准对 Knative 核心原语的理解。Knative Serving 通过四个紧密协作的抽象层——Service、Revision、Configuration 和 Route——来定义、部署、版本化并路由 Serverless 工作负载。这四个资源共同构成了一个声明式的、自动化的生命周期管理模型。

2.1 四原语的职责与定位

每个原语在生命周期中承担不可替代的角色,下表清晰划分了它们的职责边界:

原语 核心职责 生命周期阶段 是否直接管理 Pod
Service 用户入口,自动管理 Configuration 与 Route 的创建与同步 全生命周期(创建、更新、回滚) 否(委托下层)
Configuration 定义期望的 Revision 模板,驱动 Revision 的滚动更新 配置变更、版本生成 否(仅定义模板)
Revision 不可变的快照,包含代码、配置、环境变量与资源限制 版本固化、扩缩容、流量目标 是(通过 Deployment/KSVC)
Route 流量分发策略,将请求按比例路由到不同 Revision 流量管理、灰度发布、蓝绿部署 否(仅网络规则)
关键认知:Service 是面向用户的“全权代理”,而 Configuration 和 Route 是内部的“左右手”。Revision 是真正承载工作负载的不可变单元,任何配置变更都会产生新的 Revision,而非原地修改。

2.2 四原语的协作关系与生命周期流程

下图展示了四个原语在 Serverless 工作负载从创建到流量切换的完整协作链路:

Knative Serving 四原语协作生命周期 Service (ksvc) Configuration Route Revision (rev-001) Revision (rev-002) Revision (rev-003) 流量分配示例 rev-001: 10% rev-002: 80% rev-003: 10% 由 Route 的 traffic 字段控制
协作流程解读:
  1. Service 接收用户 YAML 变更,自动更新 Configuration 和 Route。
  2. Configuration 根据新配置生成一个不可变的 Revision(如 rev-002)。
  3. Route 根据流量规则(traffic 字段)将外部请求按比例分发到不同的 Revision。
  4. 每个 Revision 独立管理其 Pod 的扩缩容(从 0 到 N),互不干扰。

2.3 四原语如何共同管理生命周期

Knative 的生命周期管理并非简单的“创建-运行-删除”,而是一个持续协调的闭环。四个原语通过以下机制实现协同:

  • 声明式驱动:用户只修改 Service 的期望状态(如镜像版本、环境变量),Knative 控制器自动计算差异并驱动 Configuration 和 Route 执行变更。
  • 版本链与回滚:Configuration 维护一个 Revision 列表,每个 Revision 是历史快照。回滚时只需将 Route 的流量指向旧 Revision,无需重新构建。
  • 流量解耦:Route 不关心 Revision 内部的 Pod 状态,只负责流量转发。Revision 的扩缩容由 Autoscaler 独立处理,两者通过 Service 的端点信息间接通信。
  • 生命周期漂移的检测基础:当 Revision 的实际 Pod 状态(如就绪副本数、镜像拉取失败)与 Configuration 定义的期望状态不一致时,即产生“生命周期漂移”。Service 的 Status 字段会聚合这些差异,为复测提供数据源。
常见误解澄清:不要将 Knative Service 等同于 Kubernetes Service。Knative Service 是一个高层抽象,内部包含 Configuration 和 Route;而 Kubernetes Service 仅用于网络负载均衡。在生命周期漂移复测中,我们关注的是 Knative Service 的 status.conditions 和 Revision 的 status,而非底层 K8s Service。

2.4 核心原语在生命周期漂移复测中的角色

在后续章节的漂移复测场景中,每个原语都承担特定的检测与修复职责:

原语 漂移检测点 复测关注字段
Service 整体就绪状态、配置一致性 status.conditions[?(@.type=='Ready')].status
Configuration 最新 Revision 是否已生成、是否与期望配置一致 status.latestCreatedRevisionName vs status.latestReadyRevisionName
Revision Pod 副本数、镜像拉取、容器启动、就绪探针 status.conditions、status.actualReplicas、status.desiredReplicas
Route 流量分配是否生效、目标 Revision 是否可路由 status.traffic 中每个目标的 revisionName 与 percent