第1章:Knative 概述

1.1 什么是 Knative

定义与核心价值

Knative 是一个基于 Kubernetes 的开源平台,旨在简化现代应用的构建、部署和管理。它将复杂的容器编排抽象为简单的开发者体验,让团队专注于编写代码而非管理基础设施。

核心价值主张

  • 简化开发体验:从容器到 URL 只需一个 YAML 文件
  • 自动化运维:自动扩缩容、流量管理、版本控制
  • 事件驱动:松耦合的异步通信架构
  • 云原生标准:基于 Kubernetes,遵循 CloudEvents 规范

Knative 技术栈定位

基础设施层
Kubernetes层
Knative层
应用层
计算资源
存储资源
网络资源
Pod管理
服务发现
配置存储
资源调度
Knative Serving
应用托管与流量管理
Knative Eventing
事件驱动架构
业务应用代码
微服务
Serverless函数

为什么需要 Knative

传统 Kubernetes 部署的挑战

需要编写
需要配置
需要管理
需要设置
需要实现
需要监控
开发者
Deployment
Service
Ingress
HPA
流量分割
指标收集

使用 Knative 后的简化

只需定义
自动创建
自动配置
自动管理
自动收集
开发者
Knative Service
所有K8s资源
自动扩缩容
流量路由
监控指标

对比表格

维度 传统 K8s Knative
配置复杂度 需要5+种资源对象 1个 Service 资源
自动扩缩容 需手动配置HPA 内置KPA,开箱即用
缩容到零 ❌ 不支持 ✅ 默认支持
流量管理 需Istio等额外组件 ✅ 原生支持蓝绿/金丝雀
冷启动处理 ❌ 无 ✅ Activator组件
事件驱动 需自建 ✅ Knative Eventing
学习曲线 陡峭 平缓

Knative 在云原生生态中的位置

上层应用
Knative生态
CNCF生态
可选网络层
监控集成
追踪集成
函数计算
微服务
AI/ML推理
数据处理
Knative
Serverless平台
Knative Serving
应用托管
Knative Eventing
事件驱动
Kubernetes
容器编排
Istio/Envoy
服务网格
Prometheus
监控
Jaeger
链路追踪

适用场景与最佳实践

✅ 适用场景

  1. 微服务应用

    • 快速迭代的业务服务
    • 需要灰度发布的应用
    • 流量波动大的服务
  2. 事件驱动架构

    • 异步任务处理
    • 消息队列消费
    • Webhook 处理
  3. AI/ML 推理服务

    • 按需加载模型
    • GPU 资源按需分配
    • 批量推理任务
  4. 定时任务

    • Cron 作业
    • 数据同步任务
    • 报表生成

❌ 不适用场景

  1. 有状态应用

    • 数据库服务
    • 缓存服务(Redis/Memcached)
    • 需要持久连接的应用
  2. 长连接服务

    • WebSocket 服务器(部分支持)
    • 游戏服务器
    • 实时通信服务
  3. 极低延迟要求

    • 高频交易系统
    • 实时竞价系统
    • 对冷启动敏感的应用

1.2 Knative 的发展历史

发展时间线

timeline
    title Knative 发展历程
    2018-07 : Google发起开源项目
           : 首次发布v0.1.0
           : 包含Build/Serving/Eventing
    2019-03 : v0.5.0发布
           : Build组件独立为Tekton
           : 社区快速增长
    2019-10 : v0.10.0发布
           : Eventing架构重构
           : 引入Broker/Trigger模式
    2020-07 : v0.16.0发布
           : Serving稳定性提升
           : 支持多网络层
    2021-03 : v0.22.0发布
           : API达到稳定版本
           : 企业采用增加
    2022-11 : v1.8.0发布
           : 功能增强
           : 性能优化
    2023-10 : v1.12.0发布
           : 云厂商深度集成
           : 生态完善

社区演进与版本迭代

关键里程碑

