0

在构建应用程序时,我有两个限制

  1. 我必须使用微服务架构
  2. 我必须使用 Kubernetes 进行部署

我正在考虑在无服务器中进行部署,因为可扩展性和可用性是我的应用程序的主要驱动力。据我所知,当我使用无服务器部署时,通常我需要从服务提供商那里购买“功能即服务”(FaaS),并且无法管理部署的内部结构。我想知道我是否可以使用 Kubernetes 来控制部署,即使我部署 serverless。

我是这个领域的新手。如果我遗漏任何部分,请指导我。

4

2 回答 2

3

免责声明:我从事该项目

你在这里看过 Knative

K8s 上的无服务器是 Knative 所做的。它通过 CRD 扩展了 Kubernetes,并通过自动缩放、配置/路由管理和不断增长的事件源列表为应用程序/服务开发人员提供了更友好的界面。看一看

于 2019-02-15T21:35:59.030 回答
2

它们都是不同的概念,您需要注意几件事

Kubernetes

Kubernetes 是容器编排器,这意味着您可以大规模管理容器,并且不仅限于部署、回滚、负载平衡等。使用 Kubernetes,您会受到集群(运行的虚拟机/节点)的限制。假设您有 10 个节点,那么 Kubernetes 将管理集群中的所有容器。您可以根据您的要求扩展节点,并且 Kubenertes 将在这些节点内进行管理。这是微服务最著名和最著名的方法。

无服务器 - 功能即服务

这是一个相对较新的概念,不建议仅基于此构建微服务。它周围有很多限制。功能即服务(无服务器)通常用于补充微服务架构。功能应该是基于任务的,即发送电子邮件、处理文件,您不需要一直运行和运行的服务。

无服务器和 Kubernetes

如果你想在自己的环境中创建自己的 serverless 功能,那么另一个概念是使用 Open FaaS 框架。您必须使用 Kubernetes 作为您的函数运行时。这种方法非常不同且非常复杂,您可能不需要它。

扩展和 Kubernetes

没有灵丹妙药,需要权衡取舍。Kubernetes 是微服务的最佳选择,要管理大流量或峰值,您必须以能够处理负载的方式维护集群节点。它还取决于您的云服务提供商。例如,Micorosft Azure 最近引入了虚拟 Kublet。简而言之,当您最初定义集群(例如 5 个节点)并且在任何时候您的系统出现峰值时,虚拟节点(Azure 容器实例)是针对该特定时刻创建的,当流量恢复正常时,这些虚拟节点就会消失离开,您又回到了正常的集群节点(在这种情况下为 5 个)。

同样,您必须访问您想要实现的目标并设计您的解决方案。

希望有帮助!

根据其他答案编辑

无服务器基础架构与在无服务器环境中运行代码 (FaaS) 之间存在差异。

FaaS

当谈到 FaaS(功能即服务)时,您从服务器中抽象出来,可以在无服务器运行时运行您的代码。现在,您可以通过 AWS、Azure 等不同的云提供商托管您的功能,在这种情况下,您不必担心下面的任何服务器,并且峰值由云提供商管理。但是,如果您想在 Kubernetes(由您管理)上执行无服务器,您将使用函数运行时 (FaaS)。您不必担心运行时或框架,只需打包代码并运行它,但您仍然受节点限制,因此要管理尖峰,您必须管理 kubernetes 节点。

Kubernetes Serverless 作为基础架构

这实际上是一个 Kubernetes 无服务器基础架构,通过将虚拟节点附加到您的集群来扩展您的 Kubernetes 集群。现在,如果您有高峰或意外流量,您不必担心您的节点。您的 kubernetes 足够智能,可以将流量扩展到虚拟节点,直到峰值和回落。您可以在此基础架构上运行完全托管的应用程序或 FaaS。微软和 AWS 正在合作虚拟 Kublet 项目来处理这种情况,在这种情况下,您实际上使用 Kubernetes 获得无服务器节点。

因此,在您负责管理节点的任何地方,就基础架构而言,这实际上都不是无服务器的。但同时您可以使用这些节点在这些节点上运行您自己的 FaaS 运行时,以运行不同功能的多个实例。以下 6 分钟的视频可以帮助您更好地理解我可以解释的差异方式。

https://www.youtube.com/watch?v=_GOuP9Q3BqE&list=LLxfaEBq0Fa7eiKokf98ojxA&index=5&t=0s

于 2019-02-15T10:23:30.353 回答