簡介
配置管理是指以確保系統長期完整性的方式處理系統變更的過程,通常涉及促進自動化和可觀察性的工具和流程。儘管這一概念並非起源於IT行業,但該術語廣泛用於指代服務器配置管理。
在服務器的背景下,配置管理也常被稱為IT自動化或服務器編排。這兩個術語都突出了配置管理的實際方面以及從中央服務器控制多個系統的能力。
本指南將帶您了解使用配置管理工具自動化您的服務器基礎設施設置的好處,以及一個這樣的工具Ansible如何幫助您實現這一目標。
使用配置管理工具的好處
市面上有許多配置管理工具,它們的複雜程度和架構風格各異。儘管這些工具各有特色,工作方式也略有不同,但它們都提供相同的功能:確保系統狀態與一組配置腳本所描述的狀態相符。
伺服器配置管理帶來的諸多好處,很大程度上來自於將基礎設施定義為代碼的能力。這使您能夠:
- 使用版本控制系統追蹤基礎設施中的任何變更
- 重用配置腳本於多個伺服器環境,如開發、測試和生產
- 在標準化的開發環境中,與同事共享配置腳本以促進協作
- 簡化伺服器複製流程,這有助於從重大錯誤中恢復
此外,配置管理工具還提供了一種從集中位置控制一台至數百台伺服器的方法,這能大幅提升伺服器基礎設施的效率和完整性。
Ansible 概述
Ansible 是一個現代的配置管理工具,旨在簡化設置和維護遠程伺服器的任務,其設計簡約,旨在讓用戶快速上手。
使用者以YAML編寫Ansible配置腳本,這是一種用戶友好的數據序列化標準,不依賴於任何特定編程語言。這使得用戶能夠比同類工具更直觀地創建複雜的配置腳本。
Ansible無需在將被管理的節點上安裝任何特殊軟件。只需在控制機上配置Ansible軟件,該軟件通過標準SSH與節點通信。
作為配置管理工具和自動化框架,Ansible封裝了同類其他工具中的所有常見功能,同時仍保持對簡單性和性能的強烈關注:
冪等性行為
Ansible會追蹤管理系統中資源的狀態,以避免重複執行已完成的任務。如果某個軟件包已經安裝,它不會再次嘗試安裝。目標是在每次配置執行後,系統達到(或保持)期望狀態,即便多次運行也是如此。這就是Ansible和其他配置管理工具被稱為具有冪等性行為的原因。運行劇本時,您將看到每項任務的執行狀態以及該任務是否對系統進行了更改。
支援變數、條件與迴圈
在編寫 Ansible 自動化腳本時,您可以使用變數、條件和迴圈,使您的自動化更加靈活和高效。
系統事實
Ansible 收集有關受管節點的一系列詳細信息,例如網絡接口和操作系統,並將其作為全局變量提供,稱為系統事實。事實可以在劇本中使用,使您的自動化更加靈活和適應性,根據被配置的系統表現不同。
模板系統
Ansible 使用 Jinja2 Python 模板系統,允許動態表達式和訪問變量。模板可用於簡化配置文件和服務的設置。例如,您可以使用模板在 Apache 中設置新的虛擬主機,同時在多個服務器安裝中重用同一模板。
擴展與模組支援
Ansible 內建了數百個模組,以便於編寫常見系統管理任務的自動化腳本,例如使用 apt
安裝套件和使用 rsync
同步檔案,並且也適用於處理流行的軟體,如資料庫系統(如 MySQL、PostgreSQL、MongoDB 等)和依賴管理工具(如 PHP 的 composer
、Ruby 的 gem
、Node 的 npm
等)。除此之外,您還可以通過多種方式擴展 Ansible:當您需要自定義功能且預設未提供時,插件和模組是很好的選擇。
您也可以在 Ansible Galaxy 入口網站中找到第三方模組和插件。
熟悉 Ansible 概念
接下來,我們將介紹 Ansible 的術語和概念,以幫助您熟悉這些術語,因為它們在本系列中會經常出現。
控制節點
一個控制節點是指安裝並配置了Ansible以連接到您的伺服器的系統。您可以擁有多個控制節點,任何能夠運行Ansible的系統都可以設置為控制節點,包括運行Linux或Unix基礎操作系統的個人電腦或筆記本電腦。目前,Ansible無法安裝在Windows主機上,但您可以通過設置一個運行Linux的虛擬機並從那裡運行Ansible來繞過這一限制。
受管節點
您使用Ansible控制的系統被稱為受管節點。Ansible要求受管節點能夠通過SSH訪問,並且安裝了Python 2(版本2.6或更高)或Python 3(版本3.5或更高)。
Ansible支持多種操作系統作為受管節點,包括Windows伺服器。
清單
清單檔案包含了一個主機列表,這些主機將透過Ansible進行管理。雖然Ansible在安裝時通常會建立一個預設的清單檔案,但您可以使用每個專案的清單來更好地區分您的基礎架構,並避免因為錯誤而對錯誤的伺服器執行命令或劇本。靜態清單通常以.ini
檔案的形式建立,但您也可以使用以任何能夠返回JSON的程式語言動態生成的清單。
任務
在Ansible中,任務是在受管節點上執行的工作單元。每個要執行的動作都定義為一個任務。任務可以透過臨時命令作為一次性動作執行,或者包含在劇本中作為自動化腳本的一部分。
劇本
劇本包含了一個有序的任務列表,以及其他一些指令來指示哪些主機是該自動化的目標,是否使用權限提升系統來運行這些任務,以及定義變數或包含檔案的可選部分。Ansible會依序執行任務,而一個完整的劇本執行稱為一個劇。劇本以YAML格式編寫。
處理器
處理器 用於對服務執行操作,例如重新啟動或停止在受管節點系統上運行的活動服務。處理器通常由任務觸發,並在所有任務完成後在劇本結束時執行。這樣,如果有多個任務觸發服務重啟,例如,該服務只會在所有任務執行完畢後重啟一次。儘管默認的處理器行為更高效且總體上是一種更好的實踐,但如果某個任務需要,也可以強制立即執行處理器。
角色
一個 角色 是一組劇本和相關文件,按照Ansible已知的預定結構組織起來。角色有助於將劇本重複使用和重新定位為特定目標的細粒度自動化共享包,例如安裝網絡服務器、安裝PHP環境或設置MySQL服務器。
結論
Ansible 是一個極簡主義的 IT 自動化工具,其平緩的學習曲線部分歸功於它使用 YAML 來編寫供應腳本。它擁有大量的內建模組,可用於抽象化任務,例如安裝套件和處理模板。其簡化的基礎設施需求和易於理解的語法,對於剛開始接觸配置管理的人來說是一個很好的選擇。
在本系列的下一部份,我們將看到如何在 Ubuntu 20.04 伺服器上安裝並開始使用 Ansible。