Kubernetes - 是否可以无服务器部署容器

Kubernetes - Is it possible to deploy containers serverless

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

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

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

我是这方面的新手。如果我遗漏了任何部分,请让我得到指导。

它们是不同的概念,您需要了解一些事情

Kubernetes

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

无服务器 - 作为服务运行

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

无服务器和 Kubernetes

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

扩展和 Kubernetes

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

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

希望对您有所帮助!

根据其他答案编辑

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

FaaS

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

Kubernetes 无服务器作为基础设施

这实际上是一个 Kubernetes 无服务器基础设施,您的 Kubernetes 集群通过将虚拟节点附加到您的集群来扩展。现在,如果您遇到高峰或意外流量,您不必担心您的节点。您的 kubernetes 足够智能,可以将流量扩展到虚拟节点,直到达到峰值并收缩。您可以 运行 在此基础架构上完全托管应用程序或 FaaS。 Microsoft 和 AWS 正在合作 Virtual Kublet Project 来处理这种实际使用 Kubernetes 获得无服务器节点的场景。

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

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

免责声明:我在那个项目上工作

你看过 Knative here

k8s 上的无服务器非常类似于 Knative 所做的。它通过 CRD 扩展 Kubernetes,并提供更多 app/service 开发人员友好的界面,具有自动缩放、config/routes 管理和不断增加的事件源列表。看看