只是为了一点背景,我已经与Puppet工作了3年,我明白它的架构非常好。 我们公司正在重构基于微服务架构的整个产品,并开始使用持续集成/部署。 我利用这个机会将我们的configurationpipe理切换到Ansible,因此我只能使用一个工具进行部署和configuration/编排。
我们的架构将完全基于AWS,Live,Staging和3 Integration / QA环境。 每个微服务将拥有自己独立的部署过程,并且Integration / QA envs将把所有应用程序保存在一个实例中,而Live / Staging将有多个实例,在某些情况下,每个微服务的实例池也不同。
我的目标是为所有环境设置一个Ansibleconfiguration/部署“存储库”,使用variables通过环境参数化模板。 这样我们就会知道我们在整个开发周期中都有一个一致的configuration和部署stream程。
我现在怀疑的是如何为这些多个应用程序创buildangular色。 我发现这个话题很难“谷歌”,因为我发现大多数post是简单的教程或单个应用程序部署的例子。
我现在考虑的是:
为每个需要的“服务”分隔angular色,比如nginx,java,logstash等等,每个应用程序configuration文件都在里面。 通过这种方式,我可以保持angular色的可重用性,并避免在两个或更多的应用程序使用一个非常类似的configuration文件(可通过variables变得不同)时重复自己。 我还将拥有一个部署angular色,其中包含所有的部署任务。 这是我通常在使用Puppet时所采用的方法,但是它可以分散configuration,有时在一个应用程序configuration中的更改会影响另一个应用程序configuration时,很难find并添加一些情况(主要是由于单个模板服务于多个模板应用程序)。
微服务有一个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密码和协议,所以如果需要更改它们,那么就有一个真相来源。