![挑战](https://linux22.com/image/627029/%E6%8C%91%E6%88%98.png)
挑战
我们的新应用程序使用了多项服务:
- 自定义构建 postgresql,
- redis,
- 芹菜,
- rabbitmq,
- haproxy,
- nginx,
- uwsgi,
- 我们的内部流程有 4 个(大部分是 Python),
- AngularJS 网络应用程序,
我将以 SaS 模型发布它,这意味着所有这些服务都将托管在我们的云中(目前在 AWS,稍后在 openstack)。每个客户都将获得自己的实例。安装将取决于客户需求/规模 - 在某些情况下,所有服务都将在单个 VM 上运行,在某些情况下,每个服务将有多个 VM。服务配置取决于客户(如附加功能)。我希望有一种简单的方法来创建“演示”实例 - 只是为了让未来的客户使用我们的应用程序。
要求
我寻找能够帮助我的解决方案:
- 设置一个或一组虚拟机(aws、openstack),
- 用通用规则配置它们,
- 从 git master 分支构建我们的软件(对于 webaplication 运行 grunt,对于 python 运行 twitter.pants),
- 在其上部署服务,
- 扩展安装(添加更多具有选定服务的 VM),
- 经过一段时间升级服务到选定的版本,
建议的解决方案
我见过 vargrant,它看起来不错,但它是用于开发而不是用于生产。我见过 docker,它甚至更好,但我不确定它是否足够灵活,可以支持每个客户不同的容器配置。无论如何,我仍然需要一个工具来创建这些容器...
我建议使用ansible作为创建虚拟机、配置通用部件然后在主机上部署服务的工具。我会为每个客户/实例保留单独的清单。Ansible 清单组允许在一个虚拟机上安装所有角色(服务)或将其放在单独的虚拟机上。我相信它也会帮助我们升级服务。
问题
我有一些问题:
- 您发现我的设置存在什么问题吗?
- 在什么情况下 ansible 可能不够用,所以我希望有像 docker 这样的东西?
- 如何跟踪单独的实例?如果我在 ansible 中更改剧本,如何确保它已在每个实例的每个主机上运行?
- 是否有机会根据角色和 Ansible 库存自动为每个虚拟机创建防火墙规则?
- 还有其他建议吗?
我非常感谢大家提前提出的反馈。
答案1
我会尝试回答您的一些问题,但是如果您能缩小问题范围的话会更有帮助。
您发现我的设置存在什么问题吗?
看起来不太好,但这实际上取决于您的应用程序正在做什么以及瓶颈可能在哪里。
在什么情况下 Ansible 可能不够用,所以我希望有像 docker 这样的东西?
即使您使用 Docker,Ansible 也应该能够完成所有自动化操作。我并没有使用过太多 Docker,但 Docker 本质上是 lxc 的包装器,而 Ansible 允许您在完整的 Linux 机器或 lxc 容器上运行命令。
如何跟踪单独的实例?如果我在 ansible 中更改剧本,如何确保它已在每个实例的每个主机上运行?
如果您使用的是 Docker,则每次更改 Ansible 剧本时,您都必须更新 Docker 容器。然后,您可以从 Docker 推送更改。如果您不使用 Docker,则每次更改 Ansible 剧本时,都必须在所有受影响的服务器上重新运行它们。您可能需要考虑错开剧本的运行时间。您可以在每台服务器上本地运行这些剧本,也可以从客户端工作站远程运行。请记住,如果您有很多节点,从单个客户端工作站运行可能不可行,因为客户端的网络和 CPU 限制。
是否有机会根据角色和 Ansible 库存自动为每个虚拟机创建防火墙规则?
是的。如果您使用 Ansible,则可以使用模板在每个虚拟机上配置 iptables。