【问题标题】:Should Node.js and MongoDB be in different pods?Node.js 和 MongoDB 应该在不同的 pod 中吗?
【发布时间】:2017-12-03 22:47:38
【问题描述】:

我正在尝试托管一个连接到 MongoDB 的简单 Node.js 应用程序,我在网上查找,我找到了 2 种不同的方法和一些指南:

  1. 不同的豆荚:

    • Example 来自 Kubernetes 官方文档。
    • Example 来自 Google Cloud Platform 官方文档。
  2. 同一个吊舱:

    • Example 来自 IBM 官方文档。

这让我有点困惑,实现这一目标的最佳做法是什么?

【问题讨论】:

    标签: node.js docker kubernetes google-cloud-platform ibm-cloud


    【解决方案1】:

    您应该将它们放在不同的 pod 中。

    在不同的 pod 中,您可以将 Web 应用程序部分的副本数量扩展到您需要的任意数量的实例,并且您仍然拥有一个 MongoDB 实例。

    如果您将它们放在同一个 pod 中,您将无法扩展到多个实例,因为每个副本都有自己的 MongoDB 实例,因此数据是分开的。如果从 Web 应用程序对 MongoDB 进行数据更新,则会导致各种问题,因为后续请求可能会遇到不同的实例,因此会看到不同的数据。

    【讨论】:

    • 这是有道理的。那么您能否澄清一下,我链接的第二个教程的意义何在,以及“MongoDB StatefulSets/ReplicaSets”这个想法的意义何在? blog.kubernetes.io/2017/01/… 听起来我也应该复制我的 MongoDB?
    • 如何扩展数据库绝非创建更多实例那么简单。如果您有多个数据库实例与持久卷中的相同数据文件通信,它们通常只会破坏彼此的数据。扩展数据库比增加副本需要更多的工作。因此,没有充分的理由将数据库与 Web 应用程序放在同一个 pod 中。
    • 因此对于 Kubernetes 部署对象,如果是数据库,您总是希望拥有单个实例并使用重新创建部署策略。不要使用滚动更新。如果是无状态的,您可以将 RollingUpdate 用于 Web 应用程序前端,但如果它附加了持久卷,则根据持久卷的类型也需要小心。
    • 在该示例中,尽管您会看到它并不像扩大实例数量那么简单。每个 MongoDB 实例都被告知其他实例,以便它们可以同步数据。我没有详细查看示例,但我怀疑它们只是共享相同的持久卷,否则就像孤立地开始一样。
    • 这就是我所说的需要以特殊方式扩展数据库的意思。
    猜你喜欢
    • 2021-03-27
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2018-08-30
    • 2020-01-21
    • 2013-05-06
    • 2019-10-27
    • 2019-11-27
    相关资源
    最近更新 更多