面向初学者的 Knative Serverless 框架快速指南

已发表: 2022-09-28

无服务器框架在过去几年中很受欢迎,并且已经见证了开发人员越来越多的采用。

尽管如此,基于容器的应用程序已经很流行,Kubernetes 在企业中也是如此。

毫无疑问,Kubernetes 是一个具有巨大潜力的伟大工具。 它的生态系统也在随着各种新工具和最新技术的发展而发展,例如 Knative,它有能力让 Kubernetes 变得更好。

引入 Knative 是为了克服导致失败的情况,并为云平台和云原生编排建立核心标准。

换句话说,与其他基于云的无服务器部署相比,Knative 无服务器框架可以更好地满足公司的需求。

在本指南中,我将讨论 Knative、它的好处、用例、安装过程、工作过程等。

开始了!

什么是 Knative?

Knative 是一个基于 Kubernetes 的无服务器框架,最初由 Google 开发。 它根据公司的要求加载和运行无服务器功能,从而最大限度地减少浪费。 这是一个开源项目,可添加组件以在 Kubernetes 上部署、运行和管理无服务器应用程序。

Knative 无服务器框架的主要目的是管理跨平台编排的标准。 这是通过集成容器创建、自动缩放、事件模型和工作负载管理的功能来实现的。

原生无服务器

此前,除了 Knative 之外,还有多种开源解决方案。 每个解决方案都有其部署方式,由于缺乏标准化实践,这可能导致市场分散。 这意味着如果您需要特定的系统功能,则必须选择特定的提供商。

然而,移民问题开始出现。 并且为了避免此类问题,引入了 Knative serverless 框架。 因此,如果您难以合并任何任务,Knative 可以在基于 Kubernetes 的管道中有效地完成它。

Knative 包含三个部分:

  • Knative Build:它构建容器镜像并从源代码中获取它们。
  • Knative Serving:它使用 Istio 和 Kubernetes 通过分配的基础设施资源连接和部署这些容器镜像。
  • Knative Eventing:它允许用户定义事件触发器,并让用户将事件触发器与容器化函数相关联。

每当 Knative 识别到一个事件时,它都会定义相关的进程以按需运行它。 使用 Knative,无需为工作分配容器节点、集群和 Pod,因为 Knative 仅在给定进程运行时提交托管资源。 通过这种方式,Knative 平衡了无服务器和容器的优势。

Knative 核心理念

让我们讨论 Knative Serverless Framework 的主要概念以及它们与 Knative 原语的关系。

建造

Knative-building 有助于利用和扩展现有 Kubernetes 的原语,允许您从源头运行容器构建。 它启用来自依赖项和存储库的源代码,构建容器映像并注册它们。

活动

事件

该事件可帮助您在松散耦合的事件消费者和生产者之间创建更好的通信,以构建事件驱动的架构。 Knative 将这些事件放在一个队列中,需要在没有开发人员脚本的情况下自动执行。

稍后,这些事件被传递到容器。 然后它将提要发送给事件生产者以执行任务。 这将减少开发人员为建立连接创建代码的工作量。

功能

函数是一个独立的部署单元和一个 Knative 服务服务,就像一个微服务。 它的代码是为执行单个任务而编写的,例如:

  • 处理数据库中的文件
  • 将用户保存到数据库
  • 执行预定的工作

Knative serverless 框架旨在让您有效地开发和部署功能并管理它们。

插件

插件

使用插件轻松扩展或覆盖 Knative 无服务器框架的功能。 每个serverless.yml文件都包含一个包含各种插件的插件属性。

资源

资源是您的函数使用的 Knative 无服务器基础架构组件,包括:

  • AWS SQS 事件源
  • 计划任务(每 5 分钟、10 分钟等运行一次)
  • Kafka 事件源

和更多。

服务

服务就像一个项目。 因此,服务是 Knative 无服务器框架的组织单位。 尽管您可以为一个应用程序提供许多服务,但您可以将服务视为一个项目文件。

您可以在其中定义函数、事件和资源,所有这些都在一个名为serverless.ymlserverless.jsonserverless.js的文件中。 当您使用无服务器框架部署服务时,文件中的所有内容都会立即部署。

