什么是 Ansible - 使用 Ansible 進行配置管理
【注】本文譯自:https://www.edureka.co/blog/what-is-ansible/
? ? Ansible 是一個開源的 IT 配置管理、部署和編排工具。 它旨在為各種自動化挑戰(zhàn)提供巨大的生產(chǎn)率收益。 該工具使用非常簡單,但功能強大,可以自動化復(fù)雜的多層 IT 應(yīng)用程序環(huán)境。
? ? 通過本文,您將學習:
Ansible 是什么?
為什么我們需要 Ansible?
使用 Ansible 的優(yōu)點
Ansible 能做什么?
Ansible 架構(gòu)
DevOps 中的 Ansible
NASA 對 Ansible 的實際用法
一些 Ansible 術(shù)語,可以幫助您更好地理解Ansible。
為什么我們需要 Ansible ?
? ? 在知道什么是 Ansible 之前,有很必要了解 Ansible 出現(xiàn)之前所面臨的問題。
? ??讓我們稍微回顧一下:在網(wǎng)絡(luò)計算的開始、可靠而高效地部署和管理服務(wù)器成為一項挑戰(zhàn)之時。在那個時候,系統(tǒng)管理員手動管理服務(wù)器,在單個服務(wù)器上安裝軟件,更改配置以及管理服務(wù)。
? ??隨著數(shù)據(jù)中心的發(fā)展以及托管應(yīng)用程序的日益復(fù)雜,管理員意識到他們無法滿足啟用的應(yīng)用程序那樣快速地擴展其手動系統(tǒng)管理。由于開發(fā)團隊是敏捷的,并且經(jīng)常發(fā)布軟件,但是 IT 運營花費很多時間來配置系統(tǒng),從而阻礙了開發(fā)人員的工作速度。這就促進了服務(wù)器配置和配置管理工具的蓬勃發(fā)展。
? ? 考慮一下管理服務(wù)器隊列的繁瑣例程。我們始終需要不斷更新,推送更改,在其上復(fù)制文件等。這些任務(wù)使事情變得非常復(fù)雜且耗時。
? ??但是,讓我告訴您,上述問題有解決方案。那就是 – Ansible。
? ? 在全面介紹 Ansible 之前, 首先讓我們熟悉一些 Ansible 術(shù)語:
Ansible 術(shù)語:
控制器機器:安裝 Ansible 的機器,負責在您管理的服務(wù)器上運行資源調(diào)配。
庫存:一個初始化文件,其中包含有關(guān)您所管理的服務(wù)器的信息。
劇本:Ansible 置備的入口點,其中的自動化是通過使用 YAML 格式的任務(wù)定義的。
任務(wù):定義要執(zhí)行的單個過程的塊,例如安裝軟件包。
模塊:模塊通常抽象一個系統(tǒng)任務(wù),例如處理程序包或創(chuàng)建和更改文件。Ansible 具有許多內(nèi)置模塊,但是您也可以創(chuàng)建自定義模塊。
角色:一種預(yù)定義方法,用于組織劇本和其他文件,以便于共享和重用配置的各個部分。
播放:從頭到尾執(zhí)行的預(yù)配稱為播放。簡單來說,執(zhí)行劇本稱為播放。
Fact:包含有關(guān)系統(tǒng)信息的全局變量,例如網(wǎng)絡(luò)接口或操作系統(tǒng)。
處理程序:用于觸發(fā)服務(wù)狀態(tài)更改,例如重新啟動或停止服務(wù)。
? ??Ansible 是一個有用的工具,可讓您創(chuàng)建一組機器 ,描述如何配置這些機器或應(yīng)對它們采取什么操作。Ansible 從中央位置發(fā)出所有命令來執(zhí)行這些任務(wù)。
? ??節(jié)點計算機上未安裝其他客戶端軟件。它使用 SSH 連接到節(jié)點。Ansible 只需要安裝在甚至可以是筆記本電腦的控制機器(您將在其上運行命令的機器)上。這是解決復(fù)雜問題的簡單方法。
? ? 當我說 Ansible 填補了配置管理和 IT 編排世界中的所有漏洞時,我并沒有自夸。當您看看下面提到的 Ansible 的好處時,您也會知道的:
使用 Ansible 的優(yōu)點
?簡單:Ansible 使用 YAML 格式的簡單語法,稱為劇本。 YAML是一種人類可讀的數(shù)據(jù)序列化語言。 這非常簡單。 因此,不需要任何特殊的編碼技能,甚至您的 IT 組織中不了解 Ansible 的人都可以閱讀劇本并了解正在發(fā)生的事情。 Ansible 總是按順序執(zhí)行任務(wù)。 安裝也很簡單。 總之,簡單性確保您可以快速入門。
?無代理:最后,Ansible是完全無代理的。 您無需在要自動執(zhí)行的客戶端系統(tǒng)或主機上安裝任何代理/軟件或其他防火墻端口。 您不必單獨設(shè)置管理基礎(chǔ)結(jié)構(gòu),包括管理整個系統(tǒng),網(wǎng)絡(luò)和存儲。 Ansible 進一步減少了團隊立即開始自動化的工作量。
?強大而靈活:Ansible 具有強大的功能,可以使您對最復(fù)雜的 IT 工作流程進行建模。 在這方面,Ansible 的內(nèi)置電池方法(這種理念意味著自給自足的、開箱即用,具備所需的一切),可以管理您所需要的基礎(chǔ)設(shè)施、網(wǎng)絡(luò)、操作系統(tǒng)和服務(wù)已被使用,因為 Ansible 為您提供了數(shù)百個模塊來對其進行管理。 Ansible 的功能使您可以編排整個應(yīng)用環(huán)境,而不管它被部署在何處。
?高效:服務(wù)器上沒有額外的軟件,意味著更多的應(yīng)用程序資源。 另外,由于 Ansible 模塊通過 JSON 進行工作,因此 Ansible 可以通過使用你熟悉的編程語言編寫模塊進行擴展。 Ansible 引入了模塊作為軟件的基本構(gòu)建塊。 因此,您甚至可以根據(jù)需要自定義它。 例如如果您已有一個以純文本格式發(fā)送消息的消息發(fā)送模塊,并且您也想發(fā)送圖像,也可以添加圖像發(fā)送功能。
Ansible 能做什么?
? ??Ansible 通常與其他配置管理工具(如Puppet,Chef,SaltStack等)一起分組。嗯,讓我告訴您,Ansible 不僅限于配置管理。它也可以以許多不同的方式使用。 下面我會提到一些:
設(shè)置:您的應(yīng)用程序必須位于某個地方。 如果您是 PXE(預(yù)引導(dǎo)執(zhí)行環(huán)境)引導(dǎo)并啟動裸機服務(wù)器或虛擬機,或者從模板創(chuàng)建虛擬或云實例,則 Ansible&Ansible Tower 可幫助簡化此過程。 例如,如果我要測試使用 Visual C ++ 構(gòu)建的應(yīng)用程序的調(diào)試版本,則應(yīng)該滿足一些先決條件,例如擁有 Visual C ++ 庫 DLL(msvcr100d.dll)。我還將需要在您的計算機中安裝 Visual Studio。 這時 Ansible 會確保所需的軟件已下載并安裝,以便提供我的應(yīng)用程序。
配置管理:它通過記錄和更新描述企業(yè)的硬件和軟件的詳細信息,建立并保持產(chǎn)品性能的一致性。此類信息通常包括已應(yīng)用于已安裝軟件包的版本和更新以及硬件設(shè)備的位置和網(wǎng)絡(luò)地址。例如:如果要在企業(yè)中存在的所有計算機上安裝新版本的 Tomcat,那么手動更新每臺計算機都是不可行的。您可以使用最簡單的方式在 Ansible 劇本和清單中一次性在所有計算機上安裝 Tomcat。您所要做的就是列出清單中節(jié)點的IP地址,并編寫一本手冊來安裝Tomcat。從您的控制機器上運行該劇本,它將被安裝在您的所有節(jié)點上。
應(yīng)用部署:使用 Ansible 定義應(yīng)用程序并使用 Ansible Tower 管理部署時,團隊可以有效地管理從開發(fā)到生產(chǎn)的整個應(yīng)用生命周期。例如,假設(shè)我要部署默認 Servlet 引擎。部署引擎需要執(zhí)行許多步驟。
將 .war 應(yīng)用程序從 dropins 目錄移動到 apps 目錄
添加 server.xml 文件
導(dǎo)航至該網(wǎng)頁以查看您的應(yīng)用。
? ? 但是,當我們擁有 Ansible 之類的工具時,為什么還要擔心一步一步地執(zhí)行這些步驟。您所需要做的就是在 Ansible 劇本中列出這些任務(wù),然后坐下來觀看 Ansible 按順序執(zhí)行這些任務(wù)。
安全性和合規(guī)性:在 Ansible 中定義安全策略時,可以將站點范圍安全策略的掃描和修復(fù)集成到其他自動化過程中。而且它將在部署的所有內(nèi)容中不可或缺。這意味著,您需要在控制計算機中配置一次安全詳細信息,然后將其自動嵌入到所有其他節(jié)點中。此外,Ansible 中存儲的所有憑據(jù)(管理員用戶 ID 和密碼)都無法以任何純文本格式檢索。
編排:單獨的配置并不能定義您的環(huán)境。您需要定義多個配置如何交互,并確??梢詫⒉煌牟糠肿鳛橐粋€整體進行管理。在復(fù)雜性和混亂性中,Ansible 帶來了秩序。Ansible 提供了業(yè)務(wù)請求與應(yīng)用程序、數(shù)據(jù)和基礎(chǔ)設(shè)施保持一致的編排。它通過自動化工作流、供應(yīng)和變更管理來定義策略和服務(wù)級別。這將創(chuàng)建一個與應(yīng)用程序保持一致的基礎(chǔ)設(shè)施,可以根據(jù)每個應(yīng)用程序的需求擴大或縮小規(guī)模。
? ??例如:考慮一下我想部署一個新網(wǎng)站來代替現(xiàn)有網(wǎng)站的情況。為此,我們將刪除現(xiàn)有網(wǎng)站,并部署新網(wǎng)站,并在需要時重新啟動負載均衡器或 Web 群集。現(xiàn)在,如果我們只是這樣做,用戶將注意到停機,因為我們尚未刪除通過負載平衡器進入這些計算機的實時流量。因此,我們需要某種類型的預(yù)任務(wù),在該任務(wù)中,我們告訴負載平衡器將此 Web 服務(wù)器置于維護模式,以便在升級時暫時禁止流量通過。假設(shè)我在此處添加了一個模塊,它的前置任務(wù)是禁用負載均衡器中的 Web 節(jié)點。
? ??因此,這是我們的前置任務(wù),在此我們禁用流量,然后在此處使用這些不同的任務(wù)升級節(jié)點。最后,我們需要某種類型的后置任務(wù),通過使它退出維護模式,可以再次使流量到達該 Web 節(jié)點。這些任務(wù)可以寫在 Ansible 劇本中,因此有助于編排環(huán)境。
? ??當你對 Ansible 的架構(gòu)有一個清晰的了解時,你就會更好地理解 Ansible 的工作原理。
Ansible 的架構(gòu)
? ??Ansible架構(gòu)相當簡單,參考下圖:

