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)分离的架构设计,这是实现高效弹性伸缩的基础。控制面负责决策和状态管理,数据面负责实际的请求转发和指标采集。

Knative 控制面与数据面分离架构 控制面(Control Plane) Autoscaler SKS Revision Configuration Route Service 数据面(Data Plane) Activator Queue-Proxy User Container Istio/Kourier 指标采集 配置下发 路由规则 控制面负责决策(缩零/扩容/路由),数据面负责执行(转发/指标/代理)

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,形成闭环伸缩控制。

1.5 本章小结