将完整的应用程序放在一个kubernetes容器中是否很好?

时间:2019-04-12 15:53:30

标签: kubernetes kubernetes-pod

我有一个由前端,后端和数据库组成的应用程序。 目前,该应用程序正在kubernetes集群上运行。 前端,后端和数据库位于通过服务进行通信的自己的Pod中。

我的考虑是将所有这些应用程序部分(前端,后端和数据库)放在一个Pod中,这样我就可以制作一张Helm图表,对于每个新客户,我只需要更改值即可。

问题是,如果这是一个好的解决方案,不建议这样做。

2 个答案:

答案 0 :(得分:4)

不,这是一个坏主意,这就是原因:

  • 首先,数据库是一个有状态的容器,当您更新任何组件时,您必须放下POD中的所有容器,比方说这是一个小的前端更新,它将放下所有内容,应用程序将不可用。
  • 假设您有这个Pod的多个副本来避免上述问题,这将很难扩展应用程序,因为您可能需要缩放每个容器的副本,而您可能只需要FE或BE即可。扩展,还会创建数据库的多个副本,具体取决于它如何复制数据,这会使它变慢。如果发生故障,还必须考虑备份和还原数据。
  • 在上面的同一示例中,即使您不需要,多个副本也会使POD消耗过多的资源。

如果您只是想在不进行大量自定义的情况下部署资源,则可以将其部署到单独的命名空间中,并添加策略以防止一个命名空间相互通信,并在其中部署原始yaml,仅注意使用配置映射进行加载每种都有不同的配置。

如果只需要一个简单的模板和部署解决方案,则可以使用kustomize

如果您希望获得Helm提供的复杂设置和管理功能,则可以定义图表中的所有广告连播,例如Prometheus图表。

答案 1 :(得分:0)

您可以创建由多个Pod或部署组成的Helm图表,因此您无需仅为此目的将它们放在一个Pod中。我也不建议这样做,例如,数据库很可能更适合放在StatefulSet中。