时间 版本 重要变化
2018.07 v0.1.0 项目启动,包含Build/Serving/Eventing三大组件
2019.03 v0.5.0 Build组件独立为Tekton项目
2019.10 v0.10.0 Eventing重构,引入Broker/Trigger
2020.07 v0.16.0 支持Kourier网络层,简化部署
2021.03 v0.22.0 Serving API v1稳定
2022.03 v1.3.0 Eventing API v1稳定
2023.10 v1.12.0 全面支持Kubernetes 1.28

版本策略

  • 发布节奏:每月一个小版本
  • 支持周期:最新4个版本
  • API稳定性:v1 API向后兼容

主要贡献者与生态伙伴

生态工具
云厂商
核心贡献者
发起方
Tekton
CI/CD
KServe
模型服务
Crossplane
基础设施
Google Cloud
Cloud Run
AWS
EKS集成
Azure
AKS集成
阿里云
ACK集成
IBM/RedHat
OpenShift集成
VMware
企业方案
SAP
Kyma平台
Google
项目发起

主要贡献者统计(截至2023):

  • Google: 45% commits
  • Red Hat/IBM: 25% commits
  • VMware: 15% commits
  • 其他社区: 15% commits

1.3 Knative 核心优势

Serverless 能力

Serverless 核心特征

提交代码
自动构建
自动部署
自动分配
自动管理
无流量时
有请求时
流量增加
开发者
Knative
容器镜像
运行环境
公网URL
生命周期
缩容到0
自动唤醒
自动扩容

Serverless 优势对比

特性 传统部署 Knative Serverless
资源利用率 固定资源,浪费严重 按需分配,利用率高
运维成本 需要专业运维团队 自动化运维
开发效率 关注基础设施 专注业务逻辑
扩展性 手动扩容 毫秒级自动扩容
成本 固定成本 按使用量付费

自动扩缩容(Scale to Zero)

扩缩容决策流程

用户请求 Activator Autoscaler Revision Pod 监控指标:RPS/并发数 HTTP请求(Pod=0时) 报告流量 计算所需Pod数 扩容至N个Pod Pod就绪 转发请求 返回响应 无流量30s后 缩容到0 Pod终止,释放资源 用户请求 Activator Autoscaler Revision Pod

扩缩容算法

KPA(Knative Pod Autoscaler)核心公式:

DesiredPods = ceil(CurrentConcurrency / TargetConcurrency)

其中:
- CurrentConcurrency: 当前并发请求数
- TargetConcurrency: 目标并发数(默认100)
- ceil: 向上取整

扩缩容配置示例

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: autoscale-demo
spec:
  template:
    metadata:
      annotations:
        # 扩缩容指标:并发数(concurrency)或RPS(rps)
        autoscaling.knative.dev/metric: "concurrency"
        
        # 目标值:每个Pod处理100个并发
        autoscaling.knative.dev/target: "100"
        
        # 最小副本数:0表示支持缩容到零
        autoscaling.knative.dev/min-scale: "0"
        
        # 最大副本数:防止无限扩容
        autoscaling.knative.dev/max-scale: "50"
        
        # 缩容延迟:30秒无流量后开始缩容
        autoscaling.knative.dev/scale-down-delay: "30s"
        
        # 稳定窗口:60秒内计算平均值
        autoscaling.knative.dev/window: "60s"
        
        # Panic模式:流量突增时快速扩容
        autoscaling.knative.dev/panic-threshold-percentage: "200"
    spec:
      containers:
      - image: myapp:v1

扩缩容场景对比

场景2:稳定流量
场景1:突发流量
大量请求
2秒内
流量持续
流量下降
30s无流量
请求到达
流量增加
保持稳定
逐步减少
1 Pod
0 Pods
3 Pods
3 Pods
1 Pod
Panic Mode
0 Pods
10 Pods
20 Pods
5 Pods
0 Pods

流量管理与灰度发布

流量分配架构

Pod副本
流量分配
Knative Route
Ingress Gateway
90%
10%
v1-pod-1
v1-pod-2
v2-pod-1
Revision v1
90%流量
Revision v2
10%流量
Route资源
Istio/Kourier Gateway

