Knative(读作 Kay-NAY- tive)是 Kubernetes 容器编排平台的扩展,通过该扩展,无服务器工作负载能够在 Kubernetes 集群上运行,它还提供了工具和实用程序,可以简化在 Kubernetes 中构建、部署和管理容器化应用的过程,在体验上更加接近于 Kubernetes(因此名字中的 K 就代表了“Kubernetes”,加上表示原生的 native)。

与 Kubernetes 一样,Knative 也是开源软件。   它最初是由 Google 与 IBM、Pivotal、Red Hat、SAP 和其他近 50 家公司合作开发的。 Knative 开源项目现在由云原生计算基金会(简称 CNCF)托管。

Kubernetes 可自动执行和调度 容器 的部署、管理和扩展,容器是一种轻量级、可执行的应用组件,这些组件将源代码与在任何环境中运行代码所需的所有操作系统 (OS) 库和依赖项相结合。

容器允许应用组件共享单个操作系统实例的资源,就像 虚拟机 (VM) 允许应用共享单个物理计算机的资源一样。 容器比虚拟机更小、资源效率更高,更适合敏捷和 DevOps 开发方法的增量发布周期,容器已成为现代云原生应用事实上的计算单元。 使用容器的公司还报告了其他益处,包括提高应用质量、更高水平的创新等等。

下载完整报告:企业中的容器 (PDF, 1.4 MB)

随着 云原生 开发日益盛行,容器在组织中激增,Kubernetes 的 容器编排 功能(包括调度、负载平衡、运行状况监控等)使这种激增更容易管理。     然而,Kubernetes 是一个复杂的工具,需要开发人员在 Kubernetes 之外使用不同的工具执行或模板化许多重复性任务——从存储库中提取应用源代码、围绕代码构建和供应容器映像、配置网络连接。           将 Kubernetes 管理的容器整合到自动 持续集成 / 持续交付 (CI/DC) 管道中需要特殊工具和自定义编码。

Knative 通过在 Kubernetes 中自动执行这些任务的工具避免了这种复杂性。 开发人员可以在单个 YAML 清单文件中定义容器的内容和配置,剩下的由 Knative 完成,即创建容器并执行网络编程以设置路由、入口、负载平衡等。    (Knative 还提供了一个命令行界面,即 Knative CLI,使开发人员无需编辑 YAML 文件即可访问 Knative 功能。)

  • 将容器映像放入 Kubernetes(和其他开发人员)可以找到的注册表中。
  • Knative 在其 Build 过程中使用了 Kubernetes API 和其他工具。 开发人员可以创建单个清单(通常是 YAML 文件),指定所有变量——源代码的位置、所需的依赖项等,Knative 使用清单来自动执行容器构建。

    Serving

    Serving 组件将容器作为可扩展的 Knative 服务部署和运行。 Serving 组件提供以下重要功能:

  • 配置 用于定义和维护服务的状态。  它还提供版本管理:每次对配置进行修改,都会创建一个新版本的服务,并保存以前的版本。
  • 智能服务路由 让开发人员能够将流量路由到不同版本的服务。   假设您已经创建了一个新版本的服务,希望在迁移所有用户之前将其部署到一部分用户。 智能服务路由支持将一定比例的用户请求路由到新服务,同时将其余请求路由到以前的版本;随着您对新服务越来越有信心,就可以将更多流量路由到新服务。
  • 自动缩放 。 Knative 既可以将服务扩展到数千个实例,也可以将它们缩小到零——也就是说,根本没有容器的实例,这对于支持无服务器应用至关重要。
  • Knative Serving 从 Kubernetes 生态系统中的另一个应用 Istio 借用了智能服务路由。 Istio 是 Kubernetes 的开源服务网格。  Istio 还提供服务请求的身份验证、服务之间安全通信的自动流量加密,以及有关微服务和无服务器功能操作的详细指标,开发人员和管理员可以使用这些指标来优化基础架构。   (有关 Knative 如何使用 Istio 的更多详细信息,请阅读“ Istio 和 Knative:扩展 Kubernetes 以让开发人员获得新体验 。”)

    Eventing

    Knative 的 Eventing 组件启用不同的事件来触发它们基于容器的服务和功能。  Knative 将这些事件排队并传送到适当的容器,因此无需为该功能编写脚本或实现 中间件 。   Knative 还处理通道(开发人员可以从中选择的事件队列)和总线(将事件传递给容器的消息传递平台)。 这让开发人员能够设置提要,提要可将事件连接到容器要执行的操作。

    Knative 事件源使开发人员可以更轻松地创建与第三方事件生成器的连接。  Knative 的 Eventing 组件将自动创建与事件生成器的连接,并路由生成的事件。 无需了解如何以编程方式执行此操作,所有工作都由 Knative 完成。

    总的来说,对于想要简化容器化应用开发或将容器的使用提升到一个新水平的 Kubernetes 用户,Knative 提供了几个用例。

    简化 Kubernetes。 通过消除重复的构建和配置任务,Knative 让使用 Kubernetes 的开发人员更有效率。  任何努力管理越来越多的 Kubernetes 集群的开发团队都非常适合使用 Knative。

    加速完成无服务器化。 手动设置和管理无服务器环境是一项非常艰巨的任务。  Knative 使组织能够快速设置无服务器工作负载。   就开发人员而言,他们只是在构建一个容器 — Knative 在幕后将它作为无服务器功能运行。

    支持敏捷和 DevOps 生命周期。 通过使开发人员能够更快地创建新的容器和容器版本,Knative 可以更轻松地以小的、快速的、迭代的步骤部署容器化应用,作为敏捷或 DevOps 工作流程的一部分。  Knative 服务还可以轻松集成到自动化 CI/CD 管道中,无需特殊软件或自定义编程。

    让新功能发布变得平滑。 向客户推出新版本可能会暴露可能影响业务流程的软件问题。 Knative 的配置和路由功能让开发人员能够向一部分用户公开新的容器修订版,然后随着开发者不断解决问题而逐渐增加受众,如果需要,也可以快速回滚到旧版本。

    让开发人员专注于编码和创新。 DevOps 可以为开发人员赋能,让他们能够管理自己的环境。 但归根结底,开发人员希望专注于构建无错误的软件和创新的功能,而不是为触发事件或管理容器可扩展性配置消息总线队列。   Knativelets 让开发人员能够花更多时间做他们最擅长的事情。