Kubernetes是构建平台的元平台:在过去的几年中,Kubernetes获得了业界的认可,成为现代基础设施的基础。
现代应用程序依赖容器(作为部署单元)。大部分代码打包为容器镜像,并作为pod部署在Kubernetes上。
Kubernetes对扩展和管理部署生命周期提供了极好的支持。它简化了在管理虚拟机时存在的许多挑战。
除了容器之外,另一个重要的趋势是无服务器计算。AWS Lambda、Azure Functions、Google Cloud Functions和IBM Cloud Functions是一些可用于运行代码的商用无服务器环境。它们基于无服务器计算的功能即服务(FaaS)交付模型,开发人员将代码片段直接部署到平台上。
基于Kubernetes的容器即服务(CaaS)和功能即服务(FaaS)在部署和执行代码时遵循不同的方法。FaaS建立在按需执行、每秒计费和事件驱动调用的基础上,而CaaS旨在提供应用程序的规模和可靠性。CaaS可以部署在企业数据中心内,而FaaS仍然局限于公有云。
现代应用程序使用多种模式和实践来实现规模、可靠性、效率和安全性。它们使用CaaS和FaaS的组合来利用云提供商提供的交付模型。考虑到这两种交付模型之间的差距,开发人员将不得不处理极为不同的流程和工作流,这些流程和工作流容易出错且成本高昂。无论代码在哪里执行,开发人员都无法将容器镜像标准化为标准的部署单元。
此外,还需要将无服务器计算带到本地和企业数据中心。它应该基于大多数开发人员使用的、经过验证的基础设施。
Knative
Knative是由谷歌、IBM、Pivotal、红帽和SAP开发的一个开源项目,旨在使Kubernetes成为运行微服务和无服务器应用程序的最佳平台。它也成为了Kubernetes的抽象层,隐藏了封装和部署应用程序所涉及的复杂性。
Knative是在Kubernetes元平台之上构建的一个PaaS,可以让开发人员高效地工作。它公开了两种执行模型:长时间运行的工作负载和事件驱动的代码。
开发人员将Knative包代码作为容器镜像,而不考虑执行模型。这消除了管理两个并行执行环境(CaaS和FaaS)的负担。DevOps可以使用统一的、一致的CI/CD管道来构建和部署代码。
技术上,Knative可以部署在任何Kubernetes环境中,这使得在企业数据中心中公开无服务器环境成为可能。
在幕后,Knative依赖于Istio这样的服务网格来管理流量路由、修订和指标。
以Knative为目标的开发人员不需要理解Kubernetes的复杂性,比如pod、部署、服务和入口。他们将容器镜像打包为一个微服务,并将其部署到Knative,Knative将处理剩下的事。
Knative提供了两个核心构建块——serving和eventing。
Knative Serving
Knative的serving组件为Kubernetes带来了一个熟悉的、类似PaaS的执行模型。它负责公开、托管、扩展和管理打包为容器镜像的微服务的生命周期。
当以Knative为目标时,开发人员定义了一个管理整个部署生命周期的服务。他们还可以定义路由,有选择地将流量发送到同一应用程序的不同版本。配置定义提供了代码和配置之间的清晰分离。修改配置将导致新的修订。最后,Knative serving管理应用程序的修订,这是特定应用程序的代码和配置的时间点快照。
这些资源(服务、路由、配置和修订)在Kubernetes中实现为自定义资源定义(CRD)。它们负责将Knative术语翻译成标准的Kubernetes原语和对象。
Knative serving支持scale-to-zero功能——当一段时间内没有请求时,服务会自动终止。在被终止后,如果服务收到一个新的请求,serving资源将立即启动一个新的pod来处理该请求。诸如超时、冷却周期和最大实例数的参数可以通过与服务相关联的Knative配置来定义。
Knative Eventing
Knative eventing组件提供了必要的基础设施,用于基于后期绑定中连接事件发布者和事件使用者。
与其他事件驱动环境一样,事件产生者和事件使用者彼此独立。产生者可以在有活动事件使用者之前生成事件。任何事件使用者都可以表达对某个事件或某类事件的兴趣,甚至在产生者开始发布这些事件之前。
Knative有一个代理,充当事件产生者和使用者之间的管道。产生者将代理当作一个集线器,将所有消息发布给它。触发器通过代理将使用者绑定到发布者。这种松散耦合的架构使得部署高度可伸缩的eventing基础设施成为可能。
由于可以将多种事件发送到同一代理,因此Trigger中的筛选器配置选项将订阅特定类型的事件。
也可以在不通过代理的情况下直接将使用者与产生者连接起来。
Knative支持将容器、cron作业、Kubernetes控制器等源作为一些事件源。其他源(如Kafka、Google Cloud Pub/Sub和NATs)可以注册为外部事件源,可以通过代理发送交付消息。
开发人员可以编写代码来响应打包为容器镜像并部署为Knative服务的事件。
小结
如果Kubernetes是基础设施,Knative就是堆栈的平台组件。它旨在增强开发人员的体验,交付无服务器执行模型,并在Kubernetes中运行事件驱动的代码。
原文链接:
https://thenewstack.io/knative-brings-event-driven-and-serverless-computing-to-kubernetes/
获取更多开源云技术资讯&大咖交流&免费活动,欢迎添加开源云中文社区小助手,备注开源云!
(长按识别二维码添加)