Ansible 多應用程序角色方法
只是為了一點背景,我已經與 Puppet 合作了 3 年,我非常了解它的架構。我們公司正在基於微服務架構重構我們的整個產品,並開始使用持續集成/部署。我利用這個機會將我們的配置管理切換到 Ansible,因此我只能使用一個工具來進行部署和配置/編排。
我們的架構將完全基於 AWS,具有 Live、Staging 和 3 個集成/QA 環境。每個微服務都有自己獨立的部署流程,Integration/QA 環境將所有應用程序保存在一個實例中,而 Live/Staging 將有多個實例,在某些情況下,每個微服務有不同的實例池。
我的目標是為所有環境提供一個單一的 Ansible 配置/部署“儲存庫”,使用變數通過環境參數化模板。通過這種方式,我們將知道我們在整個開發週期中擁有一致的配置和部署過程。
我現在有疑問的是我如何處理這些多個應用程序的角色創建。我發現這個主題也很難“Google”,因為我發現的大多數文章都是簡單的教程或單個應用程序部署範例。
我現在考慮的是:
- 為我需要的每個“服務”設置單獨的角色,例如 nginx、java、logstash 等,其中包含每個應用程序配置文件。通過這種方式,我保持角色的可重用性,並避免在兩個或多個應用程序使用非常相似的配置文件時重複自己,該配置文件可以通過變數進行區分。我還將擁有一個部署角色,其中包含所有部署任務。這是我在使用 Puppet 時通常採用的方法,但它有時會分散配置,當一個應用程序配置的更改可能影響另一個應用程序配置時(主要是由於單個模板服務多個應用程序)。
- 為微服務扮演一個角色。這更容易使用,因為所有配置和變數都處於相同的角色,但是我必須為每個微服務重複任務和配置,這讓我有點畏縮。
這個問題的原因是衡量面臨同樣問題的人如何處理它,因為通過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
這樣,如果需要更改它們,它們就有一個真實來源。