流量管理策略

  1. 蓝绿部署
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: blue-green-demo
spec:
  template:
    metadata:
      name: green-v2  # 新版本
    spec:
      containers:
      - image: myapp:v2
  traffic:
  - revisionName: blue-v1
    percent: 100          # 100%流量到旧版本
    tag: blue
  - revisionName: green-v2
    percent: 0            # 新版本准备就绪但不接收流量
    tag: green
  - latestRevision: true
    percent: 0

切换流量(一键切换):

  traffic:
  - revisionName: blue-v1
    percent: 0            # 旧版本下线
  - revisionName: green-v2
    percent: 100          # 新版本上线
  1. 金丝雀发布
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: canary-demo
spec:
  template:
    spec:
      containers:
      - image: myapp:v2
  traffic:
  - revisionName: stable-v1
    percent: 95           # 95%流量到稳定版本
  - revisionName: canary-v2
    percent: 5            # 5%流量到金丝雀版本
    tag: canary

逐步增加金丝雀流量:

5% → 10% → 25% → 50% → 100%
  1. 基于Tag的路由
  traffic:
  - revisionName: v2
    percent: 0
    tag: staging        # 通过staging.myapp.example.com访问
  - revisionName: v1
    percent: 100

访问URL:

  • 生产环境:myapp.example.com → v1
  • 测试环境:staging-myapp.example.com → v2

流量管理可视化

Client Gateway RouteV1 RouteV2 流量分配比例 v1: 90%, v2: 10% 请求1 路由到v1 (90%) 响应 请求2 路由到v1 (90%) 响应 请求3 路由到v2 (10%) 响应 根据监控指标 逐步调整比例 Client Gateway RouteV1 RouteV2

事件驱动架构支持

事件驱动模型

事件消费者
Knative Eventing
过滤规则
事件源
发布事件
发布事件
发布事件
发布事件
订单服务
库存服务
通知服务
CI/CD流水线
Broker
事件路由中心
Trigger 1
type=order.created
Trigger 2
type=payment.success
Trigger 3
source=github
Kafka
GitHub Webhook
定时器
API Server

CloudEvents 标准

Knative Eventing 基于 CNCF CloudEvents 规范:

{
  "specversion": "1.0",
  "type": "com.example.order.created",
  "source": "https://example.com/order-service",
  "id": "A234-1234-1234",
  "time": "2023-11-17T10:00:00Z",
  "datacontenttype": "application/json",
  "data": {
    "orderId": "12345",
    "amount": 99.99,
    "customerId": "user-789"
  }
}

事件处理流程

事件生产者 Broker 过滤器 消费者1 消费者2 死信队列 发布事件 匹配Trigger规则 转发事件 处理成功 转发事件 处理成功 丢弃事件 alt [匹配成功] [匹配失败] 返回错误 重试(最多5次) 仍然失败 发送到死信队列 alt [处理失败] 事件生产者 Broker 过滤器 消费者1 消费者2 死信队列

关键要点总结

Knative 核心价值

简化复杂性:将 Kubernetes 的复杂性抽象为简单的开发者体验
自动化运维:自动扩缩容、流量管理、版本控制
成本优化:Scale to Zero,按需使用资源
事件驱动:原生支持异步、解耦的架构模式
灵活部署:支持蓝绿、金丝雀等多种发布策略
云原生标准:基于 K8s 和 CloudEvents 标准

适用场景

场景类型 推荐度 说明
微服务应用 ⭐⭐⭐⭐⭐ 完美契合,快速迭代
事件驱动架构 ⭐⭐⭐⭐⭐ 原生支持
AI/ML推理 ⭐⭐⭐⭐⭐ 按需加载模型
API服务 ⭐⭐⭐⭐ 自动扩缩容
定时任务 ⭐⭐⭐⭐ PingSource支持
有状态应用 ⭐⭐ 不推荐
长连接服务 ⭐⭐ 部分支持

学习路径建议

了解Serverless概念
掌握Kubernetes基础
学习Knative Serving
实践自动扩缩容
学习Knative Eventing
构建事件驱动应用
生产环境最佳实践

下一章预告:第2章将深入讲解 Knative 的基础架构,包括 Serving 和 Eventing 的核心组件及工作原理。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