Ansible 多應用程式角色方法

Ansible 多應用程式角色方法

只是為了了解一些背景知識,我已經使用 Puppet 3 年了,我非常了解它的架構。我們公司正在基於微服務架構重構整個產品,並開始使用持續整合/部署。我利用這個機會將組態管理切換到 Ansible,這樣我就可以只使用一種工具來進行部署和設定/編排。

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

我的目標是為所有環境提供一個 Ansible 配置/部署“儲存庫”,使用變數透過環境對範本進行參數化。這樣我們就知道在整個開發週期中我們擁有一致的配置和部署流程。

我現在懷疑的是如何為這些多個應用程式創建角色。我發現這個主題也很難“谷歌”,因為我發現的大多數帖子都是簡單的教程或單一應用程式部署範例。

我現在考慮的是:

  1. 為我需要的每個「服務」(例如 nginx、java、logstash 等)提供單獨的角色,其中包含每個應用程式設定檔。透過這種方式,當兩個或多個應用程式使用非常相似的設定檔(可以透過變數使其不同)時,我可以保持角色的可重用性並避免重複。我還將擁有一個部署角色,其中包含所有部署任務。 This is the approach I usually take when working with Puppet, but it can scatter configuration sometimes making it "hard" to find and add a couple cases when a change in one application config can impact another (mainly due to single templates serving more than one應用程式).

  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 root 密碼,但我定義了 SSL 密碼和協議,group_vars/all/main.yml這樣,如果需要更改它們,它們就有一個真實來源。

相關內容