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



目前,我正在一个Docker Image中运行一个数据驱动的web应用程序,nginx、应用服务器和Postgres都捆绑在一起。它只是在带有Docker的虚拟机上运行。

我需要将整个堆栈、一体化的东西迁移到Kubernetes,并寻找一种标准推荐的云原生部署方式。

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

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

  • 如果我使用外部服务,那么当我升级应用程序并确保没有版本不匹配时,我需要担心,也许外部服务不太灵活,因为我无法控制。建议使用数据库的方式是什么,可以通过Kubernetes自行部署,也可以使用外部数据库?

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

我的问题的重点是,在每一步中,我都希望避免将堆栈部署到Kubernetes的任何反模式,这样我以后就不必挣扎了。

如果我使用外部服务,那么我在升级应用程序时需要担心,并确保没有版本不匹配,而且外部服务可能不太灵活,因为我无法控制。建议使用数据库的方式是什么,可以通过Kubernetes自行部署,也可以使用外部数据库?

这是一个严格基于问题的意见。如果你不担心成本那么高,我会使用外部数据库,可能是像亚马逊RDS或GCP的云SQL这样的云提供商数据库。IMO,您将从外部卸载数据库管理,并且在出现问题时更容易进行调试。另一个方面是,您可以利用像AmazonAurora这样具有更好性能/可扩展性的东西。

如果你担心成本,那么就使用Kubernetes中的解决方案,它将使你为数据库、nginx和应用程序pod使用相同的机器集。

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

您实际上可以自动缩放nginx ingress控制器,该控制器在同一容器中运行nginx并由部署管理,您必须根据一些指标设置自动缩放,如nginx ingress控制器pod上的CPU。

最新更新