Kubernetes-是否可以在无服务器的情况下部署容器

时间:2019-02-15 07:24:30

标签: kubernetes architecture containers microservices serverless-architecture

在构建应用程序时,我有两个约束

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

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

我是这个领域的新手。如果我缺少任何部分,请让我得到指导。

2 个答案:

答案 0 :(得分:3)

免责声明:我正在从事该项目

您看过Knative here

k8s上的无服务器是Knative的主要功能。它通过CRD扩展了Kubernetes,并通过自动缩放,配置/路由管理以及越来越多的事件源提供了更多的应用程序/服务开发人员友好界面。看看

答案 1 :(得分:2)

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

Kubernetes

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

无服务器-充当服务

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

无服务器和Kubernetes

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

扩展和Kubernetes

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

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

希望有帮助!

根据其他答案进行编辑

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

FaaS

涉及FaaS(功能即服务)时,您是从服务器中抽象出来的,可以在无服务器运行时上运行代码。现在,您可以由不同的云提供商(例如AWS,Azure等)托管功能,在这种情况下,您不必担心下面的任何服务器,高峰由云提供商管理。但是,如果您想在Kubernetes上进行无服务器(由您管理),则可以使用功能运行时(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