Knative 架构解析
CNCF 针对无服务器计算的定义为:无服务器计算是指一种构建和运行不需要服务器管理的应用程序的理念。它描述了一个更细粒度的部署模型,即将以一个或多个功能方式提供的应用程序上载到平台,然后执行、扩缩容及计费,以响应当前所需的确切要求。
一个理想的无服务器平台至少需要以下几个方面:
构建和运行应用程序,需要一个用来构建和运行应用程序的平台。是的,Kubernetes 就是当前最为合适的新应用程序服务器。
没有服务器管理,不需要专用的应用程序服务器管理。在 Kubernetes 之上,所有应用程序都通过 Kubernetes Deployment 和 Service 进行容器化和部署。
根据确切的需求执行、扩缩容及计费,根据业务的需求配置以及扩容缩容的比率,Kubernetes 提供了自动扩容与缩容能力,并可以根据使用量计费。
毫无疑问,Kubernetes 目前无法为无服务器平台提供所有的功能。在 Kubernetes 基础之上,无服务器技术栈需要以下原语能力的补充:
Build:需要一种“源代码到容器”的机制,来简化部署。
Routing:灵活简便的路由能力;支持各种灰度发布的能力。
Event Building:可插拔的事件源接入能力。
Auto Scaling:灵活的自动扩缩容能力,支持自动收缩,从 0 个到 1 个实例,从 1 个到 N 个实例,再回到 0 个实例。
Observability:提供可观察性能力,具备完善的跟踪、监控和日志记录能力。
Invocation:可插拔的调用器,让开发人员可以使用简单、符合已有语言习惯的交付代码逻辑。再往上,就是无服务器不同产品的能力,它可以复用 Kubernetes 的基础能力和上述无服务器原语能力,而不需要去重复发明轮子,同时也保证了可移植性。
Knative 是构建多种无服务器产品的基础设施,并且会确保它们之间编程模型的可移植性。Knative 是建立在 Kubernetes 和 Istio 平台之上的,使用 Kubernetes 提供的容器管理能力(Deployment、Service 和 pod 等),以及 Istio 提供的网络管理功能(VirtualService、DestinationRule 和 IngressGateway 等)。
Knative 项目下的每个组件都尝试使用一些常见的模式,并提供一套业界验证过的基于 Kubernetes 的最佳实践。Knative 组件专注于解决许多烦琐但有挑战的一些任务,例如:如何快速部署弹性容器,以及如下操作:
在 Kubernetes 上如何实现从源代码到服务 URL 的编排流程。
使用蓝/绿部署实现流量的路由和管理。
根据需求自动扩缩容以及调整工作负载大小。
将运行服务绑定到事件生态系统中。
Knative 的开发人员可以使用熟悉的习语、语言和框架来部署任何工作负载,例如函数功能(Function)、应用程序(Application)或容器(Container)。Knative 负责构建、部署和运行无服务器化的工作负载,包含三个模块:Build、Eventing、Serving。
这三个模块的功能和分工具体描述如下:
Build 模块负责将源代码构建成容器,它基于 Google 的容器构建服务,提供了一个可插拔的构建模型,可扩展实现多种构建方法,Buildpacks 就是 Pivotal 提供的一种构建容器模式。
Eventing 模块实现函数发布和订阅事件流的能力,函数遵循 CloudEvents 规范来发送和接收事件,它也提供了可插拔的事件源和消息代理模型,轻松支持多种消息代理服务,如 Kafka、Google Pub/Sub、RabbitMQ 等。
Serving 模块负责部署和运行无服务器化的函数负载,它支持的特性包括:函数的运行可由 HTTP 或 Message 请求驱动、弹性伸缩可至零,并可利用 Istio 实现集群内的路由分发以及进入集群的入口连接。
未来,通过 Knative 可以完成跨云单一平台的理想,任何支持 Kubernetes 地方,企业都可以在其间自由移动工作负载,选择在最适合的地方执行任务,这为企业提供了极大的控制灵活性,可以依照需求调整系统部署。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/96178b11ead220e7d9021c732】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论