服务

供应

Knative-serving 内置在 Istio 和 Kubernetes 中,支持应用程序部署。 它支持快速开发无服务器容器、网络编程和 Istio 组件的自动扩展。 Knative-serving 将容器视为一种可扩展的服务,范围可以从一个实例到多个容器实例。

Knative 的特点

本土特色

让我们讨论一下 Knative serverless 框架的一些特性:

  • Knative 是一个基于 Kubernetes 的无服务器框架,可让您将服务部署到 Kubernetes。
  • 它可以轻松地将 Knative 与支持的环境集成
  • 开发者可以直接借助 Knative 使用 Kubernetes API 来部署 serverless 服务
  • 它使用户能够借助 Knative 的事件系统触发无服务器服务

Knative 是如何工作的?

Knative serverless 框架作为事件导向部分,连接 Istio 和 Kubernetes。 Kubernetes 充当微服务和容器的编排器。 另一方面,Istio 是一种开源网格技术,它将各种组件组合在一起以与用户和他们自己进行交互。

Knative 为用户提供了多个有针对性的组件来执行基本的日常工作。 这些组件在各种应用中反复使用。 开发人员可以使用任何编程语言。 因此,您不需要特定的语言知识,因为 Knative 仅识别容器图像。

Knative 无服务器框架的三个组件是其运作的关键。

构建新容器

建造

构建组件负责构建新容器。 它可以将源代码转换为容器。 可以配置 Knative 以满足特定业务的需求。

首先,Knative 从 Github 等库中拉取源代码。 然后,添加底层依赖项,以便代码有效运行。 然后构建容器镜像并将其放入 Kubernetes 平台可以访问的文件中。

该容器可供使用 Kubernetes 和 Knative 的开发人员使用。 因此,只要知道代码的来源,就可以构建容器。

服务或运行平台

服务组件负责平台的运行。 它涉及:

  • 配置:配置在管理服务的多个版本时是确定的。 每次部署容器的新功能时,Knative 都会保存现有版本并创建一个具有最新更改和功能的新版本。 此外,Knative 定义了服务的状态。
  • 自动缩放:为了更好地工作无服务器容器,您必须能够向上或向下自动缩放容器。 如果需要,Knative 可以自动将服务扩展到许多。
  • 智能服务路由:是Knative工作机制的重要组成部分。 它允许开发人员将流量和流量引导到不同的现有微服务版本。 在引入新特性和蓝绿部署策略的同时,可以使用智能业务路由。

它允许您将一小部分用户暴露给最近的测试和版本,并逐渐将大量流量路由到新版本。

事件定义函数

黄昏

Knative 的事件组件负责描述 Knative 的功能。 它允许根据事件定义容器的运行。 不同的事件触发容器的特定功能。

开发人员可以定义事件触发器和相关的容器,让 Knative 完成它的工作。 Knative 处理事件列表和事件的传递。

Knative 的好处

Knative 提供路由管理、分阶段发布、服务连接等服务。 它拥有一个庞大的社区。 让我们讨论一下 Knative 如何影响公司采用这项技术。

  • 与其他解决方案不同的是,Knative 有标准事件,并且兼容 FaaS 解决方案。 它提供了一个 CloudEvent 标准框架,有助于设计无服务器架构。
  • 虽然 Knative 不是 PaaS,但它允许您使用无服务器编排平台创建无服务器 PaaS。
  • Knative 拥有成熟成熟的无服务器设计。
  • 它支持跨平台,并为您提供云提供商之间的通用标准,以消除将供应商与特定解决方案绑定的机会。
跨平台
  • Knative 提供了一个灵活的框架。
  • 它支持按比例分阶段发布。
  • 您可以在容器化环境中体验无服务器生态系统。
  • Knative 消除了管理和工具的可靠性。
  • 您可以通过实施 Kubernetes 快速迁移到与 Knative 集成的其他云提供商。
  • 它提供了一个请求驱动的计算模型。
  • 它允许您将工作流作为服务进行管理。
  • 使用 Knative,您可以处理 IoT 数据、运行可访问性检查并验证安全组的配置。
  • 它允许开发人员专注于编码并让他们快速创建迭代代码。
  • 它确保开发人员将合并新版本。
  • Knative 的基于事件的模型有助于实现设计,包括订阅、连接到外部系统和注册。

