Kubernetes 在一个pod中运行同一映像的多个容器与在多个节点上运行多个pod相比

Kubernetes 在一个pod中运行同一映像的多个容器与在多个节点上运行多个pod相比,kubernetes,openshift,Kubernetes,Openshift,我有一个非常经典的web应用程序,我正在OpenShift/Kubernetes上运行,它由一个网页容器和一个数据库容器组成。我现在正在研究一些缩放选项,并试图了解这3种场景的区别: 在单个节点上的单个pod内的单个数据库容器实例旁边运行多个web容器实例 在一个节点上运行多个pod和一个web容器实例,一个pod和一个数据库容器实例(使用某种关联) 与2相同,但在多个节点上(使用一些反亲和力) 每种场景如何影响资源消耗和网络开销,以及每种场景在多大程度上允许您扩展? 有没有我认为可能也有效的选

我有一个非常经典的web应用程序,我正在OpenShift/Kubernetes上运行,它由一个网页容器和一个数据库容器组成。我现在正在研究一些缩放选项,并试图了解这3种场景的区别:

  • 在单个节点上的单个pod内的单个数据库容器实例旁边运行多个web容器实例
  • 在一个节点上运行多个pod和一个web容器实例,一个pod和一个数据库容器实例(使用某种关联)
  • 与2相同,但在多个节点上(使用一些反亲和力)
  • 每种场景如何影响资源消耗和网络开销,以及每种场景在多大程度上允许您扩展?
    有没有我认为可能也有效的选项?

    首先,您可以跳过场景1,因为Kubernetes不是这样做的。通常,每个吊舱运行一个容器,除了紧密耦合的侧车容器可能与同一吊舱中的主容器一起运行

    场景2和场景3是处理Kubernetes的正确方法。对于web应用程序和数据库(数据库可能作为一个数据库运行),您有一个单独的数据库,每个数据库都由数量可变的pod组成。每个Pod包含一个对应应用程序的容器。这允许您独立地扩展两个层(web应用程序和数据库)

    在大多数情况下,不同的pod是在同一个节点上运行,还是在不同的节点上运行,您不会太担心。Kubernetes设计用于自动、动态地将Pod分配给节点,并且Pod运行在哪个节点上对该Pod中运行的应用程序以及该应用程序的客户端是透明的。Kubernetes还可以随时将Pod重新安排到不同的节点

    但是,您可以影响Kubernetes调度程序的决策(使用,)。在这种情况下,您通常希望部署的吊舱分布在多个节点上,以避免节点成为单点故障。将一个应用程序的所有pod限制在一个节点上并不常见,除非在非常特定的用例中可能需要这样做


    因此,总而言之,场景3是一个不错的选择,您通常可以免费(按概率)获得跨节点的POD分布,但您可以通过强制执行。

    非常好的总结,谢谢!还有一个小问题,比如在不同节点上运行时,web容器和数据库容器之间的网络开销,比如说我正在进行大量的数据库调用。在同一个节点上运行会更快,但更脆弱,对吗?是的,如果POD在不同的节点上,请求将通过节点之间的网络路由。因此,它会产生一些网络开销。如果Pod位于同一节点上,则请求永远不会到达物理网络,而只是在节点内从一个Pod的虚拟网络接口路由到另一个Pod的虚拟网络接口。所以,它可能更快。缺点是,如果该节点失败,您将丢失所有的pod。