11.1.1 Knative>Kubernetes+Istio

Knative(发音为kay-nay-tiv)扩展了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实现集群内的路由分发以及进入集群的入口连接。

虽然Istio目前release版本为1.x,很多功能正在不断完善中,但是它作为集群基础设施通用网络层的地位已经开始显露,相信在未来的发展中其接受度会越来越大,并逐渐巩固自己的地位。

Istio在集群的网络管理方面非常优秀(智能路由、负载均衡、蓝绿发布等),基于Istio可以让Knative不用重复工作就能直接使用Istio提供的网络通用功能,也符合目前软件行业不要重复造轮子的理念。

诚然,Knative下面的这两个平台Kubernetes和Istio都非常复杂。这两个平台的理解、构建、运维本身就很复杂,如今又加上Knative平台,需要了解的概念都有几十个,更不要提落地过程中会遇到的各种问题。当然,Kubernetes和Istio这些底层平台可以交给云供应商来维护,例如阿里云容器Kubernetes服务已经提供了Istio的整合,在此基础之上也集成了对Knative的支持。

未来,通过Knative可以完成跨云单一平台的理想,任何支持Kubernetes地方,企业都可以在其间自由移动工作负载,选择在最适合的地方执行任务,这为企业提供了极大的控制灵活性,可以依照需求调整系统部署。