Deployment

Ansible 多應用程序角色方法

  • October 12, 2015

只是為了一點背景,我已經與 Puppet 合作了 3 年,我非常了解它的架構。我們公司正在基於微服務架構重構我們的整個產品,並開始使用持續集成/部署。我利用這個機會將我們的配​​置管理切換到 Ansible,因此我只能使用一個工具來進行部署和配置/編排。

我們的架構將完全基於 AWS,具有 Live、Staging 和 3 個集成/QA 環境。每個微服務都有自己獨立的部署流程,Integration/QA 環境將所有應用程序保存在一個實例中,而 Live/Staging 將有多個實例,在某些情況下,每個微服務有不同的實例池。

我的目標是為所有環境提供一個單一的 Ansible 配置/部署“儲存庫”,使用變數通過環境參數化模板。通過這種方式,我們將知道我們在整個開發週期中擁有一致的配置和部署過程。

我現在有疑問的是我如何處理這些多個應用程序的角色創建。我發現這個主題也很難“Google”,因為我發現的大多數文章都是簡單的教程或單個應用程序部署範例。

我現在考慮的是:

  1. 為我需要的每個“服務”設置單獨的角色,例如 nginx、java、logstash 等,其中包含每個應用程序配置文件。通過這種方式,我保持角色的可重用性,並避免在兩個或多個應用程序使用非常相似的配置文件時重複自己,該配置文件可以通過變數進行區分。我還將擁有一個部署角色,其中包含所有部署任務。這是我在使用 Puppet 時通常採用的方法,但它有時會分散配置,當一個應用程序配置的更改可能影響另一個應用程序配置時(主要是由於單個模板服務多個應用程序)。
  2. 為微服務扮演一個角色。這更容易使用,因為所有配置和變數都處於相同的角色,但是我必須為每個微服務重複任務和配置,這讓我有點畏縮。

這個問題的原因是衡量面臨同樣問題的人如何處理它,因為通過Google搜尋幾乎不可能找到關於它的合理答案,而且我沒有使用 Ansible/多應用程序部署的朋友/熟人。

抱歉,如果我不夠清楚/令人困惑,感謝您提供的每一個見解。

我要做的是為您的應用程序需要的每個系統服務設置角色,為每個應用程序/微服務設置角色和角色,以及定義要做什麼的組和/或主機變數以及角色變數和預設值。

我部署了很多基於 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這樣,如果需要更改它們,它們就有一個真實來源。

引用自:https://serverfault.com/questions/728476