Knative资源模型在控制面弹性伸缩中的架构设计 - 第1节
1.1 Knative 项目背景
Knative 是由 Google 联合 Pivotal、IBM、Red Hat 等公司在 2018 年开源的基于 Kubernetes 的 Serverless 框架。其核心目标是为云原生应用提供一套标准化的构建、部署和自动弹性伸缩能力,使开发者无需关心底层基础设施,即可专注于业务逻辑。
Knative 的出现填补了 Kubernetes 在 Serverless 场景下的空白。原生 Kubernetes 的 HorizontalPodAutoscaler (HPA) 基于 CPU/内存指标进行伸缩,响应延迟通常在 30 秒以上,无法满足 Serverless 工作负载对毫秒级冷启动和零流量缩零的需求。Knative 通过引入控制面与数据面分离架构,实现了从零到 N 的快速弹性伸缩。
关键里程碑: Knative v0.1 于 2018 年 7 月发布,定义了 Serving(服务托管)和 Eventing(事件驱动)两大核心组件。2021 年成为 CNCF 孵化项目,2023 年进入毕业阶段。
1.2 弹性伸缩在 Serverless 中的核心地位
弹性伸缩是 Serverless 平台的“心脏”。没有高效的弹性伸缩,Serverless 将退化为普通的容器托管服务。Knative 的弹性伸缩能力体现在以下三个维度:
| 维度 | 描述 | Knative 实现方式 |
|---|---|---|
| 缩零能力 | 无请求时 Pod 数量降为 0,释放资源 | Activator 组件接管流量,路由到 Queue-Proxy 检测空闲 |
| 快速扩容 | 突发流量下秒级拉起 Pod | 基于并发数(Concurrency)的 KPA 算法,绕过 HPA 延迟 |
| 精准伸缩 | 根据实时请求量精确调整副本数 | Autoscaler 每 1 秒采集 Queue-Proxy 指标,计算期望副本 |
对比传统 HPA: HPA 默认 15 秒采集一次指标,扩容决策需要 3 个周期(约 45 秒)。Knative 的 KPA(Knative Pod Autoscaler)将决策周期压缩到 1 秒,并支持直接缩零。
1.3 控制面与数据面分离架构概述
Knative 采用控制面(Control Plane)与数据面(Data Plane)分离的架构设计,这是实现高效弹性伸缩的基础。控制面负责决策和状态管理,数据面负责实际的请求转发和指标采集。
1.3.1 控制面组件职责
- Autoscaler: 核心伸缩决策组件,每秒从 Queue-Proxy 采集并发请求数,计算期望副本数并写入
PodAutoscaler资源状态。 - SKS(Serverless Kubernetes Service): 管理服务端点,控制流量在 Activator 和 Pod 之间切换,实现缩零和流量灰度。
- Revision: 每个代码版本对应一个 Revision,包含配置快照和自动伸缩策略。
- Configuration: 管理 Revision 的期望状态,触发新 Revision 创建。
- Route: 流量路由规则,支持按百分比灰度、按 Header 路由。
- Service: 用户面向的顶层抽象,自动管理 Route 和 Configuration 的生命周期。
1.3.2 数据面组件职责
- Activator: 请求缓冲和冷启动代理。当 Revision 缩零时,Activator 持有端点并缓冲请求,等待 Pod 就绪后转发。
- Queue-Proxy: 以 Sidecar 模式注入每个 Pod,采集并发数、请求延迟等指标,并上报给 Autoscaler。
- User Container: 用户业务容器,无侵入地运行在 Knative 管理的数据面中。
- Istio/Kourier: 服务网格层,负责南北向流量接入和东西向流量转发。
架构设计要点: 控制面与数据面通过 Kubernetes CRD(Custom Resource Definition)进行通信,不依赖共享存储或消息队列。这种松耦合设计使得控制面可以独立升级,数据面可以跨集群部署。
1.4 弹性伸缩的关键指标
Knative 弹性伸缩的决策依据来自数据面采集的实时指标,核心指标包括:
| 指标名称 | 采集位置 | 采集周期 | 用途 |
|---|---|---|---|
| 并发数(Concurrency) | Queue-Proxy | 1 秒 | 计算期望副本数 |
| 请求速率(RPS) | Queue-Proxy | 1 秒 | 辅助扩容判断 |
| Pod 状态 | Kubernetes API | 事件驱动 | 确认 Pod 就绪/终止 |
| Activator 缓冲深度 | Activator | 100 毫秒 | 冷启动期间请求排队 |
这些指标通过 metrics-server 或 Knative 自带的指标管道汇聚到 Autoscaler,形成闭环伸缩控制。