Ansible 多应用程序角色方法

Ansible 多应用程序角色方法

简单介绍一下背景,我使用 Puppet 已有 3 年,非常了解它的架构。我们公司正在基于微服务架构重构整个产品,并开始使用持续集成/部署。我利用这个机会将我们的配置管理切换到 Ansible,这样我就可以只使用一个工具进行部署和配置/编排。

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

我的目标是为所有环境建立一个 Ansible 配置/部署“存储库”,使用变量通过环境参数化模板。这样我们就知道在整个开发周期中我们有一个一致的配置和部署过程。

我现在怀疑的是如何处理这些多个应用程序的角色创建。我发现这个主题也很难用“谷歌”搜索到,因为我发现的大多数帖子都是简单的教程或单个应用程序部署示例。

我现在考虑的是:

  1. 为我需要的每个“服务”分配单独的角色,例如 nginx、java、logstash 等,每个应用程序配置文件都包含在其中。这样,我保持了角色的可重用性,避免在两个或多个应用程序使用非常相似的配置文件(可以通过变量使其不同)时重复工作。我还将拥有一个部署角色,其中包含所有部署任务。这是我使用 Puppet 时通常采用的方法,但它有时会分散配置,使得很难找到并添加几个案例,因为一个应用程序配置的更改可能会影响另一个应用程序(主要是由于单个模板服务于多个应用程序)。

  2. 微服务只有一个角色。这样更容易操作,因为所有配置和变量都属于同一个角色,但我必须为每个微服务重复任务和配置,这让我有点不爽。

提出这个问题的原因是为了衡量面临同样问题的人们如何处理它,因为通过谷歌搜索几乎不可能找到合理的答案,而且我没有使用 Ansible/多应用程序部署的朋友/熟人。

如果我说的不够清楚/令人困惑,请见谅,感谢您提供的见解。

答案1

我要做的是让每个人都有自己的角色系统服务您的应用程序需要和一个角色对于每个应用程序/微服务,以及组和/或主机变量角色变量和默认值定义要做什么。

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

我要演一出戏app_microservice.yml

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

所以我会有一个角色 roles/app_microservice部署代码。当我运行此剧本时,如果尚未安装和配置 nginx、mariadb 和 php-fpm 先决条件,则将首先安装和配置它们。

除了调用 之外roles,剧本还可以任意运行tasks。如果某些情节足够简单,不需要完整的角色,您可以随意混合搭配这些情节。

这个剧本也与其他剧本一起进行all.yml,这样我偶尔就可以这样做ansible-playbook all.yml。请记住,ansible 并不像 puppet 那样保证幂等性,所以这是你必须小心的事情。

- include: app_microservice.yml

我用团体变量来定义一个群体所共有的东西(尽管其中很少有不适合的角色变量或默认值)、all全局变量的分组,以及主持人任何特定于主机的变量。

例如,我为每个主机提供一个唯一的 MySQL 根密码,但我定义了 SSL 密码和协议,group_vars/all/main.yml以便如果需要更改它们,则有一个真实的来源。

相关内容