Knative 是一款基于 Kubernetes 的 Serverless 框架。其目标是制定云原生、跨平台的 Serverless 编排标准。Knative 通过整合容器构建(或者函数)、工作负载管理(动态扩缩)以及事件模型这三者来实现的这一 Serverless 标准。

Knative 体系架构

在 Knative 体系架构下各个角色的协作关系:

  • Developers

    Serverless 服务的开发人员可以直接使用原生的 Kubernetes API 基于 Knative 部署 Serverless 服务。

  • Contributors

    主要是指社区的贡献者。

  • Operators

    Knative 可以被集成到任何支持的环境中,例如,云厂商、或者企业内部。目前 Knative 是基于 Kubernetes 来实现的,有 Kubernetes 的地方就可以部署 Knative。

  • Users

    终端用户通过 Istio 网关访问服务,或者通过事件系统触发 Knative 中的 Serverless 服务。

Knative 核心组件

作为一个通用的 Serverless 框架 Knative 由三个核心组件组成:
  • Build:提供从源码到镜像的通用构建能力
  • Eventing:提供了事件的接入、触发等一整套事件管理的能力
  • Serving:管理 Serverless 工作负载,可以和事件很好的结合并且提供了基于请求驱动的自动扩缩的能力,而且在没有服务需要处理的时候可以缩容到零个实例

Build 组件主要负责从代码仓库获取源码并编译成镜像和推送到镜像仓库。并且所有这些操作都是在 Kubernetes Pod 中进行的。

Eventing 组件针对 Serverless 事件驱动模式做了一套完整的设计。包括外部事件源的接入、事件注册和订阅、以及对事件的过滤等功能。事件模型可以有效的解耦生产者和消费者的依赖关系。生产者可以在消费者启动之前产生事件,消费者也可以在生产者启动之前监听事件

Serving 组件的职责是管理工作负载以对外提供服务。对于 Knative Serving 组件最重要的特性就是自动伸缩的能力,目前伸缩边界支持从 0 到无限大。Serving 还有一个比较重要的功能就是灰度发布能力。

Knative add-on 组件

Knative 支持第三方 add-on 组件。当前支持 GitHub add-on组件,用于提供 GitHub 事件源支持。