? ??如您所見,在上圖中,Ansible 自動化引擎與編寫劇本以執(zhí)行 Ansible 自動化引擎的用戶直接交互。它還與云服務(wù)和配置管理數(shù)據(jù)庫(CMDB)進行交互。
? ??Ansible 自動化引擎包括:
清單:Ansible 清單是需要管理的主機(節(jié)點)及其IP地址,服務(wù)器,數(shù)據(jù)庫等的列表。然后,Ansible 通過傳輸工具采取行動 - UNIX,Linux或網(wǎng)絡(luò)設(shè)備使用SSH,Windows 系統(tǒng)使用 WinRM。
APIs:Ansible 中的 API 用作云服務(wù)的傳輸,可以是公有云,也可以是私有云。
模塊:模塊通過劇本直接在遠程主機上執(zhí)行。這些模塊可以控制系統(tǒng)資源,例如服務(wù),程序包或文件(實際上是任何東西),或執(zhí)行系統(tǒng)命令。模塊通過操作系統(tǒng)文件、安裝軟件包或?qū)Ψ?wù)網(wǎng)絡(luò)進行 API 調(diào)用來實現(xiàn)。 Ansible 提供的模塊超過 450 個,可自動執(zhí)行環(huán)境的幾乎每個部分。例如:
云模塊(例如 cloudformation ),用于創(chuàng)建或刪除 AWS 云組棧;
諸如 mssql_db 之類的數(shù)據(jù)庫模塊可從遠程主機中刪除 MYSQL 數(shù)據(jù)庫。
插件:插件允許在工作構(gòu)建步驟中執(zhí)行 Ansible 任務(wù)。 插件是增強 Ansible 核心功能的代碼片段。Ansible 附帶了許多方便的插件,您可以輕松編寫自己的插件。 例如:
Action 插件是模塊的前端,可以在調(diào)用模塊本身之前在控制器上執(zhí)行任務(wù)。
Cache 插件用于保留“facts”緩存,以避免昂貴的事實收集操作。?
Callback?插件使您可以掛鉤 Ansible 事件以進行顯示或記錄。
? ??Ansible 架構(gòu)中還有一些其他組件,解釋如下:
網(wǎng)絡(luò):Ansible 也可以用于自動化不同的網(wǎng)絡(luò)。Ansible 使用的是?IT 運營和開發(fā)部門已在使用的簡單、強大且無代理的自動化框架。使用與 Ansible 自動化引擎分離的數(shù)據(jù)模型(劇本或角色),該引擎可輕松跨越不同的網(wǎng)絡(luò)硬件。
主機:Ansible 架構(gòu)中的主機只是由 Ansible 自動化的節(jié)點系統(tǒng)。它可以是任何類型的機器:Windows、Linux、RedHat 等。
劇本:劇本是以 YAML 格式編寫的簡單文件,描述了 Ansible 要執(zhí)行的任務(wù)。劇本可以聲明配置,但即使包含跳轉(zhuǎn)語句,它們也可以協(xié)調(diào)任何手動排序過程的步驟。他們可以同步或異步啟動任務(wù)。
CMDB:它是一個存儲庫,充當 IT 安裝的數(shù)據(jù)倉庫。它保存與 IT 資產(chǎn)集合(通常稱為配置項(CI))有關(guān)的數(shù)據(jù),并描述這些資產(chǎn)之間的關(guān)系。
云:它是由托管在 Internet 上的遠程服務(wù)器網(wǎng)絡(luò),用于存儲、管理和處理數(shù)據(jù),而不是本地服務(wù)器。您可以在云上啟動資源和實例,并連接到服務(wù)器。
DevOps 中 Ansible
? ? 眾所周知,在 DevOps 中,開發(fā)和運營工作是集成在一起的。這種集成對于現(xiàn)代測試驅(qū)動的應(yīng)用程序設(shè)計非常重要。因此,Ansible 通過為開發(fā)和運營提供穩(wěn)定的環(huán)境用以集成,從而實現(xiàn)流暢的編排。請參考下圖,看看 ?Ansible 是如何融入 DevOps 的:

