Knative 核心概念介绍:Build、Serving 和 Eventing 三大核心组件

Knative 主要由 Build、Serving 和 Eventing 三大核心组件构成。Knative 正是依靠这三个核心组件,驱动着 Knative 这艘 Serverless 巨轮前行。下面让咱们来分别介绍一下这三个核心组件。git

Build

Knative Build 是基于现有的 Kubernetes 能力之上,提供的一套标准化、可移植、可复用的容器镜像构建方式。经过在 Kubernetes 上运行复杂的构建任务,Knative Build 使你没必要再单独开发和重复这些镜像构建过程, 从而经过系统化、工程化的方式,减小了镜像构建时间及成本。编程

Build 经过 Kubernetes 自定义资源定义(CRD)实现。 经过 Build 你能够自定义一个从运行到结束的构建流程。例如,可使用 Knative Build 来获取、构建和打包代码。Build 具有如下功能:网络

  • 支持 Source 源挂载,目前支持的 Source 源包括:框架

    • git 代码仓库
    • 任意容器镜像
  • 支持经过 BuildTemplate 建立可重复执行构建的模板less

  • 支持 K8s ServiceAccount 身份验证ui

典型的 Build 示意图:spa

虽然目前 Knative Build 并不提供完整的独立 CI/CD 解决方案,但它却提供了一个底层的构建模块,用户可单独使用该构建模块在大型系统中实现集成和利用。设计

Serving

Knative 做为 Severless 框架最终是用来提供服务的, 那么 Knative Serving 应运而生。code

Knative Serving 构建于 Kubernetes 和 Istio 之上,为 Serverless 应用提供部署和服务支持。其特性以下:server

  • 快速部署 Serverless 容器
  • 支持自动扩缩容和缩到 0 实例
  • 基于 Istio 组件,提供路由和网络编程
  • 支持部署快照

Knative Serving 中定义了如下 CRD 资源:

  • Service: 自动管理工做负载整个生命周期。负责建立 Route、Configuration 以及 Revision 资源。经过 Service 能够指定路由流量使用最新的 Revision 仍是固定的 Revision
  • Route:负责映射网络端点到一个或多个 Revision。能够经过多种方式管理流量。包括灰度流量和重命名路由
  • Configuration: 负责保持 Deployment 的指望状态,提供了代码和配置之间清晰的分离,并遵循应用开发的 12 要素。修改一次 Configuration 产生一个 Revision
  • Revision:Revision 资源是对工做负载进行的每一个修改的代码和配置的时间点快照。Revision 是不可变对象,能够长期保留

资源关系图:

Eventing

Knative Eventing 旨在知足云原生开发中通用需求, 以提供可组合的方式绑定事件源和事件消费者。其设计目标:

  • Knative Eventing 提供的服务是松散耦合,可独立开发和部署。服务可跨平台使用(如 Kubernetes, VMs, SaaS 或者 FaaS)
  • 事件的生产者和事件的消费者是相互独立的。任何事件的生产者(事件源)能够先于事件的消费者监听以前产生事件,一样事件的消费者能够先于事件产生以前监听事件
  • 支持第三方的服务对接该 Eventing 系统
  • 确保跨服务的互操做性

事件处理示意图:

如上图所示,Eventing 主要由事件源(Event Source)、事件处理(Flow)以及事件消费者(Event Consumer)三部分构成。

事件源(Event Source)

当前支持如下几种类型的事件源:

  • ApiserverSource:每次建立或更新 Kubernetes 资源时,ApiserverSource 都会触发一个新事件
  • GitHubSource:GitHub 操做时,GitHubSource 会触发一个新事件
  • GcpPubSubSource: GCP 云平台 Pub/Sub 服务会触发一个新事件
  • AwsSqsSource:Aws 云平台 SQS 服务会触发一个新事件
  • ContainerSource: ContainerSource 将实例化一个容器,经过该容器产生事件
  • CronJobSource: 经过 CronJob 产生事件
  • KafkaSource: 接收 Kafka 事件并触发一个新事件
  • CamelSource: 接收 Camel 相关组件事件并触发一个新事件

事件接收/转发(Flow)

当前 Knative 支持以下事件接收处理:

  • 直接事件接收

    经过事件源直接转发到单一事件消费者。支持直接调用 Knative Service 或者 Kubernetes Service 进行消费处理。这样的场景下,若是调用的服务不可用,事件源负责重试机制处理。

  • 经过事件通道(Channel)以及事件订阅(Subscriptions)转发事件处理

    这样的状况下,能够经过 Channel 保证事件不丢失并进行缓冲处理,经过 Subscriptions 订阅事件以知足多个消费端处理。

  • 经过 brokers 和 triggers 支持事件消费及过滤机制

从 v0.5 开始,Knative Eventing 定义 Broker 和 Trigger 对象,实现了对事件进行过滤(亦如经过 ingress 和 ingress controller 对网络流量的过滤同样)。

经过定义 Broker 建立 Channel,经过 Trigger 建立 Channel 的订阅(subscription),并产生事件过滤规则。

事件消费者(Event Consumer)

为了知足将事件发送到不一样类型的服务进行消费, Knative Eventing 经过多个 k8s 资源定义了两个通用的接口:

  • Addressable 接口提供可用于事件接收和发送的 HTTP 请求地址,并经过status.address.hostname字段定义。做为一种特殊状况,Kubernetes Service 对象也能够实现 Addressable 接口
  • Callable 接口接收经过 HTTP 传递的事件并转换事件。能够按照处理来自外部事件源事件的相同方式,对这些返回的事件作进一步处理

当前 Knative 支持经过 Knative Service 或者 Kubernetes Service 进行消费事件。

另外针对事件消费者,如何事先知道哪些事件能够被消费? Knative Eventing 在最新的 0.6 版本中提供 Registry 事件注册机制, 这样事件消费者就能够事先经过 Registry 得到哪些 Broker 中的事件类型能够被消费。

总结

Knative 使用 Build 提供云原生“从源代码到容器”的镜像构建能力,经过 Serving 部署容器并提供通用的服务模型,同时以 Eventing 提供事件全局订阅、传递和管理能力,实现事件驱动。这就是 Knative 呈现给咱们的标准 Serverless 编排框架。

 


本文做者:jessie筱姜

原文连接

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索