IaC 9大好處和4大工具
團(tuán)隊(duì)構(gòu)建過程中面向的登臺(tái)或開發(fā)環(huán)境、往往與部署時(shí)面向的生產(chǎn)環(huán)境并不同步,導(dǎo)致發(fā)布管道中的環(huán)境漂移問題,而基礎(chǔ)設(shè)施即代碼(IaC),或能解決這一問題;A(chǔ)設(shè)施即代碼能夠自動(dòng)配置基礎(chǔ)設(shè)施,幫助企業(yè)以更高速度、更低風(fēng)險(xiǎn)以及更低成本實(shí)現(xiàn)云應(yīng)用程序的開發(fā)、部署與擴(kuò)展。在本文中,我們將深入探討基礎(chǔ)設(shè)施即代碼及其核心優(yōu)勢。
基礎(chǔ)設(shè)施即代碼是什么?
IaC選擇使用機(jī)器可讀的定義文件替代物理硬件配置或交互式配置工具,借此管理并配置數(shù)據(jù)中心內(nèi)的計(jì)算機(jī)系統(tǒng)。簡而言之,IaC主張通過簡單的代碼行取代IT資源管理及配置中的手動(dòng)操作流程。
基礎(chǔ)設(shè)施即代碼(IaC)是一種自動(dòng)化基礎(chǔ)設(shè)施管理方式,最典型的IaC流程主要包含以下三個(gè)步驟:1. 開發(fā)人員使用特定領(lǐng)域語言對基礎(chǔ)設(shè)施規(guī)范進(jìn)行定義與編寫。2. 將創(chuàng)建的文件發(fā)送至管理API、主服務(wù)器或代碼repo。3. 之后,由IaC平臺(tái)執(zhí)行具體操作,完成計(jì)算資源的創(chuàng)建與配置。
IaC本身也是一項(xiàng)必不可少的DevOps實(shí)踐,可謂是實(shí)現(xiàn)良好軟件交付生命周期的重要前提。IaC能夠幫助DevOps團(tuán)隊(duì)以完全符合版本源代碼的方式快速完成基礎(chǔ)設(shè)施創(chuàng)建及版本化,同時(shí)持續(xù)跟蹤各個(gè)版本,以避免各IT環(huán)境間因一致性沖突而引發(fā)嚴(yán)重的部署問題。作為一項(xiàng)重要DevOps實(shí)踐,IaC通常與持續(xù)交付結(jié)合使用。
IaC通常有兩種實(shí)現(xiàn)方式:聲明式(函數(shù)式)與命令式(程序式)。這兩種方法之間的本質(zhì)區(qū)別,在于一方強(qiáng)調(diào)“什么”、另一方強(qiáng)調(diào)“如何”。聲明式方法側(cè)重于描述所需的最終配置應(yīng)該是什么樣子;而命令式則關(guān)注如何操作基礎(chǔ)設(shè)施來達(dá)成這樣的配置狀態(tài)。
總而言之,聲明式方法負(fù)責(zé)定義希望達(dá)成的狀態(tài),系統(tǒng)則通過必要操作實(shí)現(xiàn)這一目標(biāo)狀態(tài);命令式方法定義必要的操作順序,通過一系列特定命令將基礎(chǔ)設(shè)施調(diào)整為所需狀態(tài)。
IaC還提供“pull”與“push”兩種方法,二者的區(qū)別體現(xiàn)在向服務(wù)器報(bào)告如何配置的具體方式上。在pull方法中,要配置的服務(wù)器將從控制服務(wù)器處拉取配置信息;而在push方法中,控制服務(wù)器會(huì)將配置信息推送至目標(biāo)系統(tǒng)。
基礎(chǔ)設(shè)施即代碼的優(yōu)勢
基礎(chǔ)設(shè)施即代碼的優(yōu)勢首先在于降低了成本,通過清除手動(dòng)操作,人們能夠?qū)⒕χ匦录性谡嬲匾娜蝿?wù)身上。
其次,IaC能夠加快基礎(chǔ)設(shè)施的配置速度,并借助可見性優(yōu)勢幫助企業(yè)內(nèi)的其他團(tuán)隊(duì)提升工作速度、強(qiáng)化工作效率。
第三,降低風(fēng)險(xiǎn)。自動(dòng)化機(jī)制消除了由人類錯(cuò)誤引發(fā)的風(fēng)險(xiǎn),回避手動(dòng)配置錯(cuò)誤以縮短停機(jī)時(shí)間、提高基礎(chǔ)設(shè)施可靠性。
第四,基礎(chǔ)設(shè)施即代碼使DevOps團(tuán)隊(duì)能夠在開發(fā)周期早期,立足與生產(chǎn)場景相似/相同的環(huán)境測試應(yīng)用程序。
第五,穩(wěn)定且可擴(kuò)展的環(huán)境。IaC能夠快速、規(guī);峁┓(wěn)定環(huán)境。在消除手動(dòng)配置需求之后,團(tuán)隊(duì)能夠以代碼形式表達(dá)所需的環(huán)境狀態(tài),由此強(qiáng)制實(shí)現(xiàn)一致性。IaC類基礎(chǔ)設(shè)施擁有可重復(fù)的部署流程,并可防止由配置漂移或缺少依賴項(xiàng)而引發(fā)的各類運(yùn)行時(shí)問題。DevOps團(tuán)隊(duì)可以使用一組統(tǒng)一的實(shí)踐與工具開展協(xié)同工作,以快速、可靠且規(guī);姆绞浇桓稇(yīng)用程序以及配套的支持基礎(chǔ)設(shè)施。
第六,可溯源性。我們可以像處理任何源代碼文件一樣對IaC配置文件進(jìn)行版本控制,因此完全可以跟蹤每套配置方案中的每一項(xiàng)具體變更。
第七,配置一致性。IaC實(shí)現(xiàn)了基礎(chǔ)設(shè)施配置的全面標(biāo)準(zhǔn)化,由此降低發(fā)生錯(cuò)誤或偏差的可能性。這不僅能夠減少基礎(chǔ)設(shè)施中出現(xiàn)的兼容性問題,同時(shí)也將幫助應(yīng)用程序獲得更順暢的運(yùn)行效果。
第八,翔實(shí)的文檔。IaC不僅能夠?qū)崿F(xiàn)流程自動(dòng)化,同時(shí)也可作為一種翔實(shí)的文檔形式,確保每一位新晉員工都能快速掌握基礎(chǔ)設(shè)施的實(shí)例化及保障方法。由于代碼內(nèi)容可進(jìn)行版本控制,因此IaC允許我們整理、記錄并跟蹤針對服務(wù)器配置的每一項(xiàng)變更,而且各套配置也如代碼一樣可以接受測試。
最后,IaC增強(qiáng)了安全性。如果所有計(jì)算、存儲(chǔ)及網(wǎng)絡(luò)服務(wù)都以代碼形式進(jìn)行配置,則可保證全部服務(wù)每次都能擁有完全相同的部署方式。換句話說,我們可以在整個(gè)企業(yè)之內(nèi)輕松統(tǒng)一地部署安全標(biāo)準(zhǔn),無需相關(guān)管理員逐一審查并批準(zhǔn)各項(xiàng)變更。
基礎(chǔ)設(shè)施即代碼相關(guān)工具
目前,市面上有眾多工具可以幫助我們實(shí)現(xiàn)基礎(chǔ)設(shè)施自動(dòng)化,下面來看其中幾款最受歡迎、最為成功的工具選項(xiàng):
Terraform——Terraform是一款聲明式配置及基礎(chǔ)設(shè)施編排工具,可幫助工程師自動(dòng)配置企業(yè)內(nèi)的各類云與本地基礎(chǔ)設(shè)施元素。
Chef——Chef是目前持續(xù)集成與交付流程中最具人氣的配置管理工具之一。Chef具有明確的云中立性,并與亞馬遜云科技、微軟Azure、Google Cloud Platform以及OpenStack等多家云服務(wù)供應(yīng)商合作。
Puppet——Puppet是另外一款流行的配置管理工具,可幫助工程師實(shí)現(xiàn)軟件的持續(xù)交付。使用Puppet,開發(fā)者可以定義所需的基礎(chǔ)設(shè)施最終狀態(tài)與希望實(shí)現(xiàn)的運(yùn)作方式。接下來,Puppet會(huì)自動(dòng)強(qiáng)制執(zhí)行所需狀態(tài)并修復(fù)一切不正確變更。Puppet目前與多家領(lǐng)先云服務(wù)商(包括亞馬遜云科技、微軟Azure、Google Cloud及VMware)相集成,允許跨多云環(huán)境實(shí)現(xiàn)全面自動(dòng)化。
Ansible——Ansible是由Red Hat開發(fā)的基礎(chǔ)設(shè)施自動(dòng)化工具。Ansible能夠描述各組件與系統(tǒng)之間的相互關(guān)聯(lián)方式,借此為基礎(chǔ)設(shè)施建模、幫助我們擺脫獨(dú)立管理各系統(tǒng)的沉重負(fù)擔(dān)。
小結(jié)
總體來看,基礎(chǔ)設(shè)施即代碼能夠簡化并加快企業(yè)基礎(chǔ)設(shè)施配置流程、幫助避免錯(cuò)誤并嚴(yán)格遵循政策、保持良好的環(huán)境一致性,最終為企業(yè)節(jié)約下寶貴的時(shí)間與金錢。

