牧场主开发环境
Rancher development environment
最近为了一个项目开始使用rancher。
几天之内,我建立了一个标准的微服务架构,其中包含 4 个基本服务(托管在 Digital Ocean 上),试图让它尽可能地准备好生产
服务:
- Api 网关
- GraphQL Api
- OAuth2 服务器
- 前端
它还包括负载平衡器、健康检查等...
我很惊讶它有多好,因此我在我的配置中大量使用了 rancher 提供的所有功能,例如 DNS 约定 <service>.<stack>
、sidekicks、rancher-compose 等。 .
以上 服务 位于它们自己的存储库中,并且它们有自己的
拥有 Dockerfile
、 docker-compose.yml
和 rancher-compose.yml
用于生产,以便它们可以独立部署。
既然我已经证明了 rancher 将成为我的新 "friend",我需要一个 策略 到 运行 我本地环境中的相同应用程序,并且能够开发我的服务,就像我对 Vagrant.
所做的那样
我想知道将 rancher 上的 运行 应用程序移植到 development 环境的最佳方法是什么.
我对如何解决这个问题有一些想法,但是,none 似乎允许我在不重新配置整个开发服务的情况下实现它。
1 - 本地机器上的 Rancher
这是我采用的第一种方法,在本地安装 rancher-server
和 rancher-client
,然后像在生产环境中一样部署整个堆栈。这对我来说似乎是最合乎逻辑的想法。但是,这不允许我更改服务代码并实时反映到容器中。也许使用共享卷可能有效,但对我来说这看起来微不足道,如果您有任何想法请告诉我。对我来说,这个解决方案已经消失了:(
2 - Docker 撰写
我的第二次尝试是简单地使用 docker compose
和共享卷,省略 load balancers
和 rancher 的所有 功能 :( 但是,这可能有效,我需要更改我所有服务的所有配置,它们指向牧场主特定的 DNS 域 <service>.<stack>
以仅在桥接网络上使用 <service>
。但这意味着为不同的环境维护 2 种不同的配置,这很奇怪,也不好玩。
3 - 流浪汉
因为第二个解决方案已经很混乱了(服务的双 docker-compose
和双重配置)为什么不在 vagrant 中重新创建整个环境(没有 rancher 功能,可能有 ansible),其中一个 nginx 可以反向代理并解析服务之间的请求。然而,这也需要相当多的工作和双倍的努力:(
是否有任何其他方法可以使 rancher 以非痛苦的方式适合开发环境?依赖 rancher 或任何其他平台工具的公司如何解决这个问题?
本地机器上的Rancher是一种常见的模式。如果您 运行 Rancher 在 VM 上,或者在本地 Linux 盒子上,当您启动堆栈时,细微的变化是您向主机添加卷..
services:
myapp:
volumes:
- /Users/myhome/code:/src
...
您现在可以在撰写文件和 Rancher CLI 中使用模板功能。类似于:
services:
myapp:
{{ if dev-local == "true"}}
volumes:
- /Users/blah:/src
{{end}}
...
然后你可以得到一个答案文件
dev-local="false"
最近为了一个项目开始使用rancher。 几天之内,我建立了一个标准的微服务架构,其中包含 4 个基本服务(托管在 Digital Ocean 上),试图让它尽可能地准备好生产
服务:
- Api 网关
- GraphQL Api
- OAuth2 服务器
- 前端
它还包括负载平衡器、健康检查等...
我很惊讶它有多好,因此我在我的配置中大量使用了 rancher 提供的所有功能,例如 DNS 约定 <service>.<stack>
、sidekicks、rancher-compose 等。 .
以上 服务 位于它们自己的存储库中,并且它们有自己的
拥有 Dockerfile
、 docker-compose.yml
和 rancher-compose.yml
用于生产,以便它们可以独立部署。
既然我已经证明了 rancher 将成为我的新 "friend",我需要一个 策略 到 运行 我本地环境中的相同应用程序,并且能够开发我的服务,就像我对 Vagrant.
所做的那样我想知道将 rancher 上的 运行 应用程序移植到 development 环境的最佳方法是什么.
我对如何解决这个问题有一些想法,但是,none 似乎允许我在不重新配置整个开发服务的情况下实现它。
1 - 本地机器上的 Rancher
这是我采用的第一种方法,在本地安装 rancher-server
和 rancher-client
,然后像在生产环境中一样部署整个堆栈。这对我来说似乎是最合乎逻辑的想法。但是,这不允许我更改服务代码并实时反映到容器中。也许使用共享卷可能有效,但对我来说这看起来微不足道,如果您有任何想法请告诉我。对我来说,这个解决方案已经消失了:(
2 - Docker 撰写
我的第二次尝试是简单地使用 docker compose
和共享卷,省略 load balancers
和 rancher 的所有 功能 :( 但是,这可能有效,我需要更改我所有服务的所有配置,它们指向牧场主特定的 DNS 域 <service>.<stack>
以仅在桥接网络上使用 <service>
。但这意味着为不同的环境维护 2 种不同的配置,这很奇怪,也不好玩。
3 - 流浪汉
因为第二个解决方案已经很混乱了(服务的双 docker-compose
和双重配置)为什么不在 vagrant 中重新创建整个环境(没有 rancher 功能,可能有 ansible),其中一个 nginx 可以反向代理并解析服务之间的请求。然而,这也需要相当多的工作和双倍的努力:(
是否有任何其他方法可以使 rancher 以非痛苦的方式适合开发环境?依赖 rancher 或任何其他平台工具的公司如何解决这个问题?
本地机器上的Rancher是一种常见的模式。如果您 运行 Rancher 在 VM 上,或者在本地 Linux 盒子上,当您启动堆栈时,细微的变化是您向主机添加卷..
services:
myapp:
volumes:
- /Users/myhome/code:/src
...
您现在可以在撰写文件和 Rancher CLI 中使用模板功能。类似于:
services:
myapp:
{{ if dev-local == "true"}}
volumes:
- /Users/blah:/src
{{end}}
...
然后你可以得到一个答案文件
dev-local="false"