歡迎光臨
每天分享高質量文章

Ansible 入門秘訣 | Linux 中國

用 Ansible 自動化你的資料中心的關鍵點。

— Jose Delarosa

 

Ansible 是一個開源自動化工具,可以從中央控制節點統一配置伺服器、安裝軟體或執行各種 IT 任務。它採用一對多、無客戶端agentless的機制,從控制節點上透過 SSH 傳送指令給遠端的客戶機來完成任務(當然除了 SSH 外也可以用別的協議)。

Ansible 的主要使用群體是系統管理員,他們經常會週期性地執行一些安裝、配置應用的工作。儘管如此,一些非特權使用者也可以使用 Ansible,例如資料庫管理員就可以透過 Ansible 用 mysql 這個使用者來建立資料庫、新增資料庫使用者、定義訪問許可權等。

讓我們來看一個簡單的使用場景,一位系統管理員每天要配置 100 臺伺服器,並且必須在每臺機器上執行一系列 Bash 命令,然後交付給使用者。

這是個簡單的例子,但應該能夠證明:在 yaml 檔案裡寫好命令然後在遠端伺服器上執行,是一件非常輕鬆的事。而且如果執行環境不同,就可以加入判斷條件,指明某些命令只能在特定的伺服器上執行(如:只在那些不是 Ubuntu 或 Debian 的系統上執行 yum 命令)。

Ansible 的一個重要特性是用劇本playbook來描述一個計算機系統的最終狀態,所以一個劇本可以在伺服器上反覆執行而不影響其最終狀態(LCTT 譯註:即是冪等的)。如果某個任務已經被實施過了(如,“使用者 sysman 已經存在”),那麼 Ansible 就會忽略它繼續執行後續的任務。

定義

◈ 任務task:是工作的最小單位,它可以是個動作,比如“安裝一個資料庫服務”、“安裝一個 web 伺服器”、“建立一條防火牆規則”或者“把這個配置檔案複製到那個伺服器上去”。
◈ 動作play: 由任務組成,例如,一個動作的內容是要“設定一個資料庫,給 web 服務用”,這就包含瞭如下任務:1)安裝資料庫包;2)設定資料庫管理員密碼;3)建立資料庫實體;4)為該實體分配許可權。
◈ 劇本playbook:(LCTT 譯註:playbook 原指美式橄欖球隊的戰術手冊[1],也常指“劇本”,此處慣例採用“劇本”譯名) 由動作組成,一個劇本可能像這樣:“設定我的網站,包含後端資料庫”,其中的動作包括:1)設定資料庫伺服器;2)設定 web 伺服器。
◈ 角色role:用來儲存和組織劇本,以便分享和再次使用它們。還拿上個例子來說,如果你需要一個全新的 web 伺服器,就可以用別人已經寫好並分享出來的角色來設定。因為角色是高度可配置的(如果編寫正確的話),可以根據部署需求輕鬆地復用它們。
◈ Ansible 星系Ansible Galaxy[2]:是一個線上倉庫,裡面儲存的是由社群成員上傳的角色,方便彼此分享。它與 GitHub 緊密整合,因此這些角色可以先在 Git 倉庫裡組織好,然後透過 Ansible 星系分享出來。

這些定義以及它們之間的關係可以用下圖來描述:

請註意上面的例子只是組織任務的方式之一,我們當然也可以把安裝資料庫和安裝 web 伺服器的劇本拆開,放到不同的角色裡。Ansible 星繫上最常見的角色是獨立安裝、配置每個應用服務,你可以參考這些安裝 mysql[3] 和 httpd 的例子。

編寫劇本的小技巧

學習 Ansible 最好的資源是其官方檔案[5]。另外,像學習其他東西一樣,搜尋引擎是你的好朋友。我推薦你從一些簡單的任務開始,比如安裝應用或建立使用者。下麵是一些有用的指南:

◈ 在測試的時候少選幾臺伺服器,這樣你的動作可以執行的更快一些。如果它們在一臺機器上執行成功,在其他機器上也沒問題。
◈ 總是在真正執行前做一次測試dry run,以確保所有的命令都能正確執行(要執行測試,加上 --check-mode 引數 )。
◈ 盡可能多做測試,別擔心搞砸。任務裡描述的是所需的狀態,如果系統已經達到預期狀態,任務會被簡單地忽略掉。
◈ 確保在 /etc/ansible/hosts 裡定義的主機名都可以被正確解析。
◈ 因為是用 SSH 與遠端主機通訊,主控節點必須要能接受金鑰,所以你面臨如下選擇:1)要麼在正式使用之前就做好與遠端主機的金鑰交換工作;2)要麼在開始管理某臺新的遠端主機時做好準備輸入 “Yes”,因為你要接受對方的 SSH 金鑰交換請求(LCTT 譯註:還有另一個不那麼安全的選擇,修改主控節點的 ssh 配置檔案,將 StrictHostKeyChecking 設定成 “no”)。
◈ 儘管你可以在同一個劇本內把不同 Linux 發行版的任務整合到一起,但為每個發行版單獨編寫劇本會更明晰一些。

總結一下

Ansible 是你在資料中心裡實施運維自動化的好選擇,因為它:

◈ 無需客戶端,所以比其他自動化工具更易安裝。
◈ 將指令儲存在 YAML 檔案中(雖然也支援 JSON),比寫 shell 指令碼更簡單。
◈ 開源,因此你也可以做出自己的貢獻,讓它更加強大!

你是怎樣使用 Ansible 讓資料中心更加自動化的呢?請在評論中分享您的經驗。


via: https://opensource.com/article/18/2/tips-success-when-getting-started-ansible

作者:Jose Delarosa[7] 譯者:jdh8383 校對:wxy

贊(0)

分享創造快樂