? ??現(xiàn)在讓我們討論 Ansible 如何管理整個 DevOps 基礎(chǔ)設(shè)施。當開發(fā)人員開始將基礎(chǔ)設(shè)施視為其應(yīng)用程序的一部分時,即將基礎(chǔ)設(shè)施即代碼(IaC),穩(wěn)定性和性能就成為規(guī)范?;A(chǔ)設(shè)施即代碼是通過計算機可處理的定義文件(而不是物理硬件配置或使用交互式配置工具)來管理和供應(yīng)計算基礎(chǔ)架構(gòu)(流程、裸機服務(wù)器、虛擬服務(wù)器等)及其配置的過程。在這方面 Ansible 自動化發(fā)揮了重要作用,并在同行中脫穎而出。
? ? 在 DevOps 中,系統(tǒng)管理員與開發(fā)人員緊密合作,提高了開發(fā)速度,可以并花費更多的時間進行諸如性能調(diào)整,實驗和完成工作之類的活動,而花費在解決問題上的時間卻更少。 請參考下圖,以了解 Ansible 如何簡化 sysadmins 和其他用戶的任務(wù)。

? ? 至此,您知道了使用 Ansible 的好處。那么,現(xiàn)在讓我們來看一個真實的例子,NASA 是如何通過 Ansible 受益的。
Ansible 案例研究– NASA 的真實用法?

