下面会用6篇blog的篇幅尽可能的阐述Knative的架构原理,及源码分析。
首先介绍一些Knative中的概念,比如:
- Configuration(配置)
- Revision(修订版本)
- Route(路由)
- Service(服务)
Configuration(配置)和 Revision(修订版本)
Knative中的Serving组件开始于 Configuration 。我们在 Configuration 中为部署定义所需的状态。最小化 Configuration 至少包括一个配置名称和一个要部署容器镜像的引用。在 Knative 中,定义的引用为 Revision。Revision 代表一个不变的,某一时刻的代码和 Configuration 的快照。每个 Revision 引用一个特定的容器镜像和运行它所需要的任何特定对象(例如环境变量和卷)。然而,您不必显式创建 Revision。由于 Revision 是不变的,它们从不会被改变和删除,相反,当您修改 Configuration 的时候,Knative 会创建一个 Revision。这允许一个 Configuration 既反映工作负载的当前状态,同时也维护一个它自己的历史 Revision 列表。
以下是一个部署完成的Configuration实例:
下面是部署完成的Revision实例:
Route(路由)
Knative 中的 Route 提供了一种将流量路由到正在运行的代码的机制。它将一个命名的,HTTP 可寻址端点映射到一个或者多个 Revision。Configuration 本身并不定义 Route。
下面是一个部署完成的router实例,
,这个路由的意思是100%的流量都发送到
configurationName=helloworld-go的Configuration的lastestReadyRevision上
Service(服务)
在 Knative 中,Service 管理工作负载的整个生命周期。包括部署、路由和回滚。(不要将 Knative Service 和 Kubernetes Service 混淆。它们是不同的资源。) Knative Service 控制一系列组成软件的 Route 和 Configuration。Knative Service 可以被看作是一段代码 —— 您正在部署的应用或者函数。
一个 Service 小心确保一个应用有一个 Route、一个 Configuation,以及为每次 Service 更新产生的一个新 Revision。当创建一个 Service 时,您没有特别定义一个 Route,Knative 创建一个发送流量到最新 Revision 的路由。您可以选择一个特定的 Revision 以路由流量到该 Revision。
下面是部署好的service,
在status描述中明确了service追踪的Revision