有效的多重应用angular色方法

只是为了一点背景,我已经与Puppet工作了3年,我明白它的架构非常好。 我们公司正在重构基于微服务架构的整个产品,并开始使用持续集成/部署。 我利用这个机会将我们的configurationpipe理切换到Ansible,因此我只能使用一个工具进行部署和configuration/编排。

我们的架构将完全基于AWS,Live,Staging和3 Integration / QA环境。 每个微服务将拥有自己独立的部署过程,并且Integration / QA envs将把所有应用程序保存在一个实例中,而Live / Staging将有多个实例,在某些情况下,每个微服务的实例池也不同。

我的目标是为所有环境设置一个Ansibleconfiguration/部署“存储库”,使用variables通过环境参数化模板。 这样我们就会知道我们在整个开发周期中都有一个一致的configuration和部署stream程。

我现在怀疑的是如何为这些多个应用程序创buildangular色。 我发现这个话题很难“谷歌”,因为我发现大多数post是简单的教程或单个应用程序部署的例子。

我现在考虑的是:

  1. 为每个需要的“服务”分隔angular色,比如nginx,java,logstash等等,每个应用程序configuration文件都在里面。 通过这种方式,我可以保持angular色的可重用性,并避免在两个或更多的应用程序使用一个非常类似的configuration文件(可通过variables变得不同)时重复自己。 我还将拥有一个部署angular色,其中包含所有的部署任务。 这是我通常在使用Puppet时所采用的方法,但是它可以分散configuration,有时在一个应用程序configuration中的更改会影响另一个应用程序configuration时,很难find并添加一些情况(主要是由于单个模板服务于多个模板应用程序)。

  2. 微服务有一个angular色。 这样做更容易,因为所有的configuration和variables都在同一个angular色中,但是我必须为每个微服务重复任务和configuration,这让我感到一丝不小。

这个问题的原因是要衡量面对同样问题的人们如何处理这个问题,因为通过谷歌search似乎几乎不可能find合理的答案,而且我也没有与Ansible / multi app部署在一起的朋友/熟人。

对不起,如果我不够清楚/困惑,并感谢您可以给我的每一个洞察力。

我要做的是为每个应用程序需要的系统服务分配angular色,为每个应用程序/微服务提供一个angular色组和/或主variables以及定义要做什么的angular色variables和缺省值

我部署了很多基于PHP的应用程序,所以看起来很像这样:

我会玩一个app_microservice.yml

 --- - hosts: app_microservice_servers roles: - nginx - mariadb - php-fpm - app_microservice 

所以我将有一个roles/app_microservice部署代码。 当我运行这个游戏时,nginx,mariadb和php-fpm的先决条件将被安装和configuration,如果他们还没有。

除了调用roles ,游戏还可以运行任意tasks 。 随意混合和匹配这些如果足够简单,不要求一个完整的angular色。

这个戏也会和其他所有的戏一起进入all.yml ,这样我偶尔可以做ansible-playbook all.yml 。 请记住,安可不能保证像傀儡一样的虔诚,所以这是你必须小心的事情。

 - include: app_microservice.yml 

我使用variables来定义一个组中常见的东西(尽pipe这些东西中的宝贵less数不适用于angular色variables或默认值),将allvariables分配给全局的东西,将主机variables分配给唯一的东西一个举办方。

例如,我为每个主机都提供一个唯一的MySQL根密码,但是我有在group_vars/all/main.yml定义的SSL密码和协议,所以如果需要更改它们,那么就有一个真相来源。