【注】本文譯自:https://www.edureka.co/blog/what-is-ansible/
??Ansible 是一個開源的 IT 配置管理、部署和編排工具概荷。它旨在為各種自動化挑戰(zhàn)提供巨大的生產(chǎn)率收益。該工具使用非常簡單述呐,但功能強大粉楚,可以自動化復(fù)雜的多層 IT 應(yīng)用程序環(huán)境。
??通過本文,您將學(xué)習(xí):
- 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 的機器浑测,負責(zé)在您管理的服務(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)點
<img src="https://p1-tt.byteimg.com/origin/pgc-image/2cc5fac68c6843fc81993452db3abe2f" width="30"/>簡單:Ansible 使用 YAML 格式的簡單語法,稱為劇本互捌。 YAML是一種人類可讀的數(shù)據(jù)序列化語言潘明。 這非常簡單。 因此秕噪,不需要任何特殊的編碼技能钉疫,甚至您的 IT 組織中不了解 Ansible 的人都可以閱讀劇本并了解正在發(fā)生的事情。 Ansible 總是按順序執(zhí)行任務(wù)巢价。 安裝也很簡單。 總之固阁,簡單性確保您可以快速入門壤躲。
<img src="https://p3-tt.byteimg.com/origin/pgc-image/a79aee9410e94547a0fa81c334707211" width="30"/>無代理:最后,Ansible是完全無代理的备燃。 您無需在要自動執(zhí)行的客戶端系統(tǒng)或主機上安裝任何代理/軟件或其他防火墻端口碉克。 您不必單獨設(shè)置管理基礎(chǔ)結(jié)構(gòu),包括管理整個系統(tǒng)并齐,網(wǎng)絡(luò)和存儲漏麦。 Ansible 進一步減少了團隊立即開始自動化的工作量客税。
<img src="https://p6-tt.byteimg.com/origin/pgc-image/0cb7fd0d0ed6405294e87dfef0edbd0f" width="30"/>強大而靈活:Ansible 具有強大的功能,可以使您對最復(fù)雜的 IT 工作流程進行建模撕贞。 在這方面更耻,Ansible 的內(nèi)置電池方法(這種理念意味著自給自足的、開箱即用捏膨,具備所需的一切)秧均,可以管理您所需要的基礎(chǔ)設(shè)施、網(wǎng)絡(luò)号涯、操作系統(tǒng)和服務(wù)已被使用目胡,因為 Ansible 為您提供了數(shù)百個模塊來對其進行管理。 Ansible 的功能使您可以編排整個應(yīng)用環(huán)境链快,而不管它被部署在何處誉己。
<img src="https://p6-tt.byteimg.com/origin/pgc-image/e3af60778fce4baaa68bb3dba2c04906" width="30"/>高效:服務(wù)器上沒有額外的軟件,意味著更多的應(yīng)用程序資源域蜗。 另外巨双,由于 Ansible 模塊通過 JSON 進行工作,因此 Ansible 可以通過使用你熟悉的編程語言編寫模塊進行擴展地消。 Ansible 引入了模塊作為軟件的基本構(gòu)建塊炉峰。 因此,您甚至可以根據(jù)需要自定義它脉执。 例如如果您已有一個以純文本格式發(fā)送消息的消息發(fā)送模塊疼阔,并且您也想發(fā)送圖像,也可以添加圖像發(fā)送功能半夷。
Ansible 能做什么婆廊?
??Ansible 通常與其他配置管理工具(如Puppet,Chef巫橄,SaltStack等)一起分組淘邻。嗯,讓我告訴您湘换,Ansible 不僅限于配置管理宾舅。它也可以以許多不同的方式使用。 下面我會提到一些:
<img src="https://p6-tt.byteimg.com/origin/pgc-image/2e60674450bc4fbc8467c3f3db39e4f2" width="30"/>設(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)用程序猜扮。
<img src="https://p6-tt.byteimg.com/origin/pgc-image/5a13744c68474eb9851cb992fc689587" width="30"/>配置管理:它通過記錄和更新描述企業(yè)的硬件和軟件的詳細信息勉吻,建立并保持產(chǎn)品性能的一致性。此類信息通常包括已應(yīng)用于已安裝軟件包的版本和更新以及硬件設(shè)備的位置和網(wǎng)絡(luò)地址破镰。例如:如果要在企業(yè)中存在的所有計算機上安裝新版本的 Tomcat餐曼,那么手動更新每臺計算機都是不可行的。您可以使用最簡單的方式在 Ansible 劇本和清單中一次性在所有計算機上安裝 Tomcat鲜漩。您所要做的就是列出清單中節(jié)點的IP地址源譬,并編寫一本手冊來安裝Tomcat。從您的控制機器上運行該劇本孕似,它將被安裝在您的所有節(jié)點上踩娘。
<img src="https://p1-tt.byteimg.com/origin/pgc-image/35d05349b64b4157b43fa516a88a8ee1" width="30"/>應(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 之類的工具時藐唠,為什么還要擔(dān)心一步一步地執(zhí)行這些步驟。您所需要做的就是在 Ansible 劇本中列出這些任務(wù)鹉究,然后坐下來觀看 Ansible 按順序執(zhí)行這些任務(wù)宇立。
<img src="https://p3-tt.byteimg.com/origin/pgc-image/cd0b7520b1c2447a895c935f248e13c4" width="30"/>安全性和合規(guī)性:在 Ansible 中定義安全策略時,可以將站點范圍安全策略的掃描和修復(fù)集成到其他自動化過程中自赔。而且它將在部署的所有內(nèi)容中不可或缺妈嘹。這意味著,您需要在控制計算機中配置一次安全詳細信息绍妨,然后將其自動嵌入到所有其他節(jié)點中润脸。此外,Ansible 中存儲的所有憑據(jù)(管理員用戶 ID 和密碼)都無法以任何純文本格式檢索他去。
<img src="https://p1-tt.byteimg.com/origin/pgc-image/a968cb0788a34af7a5deed193336657d" width="30"/>編排:單獨的配置并不能定義您的環(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ī)范×账基礎(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 的真實用法
<img src="https://p1-tt.byteimg.com/origin/pgc-image/4f01f9fd621440bca96abb5017ed07dc" width="60"/>
??讓我們考慮一下 NASA 面臨的業(yè)務(wù)挑戰(zhàn)罪郊。
??NASA 需要將 65 個應(yīng)用程序從傳統(tǒng)的基于硬件的數(shù)據(jù)中心轉(zhuǎn)移到基于云的環(huán)境中蠕蚜,以實現(xiàn)更好的敏捷性和成本節(jié)約』陂希快速的時間表導(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)建£侵瑁現(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你稚。