? ??讓我們考慮一下 NASA 面臨的業(yè)務(wù)挑戰(zhàn)。
? ??NASA 需要將 65 個應(yīng)用程序從傳統(tǒng)的基于硬件的數(shù)據(jù)中心轉(zhuǎn)移到基于云的環(huán)境中,以實現(xiàn)更好的敏捷性和成本節(jié)約??焖俚臅r間表導(dǎo)致許多應(yīng)用程序“按原樣”遷移到云環(huán)境。這樣就創(chuàng)建了一個環(huán)境,該環(huán)境跨越了多個難以輕松管理的虛擬私有云(VPC)和AWS賬戶。即使是簡單的事情,例如確保每個系統(tǒng)管理員都可以訪問每個服務(wù)器或簡單的安全修補程序,也非常繁瑣。
? ??解決方案是利用 Ansible Tower 來管理和調(diào)度云環(huán)境。
? ??因此,為了解決 NASA 缺乏集中管理和多樣化環(huán)境的問題,他們評估了多種解決方案并決定實施 Ansible Tower。NASA 現(xiàn)在正在利用 Ansible Tower 以一種有組織、有計劃的方式管理其環(huán)境。
NASA 如何使用 Ansible:
? ??Ansible Tower 提供了一個儀表板,該儀表板給出了所有主機和作業(yè)的狀態(tài)摘要,允許 NASA 對所有內(nèi)容進行分組,并管理不同部門的訪問權(quán)限。它還通過關(guān)聯(lián)內(nèi)容和控制組的權(quán)限來幫助拆分組織。
? ??Ansible Tower 是一個基于 Web 的界面,用于管理 Ansible。在 Ansible 的用戶愿望清單中,最重要的一項是易于使用的UI,用于管理快速部署和監(jiān)視其配置。Ansible 管理層提出了 Ansible Tower 作為回應(yīng)。
? ??此外,Ansible 通過分配各種角色在團隊中劃分任務(wù)。它管理舊作業(yè)歷史、活動流、標記為刪除的數(shù)據(jù)和系統(tǒng)跟蹤信息的清理。請參考下圖,以了解 Ansible 是如何簡化 NASA 的工作的。

