什么是 Knative?

照片摄于苏格兰福尔柯克轮

什么是 Knative?

Knative 使无服务器工作负载能够在 Kubernetes 集群上运行。它还能让使用 Kubernetes 构建和编排容器变得更快捷、更轻松。

Knative(发音为 Kay-NAY-tive)是 Kubernetes 容器编排平台的扩展。它提供的工具和实用程序使得在 Kubernetes 中构建、部署和管理容器化应用程序成为一种更简单、更“Kubernetes 原生”的体验(它也由此而得名:代表“Kubernetes”的“K”加上表示“原生”的“native”)。

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

高速公路鸟瞰图

在云端保持清醒头脑 


获取每周 Think 时事通讯,了解有关在 AI 时代优化多云设置的专家指导。

为什么 Kubernetes 需要 Knative

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

容器使应用程序组件可以共享单个操作系统实例的资源,这种共享与虚拟机 (VM) 使应用程序可以共享单个物理计算机的资源的方式大致相同。由于具有比虚拟机更小的体量和更高的资源效率,并且更适合敏捷和 DevOps 开发运维开发方法的增量发布周期,容器已成为现代云原生应用程序事实上的计算单元。使用容器的公司还报告了其他优点,包括提高应用程序质量和创新水平等:

随着云原生开发的盛行和容器在组织中的使用激增,Kubernetes 的容器编排功能(包括调度、负载均衡、运行状况监控等)大幅降低了对激增的容器进行管理的难度。然而,Kubernetes 是一种复杂的工具,需要开发人员执行或模板化许多重复性任务,例如从存储库中提取应用程序源代码、围绕代码构建和配置容器映像以及使用不同工具配置 Kubernetes 外部的网络连接。将 Kubernetes 管理的容器纳入自动化的持续集成/持续交付 (CI/DC) 管道需要特殊的工具和自定义编码。

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

AI 学院

利用混合云实现 AI 就绪

本课程由 IBM 资深思想领袖带领,旨在帮助企业领导者获得所需的知识,以便划分可以推动增长的 AI 投资的优先级。

将容器变为无服务器

无服务器计算是一种云原生执行模型,使应用程序更易于开发且更具成本效益。无服务器计算模型

  • 按需配置计算资源,根据请求以透明的方式进行扩展,并在不再发出请求时缩减到零;

  • 将所有基础设施管理任务(扩展、调度、修补、配置等)转移给云供应商,使开发人员能够将时间和精力集中到开发和创新上;并且

  • 使云客户只需为使用的资源付费,而无需为空闲容量付费。

就其本身而言,如果没有将 Kubernetes 与特定云供应商的无服务器平台集成的专用软件,Kubernetes 将无法运行无服务器应用程序。Knative 通过将代码抽象出来并处理网络路由、事件触发器和自动扩展,使任何容器都能够在任何 Kubernetes 集群上作为无服务器工作负载运行,无论该容器是围绕无服务器函数还是其他应用程序代码(例如微服务)构建的。

Knative 的工作原理:Knative 组件

Knative 位于 Kubernetes 之上,并增加了三个主要组件或基本组成部分:Build、Serving 和 Eventing。

构建

Knative Build 组件自动将源代码转换为容器。该过程通常涉及多个步骤,其中包括:

  • 从代码存储库(如 GitHub)提取源代码
  • 安装代码运行所需的底层依赖项,例如环境变量和软件库
  • 构建容器映像
  • 将容器映像放入一个注册表中,Kubernetes 和其他开发人员可在其中找到该容器映像。

Knative 使用 Kubernetes API 和其他工具来完成构建过程。开发人员可创建单个清单(通常是 YAML 文件)来指定所有变量(源代码的位置、所需的依赖项等),然后由 Knative 使用该清单来自动构建容器。

服务

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

  • 配置功能可定义和维护服务的状态。它还提供版本管理:每次对配置进行修改都会创建一个新的服务版本,并保存先前的版本。

  • 智能服务路由功能让开发人员可以将流量路由到不同版本的服务。假设您已创建新的服务版本,但希望在迁移所有用户之前将其部署给部分用户。借助智能服务路由功能,您就可以将一定比例的用户请求路由到新服务,而将其余用户请求路由到某个先前的版本;随着您对新服务越来越有信心,您可以将更多流量路由到新服务。

  • 自动扩展。Knative 可以将服务扩展到成千上万个实例,也可以将服务缩减到零,即完全没有容器实例,这种能力对支持无服务器应用程序至关重要。

Knative Serving 借用了 Kubernetes 生态系统中另一个应用程序 Istio 的智能服务路由功能。Istio 是 Kubernetes 的开源服务网格,还提供对服务请求的身份验证、对服务间安全通信的自动流量加密、有关微服务和无服务器函数运行情况的详细指标,以及供开发人员和管理员优化基础设施的其他工具。

事件处理

Knative 的 Eventing 组件使不同的事件能够触发基于容器的相应服务和功能。Knative 会将这些事件排队并传递到相应的容器,因此无需为该功能编写脚本或实现中间件。Knative 还负责处理通道(开发人员可从中选择事件的事件队列)和总线(向容器传递事件的消息传递平台)。此外,开发人员还能借助它来设置馈送,将事件与操作关联以便事件的容器执行。

Knative 事件源使开发人员可以更轻松地创建与第三方事件生产者的关联。Knative Eventing 自动创建与事件生产者的关联并路由生成的事件。无需弄清楚如何以编程方式来完成此操作,Knative 会完成所有工作。

Knative 用例

概括而言,Knative 支持多种用例,适合于希望简化容器化应用程序开发或想将容器使用提升到新水平的 Kubernetes 用户。

简化 Kubernetes。通过免除重复的构建和配置任务,Knative 可帮助使用 Kubernetes 的开发人员提高效率。对于难以管理越来越多的 Kubernetes 集群的任何开发团队而言,Knative 都是他们的理想选择。

加速无服务器之旅。无服务器环境的设置和管理若采用手动方式进行,可能是一项艰巨的任务。Knative 使组织能够快速设置无服务器工作负载。就开发人员而言,他们只需要构建容器,Knative 会在后台将该容器作为无服务器函数运行。

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

顺利推出新功能。向客户推出新版本可能会暴露可能影响业务流程的软件问题。借助 Knative 的配置和路由功能,开发人员可以向部分用户群公开新的容器修订版。然后,他们可以随着时间的推移逐渐解决问题并增加受众,也可以在必要的情况下快速回滚到旧版本。

让开发人员专注于编码和创新。DevOps 开发运维可赋予开发人员自行管理环境的能力。但归根结底,开发人员还是需要将精力集中于构建无错误的软件和创新的新功能,而不是配置用于事件触发的消息总线队列或管理容器可扩展性。Knative 让开发人员可以将更多时间投入到最擅长的工作上。

相关解决方案
IBM Red Hat OpenShift

Red Hat OpenShift on IBM Cloud 是一个完全托管的 OpenShift 容器平台 (OCP)。

探索 Red Hat OpenShift
容器解决方案

容器解决方案能够运行和扩展容器化工作负载,并实现安全性、开源创新和快速部署。

深入了解容器
云咨询服务

利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。

云服务
采取后续步骤

使用 IBM 的容器解决方案实现基础架构现代化。通过使用 IBM 的综合容器平台,跨环境灵活、安全、高效地运行、扩展和管理容器化工作负载。

深入了解容器解决方案 创建免费 IBM Cloud 帐户