Knative是一个开源的企业级解决方案,用于在kubernetes平台中构建
Serveless和管理
事件驱动的应用程序。
介绍
Knative is an Open-Source Enterprise-level solution to build Serverless and Event Driven Applications
Serverless Containers in Kubernetes environments.
- knative 是 k8s 原生扩展组件,用于部署、运行和管理 Serverless 类型的云原生应用
- knative(读音
kay-nay-tiv
),由 Google 在2018年7月正式发布,当前由 Redhat、Google和IBM,以及各种初创公司组成的开源社区共同维护
为什么需要 Serverless 容器
- 配置简单,通过简化的YAML定义自定义的 CRDs
- 弹性伸缩:支持缩资源数量为 0
- 渐进式发布:根据您的需要选择发布策略
- 事件集成:支持处理来自多个源的事件
- 处理事件:支持事件代理(event broker)触发程序
- 可扩展:Kubernetes原生集成和扩展
核心组件
说明:
Serving
和 Eventing
协同工作,管理任务和应用Serving
- 支持由请求驱动计算
- 关注应用的网络、弹性伸缩(支持缩容至0)和版本(revision)记录
- When you build or run a function, an Open Container Initiative (OCI) format container image is generated automatically for you, and is stored in a container registry(参考)
- 部署、管理和伸缩无状态应用规模
- 替代 kubernetes Deployment 控制器,负责编排运行基于 HTTP 协议的无状态应用
- knative 的 Serving 对象,相当于 Kubernetes 的 Service + Deployment 的功能
- 流量切分
- 通过在 Pod 扩展时缓冲请求来削峰填谷
- 基于单个请求进行负载均衡
- 基于请求的速度、自动扩缩容
Eventing
- 以声明的方式创建对事件源的订阅,并将事件路由到目标端点
- 管理事件的
订阅(subscription)
、分发(delivery)
和处理 - 基于
pub/sub
模型连接 Serving
- 旧版本存在的
Build
组件,已经拆分为 Tekton
项目,主要作用包括
Serving
参考:knative Serving
- 相关资源定义在
serving.knative.dev
群组中 - 主要包括4个CRDs
Service
: service.serving.knative.dev
- 自动控制下面三种类型资源对象的管理
- 是对 Serverless 类型应用功能的抽象,负责整个 Serverless 的声明周期
Route
: route.serving.knative.dev
- 将请求路由到目标
Revision
- 支持将流量按比例切分并路由到多个
Revision
Configuration
: configuration.serving.knative.dev
- 定义 Service 期望状态(spec)的配置
- Service 的更新,也将导致 Configuration 的更新
Revision
: revision.serving.knative.dev
- Service 的每次代码或配置变更都生成一个 revision
- revision 是快照数据,不可变
Eventing
参考:CloudEvents 介绍
Knative Eventing 是一个API集合,允许应用使用事件驱动架构(Event-driven architecture)模型
核心概念
图参考自互联网
事件源(Event Source)
事件生产者的抽象,参考事件类型(Event Type)
事件类型,在 Event Registry 中定义事件处理流(Eventing Flows)
支持两种类型:Event Sinks
能接收 Event 的可寻址(addressable)或可调用(Callable)的资源,Knative Eventing Sink 支持三种类型:- Knative Service
- Channels
- Brokers
- Knative Eventing 支持的事件传递模式
- Sources to Sink:
- 单一 Sink 模式,事件接收过程中不存在队列和过滤等操作
- Channels and Subscriptions
- Event Source 将事件发到多个 Channel
- Channel 可以有多个 Subscription(即 Sink)
- Channel 中的事件以 Cloud Event 格式传递
- 不支持事件过滤
图参考
- Brokers and 【
- Brokers and Triggers
- 功能类似于 Channels and Subscriptions 模式,且支持消息过滤
- 事件过滤机制运行 Subscription 使用事件属性的条件表达式(Trigger)筛选事件
- Trigger 负责订阅 Broker,并对 Broker 传递的消息进行过滤,并对消息进行格式化
- 该模式为生产推荐的使用模式
代码架构
Knative 遵循 kubernetes 扩展方式,通过自定义 API 资源类型实现如下:
Serving
自动化完成服务的部署和扩缩容Eventing
标准化事件驱动- knative
- Serving
- Serving Controller
- Resources API
- Service
- Route
- Configuration
- Revision
- Eventing
- Eventing Controller
- Resources API
说明
- Knative 并不提供 FaaS 方案,用户可以在 Knative + Kubernetes 基础上,借助其他项目(如Kyma)构建 FaaS 系统