Knative 的挑战(以及一些解决方案)

效率挑战

支持适当应用程序的 Knative 框架以最低成本提供更好的性能。 但是,应用程序的不当组合可能会导致更高的成本和未充分利用的容器资源。 这可能会导致应用程序性能不佳,这是 Knative 无服务器部署的最大挑战。

效率挑战

因此,大小不合适的资源池或错误的应用程序可能会破坏 Knative 的许多优势。

您可以通过执行测试来验证资源数量和 Knative 上的应用程序组合来克服这一挑战。 通过调整每个事件的平均负载和最大负载来衡量事件负载,并估计资源的总消耗。 对多个应用程序重复此操作以创建和运行试验配置以验证估计值。

功能挑战

Knative 的功能挑战可能是:

  • Knative 依赖于适合无状态模型的函数。 这意味着没有数据存储在组件本身中。 功能的开发不是一个困难的阶段,但它需要稍微改变方法,这意味着一个错误可能会破坏软件的性能。
  • 业务数据由多个步骤事务组成,无状态函数跨所有步骤维护上下文。 Knative 没有公共云无服务器工具可以做到的那种能力。

定期监控和修复问题可以帮助您保持良好的表现。

运营挑战

运营挑战

与公共云中的无服务器产品相比,Knative 存在运营挑战。 管理员不使用公共云控制底层服务器。 但是,他们需要管理服务器以及 Kubernetes、容器、Knative 和 Istio 本身。

对于已经致力于 Kubernetes 和容器的公司,Knative 最大限度地扩展了运营和开发的复杂性。 那些致力于服务网格和微服务的人会发现 Knative 是一个自然的扩展。

Knative 的用例

原生的用例

对于会产生可变数量的事件保持在或超过规定时间限制的应用程序,Knative 最适合它们。 Knative serverless 框架的具体用例包括:

  • 网站测试和验证
  • 应用监控
  • 物联网
  • 网络监控
  • 移动应用前端流程
  • 敏捷和 DevOps 生命周期
  • 新功能推出
  • 精简 Kubernetes

事件导向是必不可少的。 如果 IT 团队无法将应用程序想象为一系列事件而不是事务,那么出于功能和效率的原因,Knative 可能不是一个好的选择。

Knative 的先决条件和安装

正如我们在上面的部分中看到的,Knative 是一组组件,例如在服务网格和工作负载编排集群上运行的事件和服务。 为了简单的操作,我们需要安装一些命令行实用程序。 因此,我们需要一些依赖项来确保我们可以继续安装。

先决条件

先决条件

安装 Kubernetes 有多种选择。 Docker Desktop 可以实现一个简单的 Kubernetes 集群,服务于各种目的。 简单的方法是在 Docker 中使用 Kubernetes 来运行 Kubernetes 集群以及 Docker 容器节点。 使用集群的便捷方式是使用 Knative 命令行工具。

Knative CLI 提供了一个简单快捷的界面来创建其资源。 它有助于完成复杂的任务,例如流量拆分和自动缩放。 方便的方法是从 GitHub 页面下载兼容的二进制文件。

安装

一旦我们具备所有先决条件,我们就可以继续安装组件。 对于开发环境,有一个快速入门插件。 该插件有助于使用 Knative 客户端安装本地 Knative 集群。 您可以从官方发布页面下载快速入门插件。

结论:Knative 的未来

Knative 通过提供应用程序的自动扩展取代了无服务器计算。 它对互操作性和模块化系统产生了重大影响。

未来,Knative 有望弥补目前的不足,成为运行 serverless 架构最高效的技术之一。

通过查看 Knative 技术相对于无服务器替代方案的优势,Knative 技术对开发人员的影响更大。 Knative 将通过取代构建和维护 Kubernetes 扩展的需要来帮助您节省大量时间。 开发人员对 Knative 技术非常满意,因为它易于使用,是无服务器解决方案的绝佳替代品。

因此,如果您想在您的云工作流程中最大限度地发挥 Kubernetes 环境的力量,请采用 Knative 技术并亲自见证其优势。