Knative的服务管理组件Serving是管理应用服务的理想选择,它通过自动缩容为零和基于HTTP负载自动扩展的方式简化了部署流程。Knative平台可管理应用服务的部署、版本、网络、扩缩容。
Knative Serving通过HTTP URL的方式来暴露服务,同时有许多默认的安全设置。在特定的使用场景下,我们可能需要调整这些默认值以满足需求,或者调整服务版本之间的流量分配。由于Knative Serving内置了自动缩容为零的能力,因此称其为Serverless。
01 Serving的架构设计
Knative Serving建立在Kubernetes基础之上,支持Serverless应用和函数的部署与管理。Knative Serving提供了以下中间件原语。
快速部署无服务容器。
自动扩缩容机制,支持缩容到零。
基于Istio组件的服务路由和网络编程。
部署代码的时间点快照以及配置管理。
Knative Serving支持容器化的工作负载。
Function:传统FaaS的函数应用。通过将传统FaaS平台运行时框架与函数应用一起封装到容器中,实现对FaaS函数应用的支持。
微服务:满足单一职责原则、可独立部署升级的服务。Knative非常适合用来部署和管理微服务。
传统应用:主要指传统无状态的单体应用。虽然Knative不是运行传统应用的最佳平台,但支持传统无状态应用的部署。
Knative Serving定义了一套CRD对象。这些对象用于定义和控制Serverless工作负载在集群中的行为,如图1所示。
图1 Knative Serving对象模型
1、服务(Service):service.serving.knative.dev资源自动管理用户工作负载的整个生命周期。它控制路由和配置对象的创建,在服务更新时确保应用有对应的服务路由、配置和一个新的修订版。服务可以被定义为总是把流量路由到最新的修订版或特定修订版。
2、路由(Route):route.serving.knative.dev资源映射一个网络端点到一个或更多修订版。你可以用多种方式来管理流量,包括分流和命名路由。
3、配置(Configuration):configuration.serving.knative.dev 资源维护了部署应用的最终状态。它遵循云原生应用12要素原则,提供了代码和配置分离的机制。每次修改配置会创