我最近开始在一个项目中使用牧场主。几天之内,我建立了一个标准的微服务架构,其中包含 4 个基本服务(托管在 Digital Ocean 上),试图让它尽可能地为生产做好准备
服务:
- API 网关
- GraphQL API
- OAuth2 服务器
- 前端
它还包括负载均衡器、健康检查等...
我很惊讶它有多好,因此我在我的配置中大量使用了 rancher 提供的所有功能,例如 DNS 约定<service>.<stack>
、sidekicks、rancher-compose 等......
上述服务存在于它们自己的存储库中,它们有自己的Dockerfile
,docker-compose.yml
并且rancher-compose.yml
用于生产,因此它们可以独立部署。
既然我证明了自己 rancher 将成为我的新“朋友”,我需要一个策略来在我的本地环境中运行相同的应用程序并能够开发我的服务,就像我对Vagrant所做的那样。
我想知道将在牧场主上运行的应用程序移植到开发环境的最佳方法是什么。
我对如何解决这个问题有一些想法,但是,它们似乎都不允许我在不重新配置整个服务以进行开发的情况下实现它。
1 - 本地机器上的 Rancher
这是我采用的第一种方法,在本地安装 arancher-server
和 arancher-client
并像在生产环境中一样部署整个堆栈。对我来说,这似乎是最合乎逻辑的想法。但是,这不允许我更改服务代码并实时反映到容器中。也许使用共享卷可能会起作用,但如果您有任何想法,请告诉我,这对我来说似乎微不足道。对我来说,这个解决方案已经消失了:(
2 - 码头工人组成
我的第二次尝试是使用简单docker compose
和共享的卷,省略 Rancherload balancers
的所有功能:( 但是,这可能有效,我需要更改我所有服务的所有配置,它们指向特定于 Rancher 的 DNS 域<service>.<stack>
才能使用<service>
通过桥接网络。但这意味着为不同的环境维护 2 种不同的配置,这很奇怪而且不好玩。
3 - 流浪者
由于第二种解决方案已经很混乱(docker-compose
服务的双重和双重配置),为什么不只是在 vagrant 中重新创建整个环境(没有 Rancher 功能,可能带有 ansible),其中一个 nginx 进行反向代理并解决服务之间的请求。然而,这也需要相当多的工作和再次加倍努力:(
还有其他方法可以使牧场主以非痛苦的方式适合开发环境吗?依赖牧场主或任何其他平台工具的公司如何解决这个问题?