1.1 Knative是什么
-
基于kubernetes平台,用于部署和管理现代serverless工作负载,是serverless平台,而非serverless实现
-
若能够把kubernetes看作是一个分布式内核,则Knative也可被类比为该内核之上的分布式libc;
1.2 Knative项目
- Knative项目简介
- Google于2018年7月正式发布;
- Kubernetes平台的原生扩展组件,让其能够轻松的部署,运行和管理serverless类型的云原生应用
- 由RedHat,Google和IBM等公司,以及各种初创公司组成的开源社区共同维护
- 目标在于Serverless技术标准化
- Knative的组件
- Serving
- 部署管理及扩展无状态应用
- 支持由请求驱动计算
- 支持缩容到0
- Eventing
- 以声明的方式创建对事件源的订阅,并将事件路由到目标端点
- 事件订阅、传递和处理
- 基于pub/sub模型连接knative的工作负载
- Build
- 从源代码构建出应用镜像
- 已经由独立的Tekton项目取代
- Serving
1.3 Knative 架构
- 遵照Kubernetes的范式,以扩展的方式,通过自定义API资源类型支持
- 自动化完成服务的部署和扩缩容(Serving)
- 标准化事件驱动基础设施(Eventing)
- Serviing
- Serving Controller
- Resources API
- Service
- Configuration
- Revision
- Route
- Eventing
- Eventing Controller
- Resources API
- Broker
- Trigger
- EventType
1.3.1 Knative Serving架构
-
相关的资源API定义在"serving.knative.dev"群组中
-
主要包括四个CRD
- Service
- 对自动编排Serverless类型应用的功能的抽象,负责自动管理工作负载的整个生命周期
- 能自动控制下面三个类型的资源对象的管理
- Configuration
- 反映了Service当前期望状态(Spec)的配置
- Service对象的更新,也将导致Configuration的更新
- Revision
- Service的每次代码或者配置变更都会生成一个Revision
- 快照型数据,read-only
- Route
- 将请求流量路由到目标Revision
- 支持将流量按比例切分并路由到多个Revision
- Service
1.3.1 Knative Eventing
1.3.1.1 事件
- 关于“事件”
- 时间是一个不可变的小段数据,记录了系统在特定时间内的特定行为,或状态的转变
- 通过读取系统的事件流(序列),可以重建系统的运行历史
- 事件的格式
- 事件的格式完全可由开发者自行决定
- CNCF的CloudEvents规范至力于事件格式的标准化
- 目前,众多云服务商都开始支持该规范
- 关于“事件驱动”
- 不存在一个规范、严格的定义,任何使用事件通知范式(pub/sub)的系统都是事件驱动的系统
- 事件驱动的系统大体分为两类
- 响应式(reactive):本质上是非同步性质的函数调用(或HTTP RESTful/RPC调用)
- 流处理(stream processing):密集式、面向数据式使用事件,订阅者通常是流处理器,它从事件流中提取状态,并将状态传递给相关方
- 关于“事件源(Event Sourceing)”
- 事件数据的持久化模式
- 通常基于事件日志保存不可变的事件信息
1.3.1.2 Knativing Eventing
-
Knative Eventing
- 负责为事件的生产和消费提供基础设施,可将事件从生产者路由到目标消费者,从而让开发人员能够使用事件驱动架构
- 各资源者是松散耦合关系,可分别独立开发和部署
- 遵循CloudEvents规范
1.4 重点说明
- Knative是FaaS解决方案吗?
- Knative并未提供FaaS
- 用户可在Knative和Kubernetes之上,借助于第三方项目自行构建FaaS系统,例如Kyma Project
- Knative为Kubernetes扩展出的功能
- Serving
- 替代Deployment控制器,负责编排运行基于HTTP协议的无状态应用
- 额外提供的功能特性
- Knative的Service对象,相当于Kubernetes上的 Service+Deployment 的功能
- 基于单个请求进行负载均衡
- 基于请求的快速、自动化扩缩容,并支持收缩至0实例
- 通过在Pod扩展时缓冲请求来削峰填谷
- 流量切分
- Eventing
- 声明式事件配置接口
- Serving
1.5 Knative适合运行的应用类型
- Knative仅适合运行特定类型的应用:无状态、容器化的服务器应用
- 监听于某套接字之上提供服务的应用,不适合运行批处理作业
- 仅支持无状态应用,同一服务的各实例间无差别,可简单进行扩容和缩容;
- 仅支持通过HTTP/1、HTTP/2或gRPC通信的服务端应用;
- 应用程序要能够构建为OCI容器镜像;
1.6 如何获取Knative服务
- 自行部署Knative
- 需要事先准备出Kubernetes集群
- 事先选定一个可用的网络层来路由和治理流量
- Istio(istio-ingressgateway)
- Contour
- Kourier
- 基于Knative的商业产品
- Cloud Native Runtimes for VMware Tanzu
- Google Cloud Run:Google完全托管(包括Kubernetes集群)的Knative平台
- Google Cloud Run for Anthos/GKE:GKE集群中托管的Knative安装
- IBM Cloud Kubernetes Service:IKS集群中托管的Knative安装
- Red Hat OpenShift Serverless:Openshift托管的Openshift集群上的Knative安装
- Pivotal Function Service(PFS):在Kubernetes上构建和运行函数、应用程序和容器的平台