? ??結(jié)果,NASA 實現(xiàn)了以下效率:
? 通過非常簡單的 10 行 Ansible 劇本,可以通過 Ansible Tower 定期自動對 NASA Web 應(yīng)用程序服務(wù)器進行修補。
? Ansible 還被用于補救安全問題,并被用于補救 OpenSSL 問題。這不僅節(jié)省了時間,而且可以快速修復(fù)一個非常棘手的安全問題。
???每一周,都會通過 Ansible 更新?www.nasa.gov?的完整版和移動版,通常只需 5 分鐘左右。
? 如果缺少任務(wù)關(guān)鍵人員的 OS 級用戶帳戶,則將對其進行連續(xù)檢查和創(chuàng)建?,F(xiàn)在,每個需要訪問權(quán)限的人都可以訪問,即使這意味著幾乎立即從所有服務(wù)器中添加或刪除用戶。
? NASA 還將 Ansible facts 集成到其 CMDB、CloudAware 中,以提高整個 AWS 庫存的管理可見性。結(jié)果,可以以一種非常細粒度的方式組織 AWS 資源的庫存,這在以前是不可能的 。
? Ansible 還用于確保環(huán)境符合 FedRAMP 概述的必要聯(lián)邦安全標準和其他監(jiān)管要求。
結(jié)果:
? ??實施 Ansible 后,NASA 可以更好地管理其 AWS 環(huán)境。Ansible 使 NASA 能夠為其客戶提供更好的操作和安全保障。作為一個團隊,它也提高了效率。
? ? 如果我們從數(shù)字上看:
? 更新 nasa.gov 的時間從 1 小時以上縮短到 5 分鐘以下
? 安全修補程序更新從多天的過程變?yōu)?45 分鐘
? 實現(xiàn)近乎實時的 RAM 和磁盤監(jiān)視(無需代理即可完成)
? 不到 10 分鐘即可在整個環(huán)境中配置 OS 帳戶
? 為標準 AMI(Amazon Machine Image)設(shè)定基準的過程從 1 個小時的手動配置變成了無形且無縫的后臺流程
? 每個應(yīng)用程序堆棧的建立時間從 1-2 小時減少到 10 分鐘以下。
總結(jié):Ansible 是一個開源軟件供應(yīng)、配置管理和應(yīng)用程序部署工具,可將基礎(chǔ)設(shè)施作為代碼。它可以在許多類 Unix 系統(tǒng)上運行,并且可以配置類 Unix 系統(tǒng)和 Microsoft Windows。