牧场主发展环境
我最近开始使用牧场主来做一个项目。 在几天之内,我build立了一个标准的微服务架构,提供4个基本的服务(在Digital Ocean上托pipe),尽可能使生产准备就绪
服务 :
- Api网关
- GraphQL Api
- OAuth2服务器
- 前端
它还包括负载均衡 , 健康检查等…
我惊讶于它有多好,因此我在configuration中大量使用了rancher提供的所有function,例如,DNS约定<service>.<stack>
,sidekicks,rancher-compose等等。
上述服务存在于他们自己的仓库中,他们有自己的Dockerfile
, docker-compose.yml
和rancher-compose.yml
用于生产,因此可以独立部署。
现在,我已经certificate了自己,牧场主将成为我的新朋友,我需要一个策略来运行同样的应用程序在我的本地环境,并能够开发我的服务,就像我会做stream浪者一样 。
我想知道什么是将在牧场上运行的应用程序移植到开发环境的最佳方法。
我对如何解决这个问题有一些想法,但是,如果不重新configuration整个服务来发展,似乎没有一个能够实现它。
1 – 本地机器上的牧场主
这是我采取的第一种方法,在本地安装一个rancher-server
和一个rancher-client
,并像生产一样部署整个堆栈。 对我来说,这似乎是最合乎逻辑的想法。 但是,这不会让我改变服务的代码,并且直接反映到容器中。 也许使用共享卷可能工作,但如果你有任何想法,请让我知道,这对我来说看起来微不足道。 对我来说,这个解决scheme是走了:(
2 – Docker撰写
我第二次尝试使用明确的docker compose
和共享卷,省略load balancers
和牧场主的所有function :(但是,这可能会工作,我需要改变所有我的服务的所有configuration,他们指向一个牧场特定的DNS域<service>.<stack>
在桥接networking上只使用<service>
,但这意味着在不同的环境下保持2种不同的configuration,这很奇怪,而且不好玩。
3 – stream浪
由于第二种解决scheme已经非常麻烦(为服务提供双层docker-compose
和双层configuration),为什么不只是重新创build整个stream浪环境(没有牧场主特性,或者有可能),在这种情况下,一个nginx会反向代理并解决服务间的请求。 然而,这也需要相当多的工作和再次努力:(
有没有其他方法可以使牧场主以非痛苦的方式适合开发环境? 如何依靠牧场主或任何其他平台工具的公司解决了这个问题?
本地机上的牧场主是一种常见的模式。 如果你在VM上运行Rancher,或者在Linux上本地运行,当你启动你的堆栈时,细微的变化是你将卷添加到主机上。
services: myapp: volumes: - /Users/myhome/code:/src ...
您现在可以在撰写文件和Rancher CLI中使用模板function。 就像是:
services: myapp: {{ if dev-local == "true"}} volumes: - /Users/blah:/src {{end}} ...
那么你可以有一个答案文件,只是dev-local="false"