在Kubernetes上部署数据驱动的Web应用程序

时间:2018-11-12 23:36:16

标签: docker nginx kubernetes

当前,我正在一个Docker镜像中运行一个数据驱动的Web应用程序,并将nginx,应用程序服务器和Postgres捆绑在一起。它只是在带有Docker的VM上运行。

我需要将整个堆栈,所有东西全部迁移到Kubernetes,并寻找推荐的标准云原生部署方式。

  • 我知道我需要将nginx作为单独的部署或pod运行,并将应用程序服务器作为单独的pod /部署运行。

  • 我需要为数据库做出选择,是应该使用在Kubernetes外部运行的外部数据库服务,还是应该在Kubernetes上将自己的Postgres作为有状态集运行。

  • 如果我使用外部服务,则在升级应用程序时需要担心,并确保没有版本不匹配,并且外部服务的灵活性可能会降低,因为我无法控制它。通过Kubernetes自行部署或使用外部数据库的推荐使用数据库的方式是什么?

  • 关于nginx,我应该只使用自己的nginx作为单独的部署运行,还是应该使用入口控制器?与nginx相比,使用ingress可能有什么优势,尽管nginx作为部署可以自动缩放,而ingress控制器却不能自动缩放?

在这里,我的问题的全部要点是,在每个步骤中,我都希望避免将堆栈部署到Kubernetes的任何反模式,这样我以后就不必再费劲了。

1 个答案:

答案 0 :(得分:1)

  

如果我使用外部服务,则在升级应用程序时需要担心,并确保没有版本不匹配,并且外部服务的灵活性可能会降低,因为我无法控制它。通过Kubernetes自行部署或使用外部数据库的推荐使用数据库的方式是什么?

严格来说,这是基于问题的观点。如果您不太担心成本,我会使用外部数据库,可能是云提供商数据库,例如Amazon RDS或GCP的Cloud SQL。 IMO,您将在外部减轻数据库管理的负担,并且在出现问题的情况下更易于调试。另一个方面是,您可以利用诸如Amazon Aurora之类具有更好性能/可伸缩性的东西。

如果您担心成本,那么可以使用in Kubernetes解决方案,该解决方案将使您为数据库,nginx和应用程序容器使用同一组机器。

  

关于nginx,我应该只使用自己的nginx作为单独的部署运行,还是应该使用Ingress Controller?与nginx相比,使用ingress可能有什么优势,尽管nginx作为部署可以在入口控制器无法自动缩放的情况下自动缩放?

您实际上可以自动缩放nginx入口控制器,该控制器在同一容器中运行nginx并由部署进行管理,您必须基于某些度量标准(例如nginx入口控制器容器上的CPU)设置自动缩放。