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 与特定云提供商的无服务器平台集成的专用软件,Kubernetes 就无法独自运行无服务器应用。 Knative 使任何容器都能够在任何 Kubernetes 集群上作为无服务器工作负载运行——无论容器是围绕无服务器功能还是其他应用代码(例如,微服务)构建的,这通过抽象代码并处理网络路由、事件触发器和自动缩放来实现。
Knative 位于 Kubernetes 之上,并添加了三个主要组件,即原语:Build、Serving 和 Eventing。
Knative Build 组件可自动执行将源代码转换为容器的过程。 此过程通常涉及多个步骤,包括:
Knative 在其 Build 过程中使用了 Kubernetes API 和其他工具。 开发人员可以创建单个清单(通常是 YAML 文件),指定所有变量——源代码的位置、所需的依赖项等,Knative 使用清单来自动执行容器构建。
Serving 组件将容器作为可扩展的 Knative 服务部署和运行。 Serving 组件提供以下重要功能:
Knative Serving 从 Kubernetes 生态系统中的另一个应用 Istio 借用了智能服务路由。 Istio 是 Kubernetes 的开源服务网格。 Istio 还提供服务请求的身份验证、服务之间安全通信的自动流量加密,以及有关微服务和无服务器功能操作的详细指标,开发人员和管理员可以使用这些指标来优化基础架构。 (有关 Knative 如何使用 Istio 的更多详细信息,请阅读“Istio 和 Knative:扩展 Kubernetes 以让开发人员获得新体验。”)
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 让开发人员能够花更多时间做他们最擅长的事情。
借助 Red Hat OpenShift on IBM Cloud,OpenShift 开发人员可以快速安全地在 Kubernetes 集群中容器化和部署企业工作负载。
使用一组通用云服务(包括工具链、数据库和 AI),跨任何云供应商的本地、边缘计算和公有云环境一致地部署和运行应用。
IBM Cloud Code Engine 是一个完全管理的无服务器平台,支持在完全管理的容器运行时中运行容器、应用代码或批处理作业。