Ansible 是一種用 Python 編寫的無代理自動化工具。 它通過 SSH 連接到您的客戶端,並允許您自動執行您不想做的無聊、重複的任務。 它允許您將一項可能需要一個小時才能完成的人工任務,並將其轉換為可在幾分鐘內完成的單個命令。 這會提高你的表現,並讓你開始下一個大項目的工作。
Ansible 是一種用 Python 編寫的無代理自動化工具。 它通過 SSH 連接到您的客戶端,並允許您自動執行您不想做的無聊、重複的任務。 它允許您將一項可能需要一個小時才能完成的人工任務,並將其轉換為可在幾分鐘內完成的單個命令。 這會提高你的表現,並讓你開始下一個大項目的工作。
Ansible 的好處
Ansible 提供了很多好處,讓我們花點時間了解一些最重要的好處。 我將把它分成幾個部分,一個是針對那些沒有自動化或自動化程度最低的人,另一個是針對那些已經在使用 Salt 或 Puppet 等自動化工具的人。
自動化新手
如果您不熟悉自動化,使用簡單的工具可以幫助您縮短學習曲線。 讓我們看看您應該選擇 Ansible 而不是其他可用工具的一些原因。
1.語法簡單
由於 Ansible 定義任務的方式簡單,因此上手非常簡單。 以下面的片段為例:
-
– 主持人:全部
任務:
– 名稱:安裝 Nginx
百勝:
名稱:nginx
狀態:最新
一個完整的 Ansible 任務,相當於在所有主機上運行 yum install nginx。
您可能已經知道它在做什麼。 它正在安裝最新版本的 Nginx的 在您定義的所有主機上的開源 Web 服務器。 稍後我們將著眼於定義主機。 由於您創建的所有任務都在 YAML 中,因此它們既易於閱讀又易於創建。 這在開始學習新工具時至關重要,因為它可以讓您在建立信心和理解的同時快速獲得經驗。
2. Git 愛
由於您的自動化是簡單的文本文件,因此可以將它們存儲在 Git(或其他源存儲庫系統)中,在那裡它們具有更改控制並且可以從中央源檢出和更新。
3. 簡單的執行順序
由於任務按照您定義的順序執行,因此您不必擔心執行順序。 只需像對人類一樣定義步驟,Ansible 每次都會按照完全相同的順序執行它們,而不必擔心錯過任何一個步驟。
4.無代理
擁有一種無代理的方式來管理您的主機很重要,如果您還沒有以自動化方式部署代理的方式,則更是如此。 嘗試在現有環境中啟動自動化推送可能是一場噩夢,尤其是當有數十或數百台機器需要新代理時。
自動化愛好者
如果您已經完成了一些自動化,可能使用 Bash、Python 或 Powershell,您可能想知道 Ansible 帶來了什麼。 讓我們來看看。
1. 簡單編排
您是否嘗試過使用 bash 腳本更新網站? 假設您有一個 Web 負載平衡器或反向代理、5 個 Web 服務器、一個數據庫負載平衡器和 2 個數據庫服務器。 您可能會花費數百行代碼來檢查每個組件是否已成功更新。
使用 Ansible,您可以定義健康檢查、滾動升級,並設置您的負載均衡器以在升級的每個步驟中刪除添加和刪除節點。 您可以在官方的持續交付和滾動升級文檔中看到這方面的示例。
2.冪等性
冪等性是數學和計算機科學中某些操作的屬性,因此它們可以多次應用而不改變初始應用之外的結果。-維基百科基本上,目標是運行你的劇本一次以根據需要設置東西,然後繼續運行它每 *X* 小時/天/週,以確保沒有任何變化。 如果確實有任何變化,您應該在您的環境中尋找*配置漂移*的來源。
配置漂移是基礎架構中的服務器隨著時間的推移變得越來越不同的地方。- Shadow Soft
3、內置密文存儲
Ansible 的內置秘密存儲,稱為 Ansible Vault,允許您以安全的方式存儲敏感數據,例如密碼、API 密鑰,甚至私鑰,以及您的代碼庫的其餘部分,在源代碼控制中。 這在 Bash 或 Python 中是聞所未聞的,通常需要第三方工具,如支持 API 的密碼庫。
4.可擴展性
Ansible 可以針對 Windows 和 Linux 模塊輕鬆擴展,也可以與第三方工具進行通信。 這意味著如果您想自動化某些事情,很可能已經有一個社區模塊可供您使用,或者您可以創建或調整現有模塊以滿足您的需求。
您可以在官方文檔中找到有關開發您自己的模塊的信息,或者您可以查看 Ansible Galaxy 的社區模塊。
開始使用 Ansible
安裝
入門就像在工作站或服務器上安裝 Ansible 一樣簡單。 我將展示 RedHat/CentOS 命令,但您可以在官方文檔中查看其他安裝步驟。
`sudo yum 安裝 ansible`
就是這樣! 您已經安裝了一個功能齊全的 Ansible 控制節點並準備就緒。
庫存/貨物
Ansible 需要知道要與哪些機器通信並針對哪些機器運行您的劇本。 因此,讓我們看看設置基本清單。 在 Linux 上,默認清單文件位於“/etc/ansible/hosts”。 如果你看一下那個文件,你會發現它是類似 INI 的格式,可能看起來像這樣:
郵箱.example.com
[網絡服務器]
foo.example.com
bar.example.com
[數據庫服務器]
one.example.com
兩個.example.com
三.example.com
如文檔中所述,括號中的標題是組名,可讓您將系統分類為任意組。 我建議您花一些時間來設置清單文件,因為 Ansible 知道要針對哪些主機運行任務很重要。
創建劇本
劇本是要針對您的主機運行的任務的集合。 您可以創建一個 playbook,它非常簡單,只需一個文件即可進行一次播放,也可以創建多個具有多個條件和從其他 playbook 導入的文件。 我們將從一個簡單的劇本開始,在我們的網絡服務器上為 nginx 安裝、啟動和添加防火牆規則。 在我們的主機文件中,我們可能有這樣的東西:
[網絡服務器]
web01.example.com
web02.example.com
在我們的“nginx-install.yaml”文件中,我們有以下內容:
-
– 主機:網絡服務器
任務:
– 名稱:安裝 Nginx
百勝:
名稱:nginx
狀態:最新
– 名稱:啟動 Nginx
服務:
名稱:nginx
狀態:開始
– 名稱:允許端口 80 通過 firewalld
防火牆:
端口:80/tcp # 或者,您可以使用“服務:http”語法
永久:是的
狀態:啟用
Ansible 主機連接到您的 Web 服務器並安裝 NGINX 的概述。 要運行此劇本,只需運行“ansible-playbook nginx-install.yaml”,Ansible 將在您的網絡服務器組中的任何主機上安裝 Nginx。 這是一個簡單的劇本,只有一個劇本,但它是一個很好的例子,說明 Ansible 可以在您的環境中輕鬆使用。
結論
如您所見,Ansible 是一個非常靈活且易於使用的自動化工具,可以在任何環境中工作。 憑藉其簡單的學習曲線和根據您的需求增長的能力,Ansible 是將基礎架構部署到完整的 DevOps 管理環境的最佳自動化工具之一。
-賈斯汀·戈捷