基礎(chǔ)設(shè)施即代碼:從手工到自動(dòng)化的躍遷
IT系統(tǒng)運(yùn)行離不開(kāi)服務(wù)器、網(wǎng)絡(luò)和存儲(chǔ)這些底層硬件基礎(chǔ)設(shè)施的支持,因此需要對(duì)這些基礎(chǔ)設(shè)施進(jìn)行管理,比如,設(shè)備的啟停、網(wǎng)絡(luò)的配置、軟件的安裝和升級(jí)等,這些工作復(fù)雜而且瑣碎,一旦出錯(cuò),很可能導(dǎo)致其支持的各種業(yè)務(wù)系統(tǒng)無(wú)法正常運(yùn)行。
很長(zhǎng)時(shí)間以來(lái),基礎(chǔ)設(shè)施這些管理工作依賴于管理員通過(guò)命令行或其他界面進(jìn)行操作。隨著IT設(shè)備數(shù)量的不斷增加,IT系統(tǒng)越來(lái)越復(fù)雜,變化越來(lái)越頻繁,停止和啟動(dòng)它們的頻率也越來(lái)越高。如果繼續(xù)采用手動(dòng),意味著管理員可能每天要人工登錄和修改數(shù)百次,這是不現(xiàn)實(shí)的,根本適應(yīng)不了大規(guī)模部署的要求。特別是當(dāng)單體數(shù)據(jù)中心規(guī)模從幾十臺(tái)增加到上萬(wàn)臺(tái)、10萬(wàn)臺(tái)甚至更多之后,以自動(dòng)化替代傳統(tǒng)手工方式成為必然。這正是基礎(chǔ)設(shè)施即代碼(Infrastructure as Code,IaC)出現(xiàn)最重要的原因。當(dāng)然,IaC不止是以自動(dòng)化替代手工提高了工作效率,它還帶來(lái)了環(huán)境一致性、可復(fù)制性以及可追溯性等諸多優(yōu)點(diǎn)?梢哉f(shuō),IaC開(kāi)啟了基礎(chǔ)設(shè)施管理的一個(gè)新世界,它讓基礎(chǔ)設(shè)施的管理也像軟件開(kāi)發(fā)一樣,是基礎(chǔ)設(shè)施管理和運(yùn)維從手工到自動(dòng)化最終到無(wú)人化這一進(jìn)化路徑上的一次重要躍遷。
為了幫助大家了解IaC,IaC到底有哪些好處,它和時(shí)下流行的DevOps、AIOps是否有關(guān)系?我們邀請(qǐng)了專家景顯強(qiáng)對(duì)此相關(guān)話題進(jìn)行了解答。
景顯強(qiáng)是紅帽資深解決方案架構(gòu)師、RHCA認(rèn)證。曾就職華為、SUSE等企業(yè),有多年操作系統(tǒng)研發(fā)及運(yùn)維經(jīng)驗(yàn),同時(shí)在數(shù)據(jù)中心運(yùn)維方面有多年經(jīng)驗(yàn)。目前,景顯強(qiáng)在紅帽軟件(北京)有限公司負(fù)責(zé)紅帽軟件的相關(guān)產(chǎn)品及解決方案,主要針對(duì)Linux操作系統(tǒng)、分布式存儲(chǔ)、IaaS云、PaaS云、自動(dòng)化運(yùn)維等領(lǐng)域提供技術(shù)和方案建設(shè)規(guī)劃,為企業(yè)提供以紅帽產(chǎn)品為中心的解決方案建設(shè)指導(dǎo),幫助企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型。
以下為本次訪談內(nèi)容。
紅帽資深解決方案架構(gòu)師景顯強(qiáng)
1. 何謂基礎(chǔ)設(shè)施即代碼(IaC),為什么會(huì)提出這個(gè)概念?它要解決什么問(wèn)題?
基礎(chǔ)設(shè)施即代碼 (IaC) 是通過(guò)代碼的方式來(lái)管理和配置基礎(chǔ)設(shè)施,取代以往的手工操作基礎(chǔ)設(shè)施。提出這個(gè)概念的靈感來(lái)自軟件開(kāi)發(fā)的最佳實(shí)踐經(jīng)驗(yàn)。傳統(tǒng)的基礎(chǔ)設(shè)施管理方法是人工的手動(dòng)處理模式,不僅僅效率低下,而且還有很多人為操作的風(fēng)險(xiǎn),比如誤操作。同時(shí),對(duì)基礎(chǔ)設(shè)施的配置更改需要文檔記錄,如果沒(méi)有做好配置更改記錄,可能帶來(lái)另外一些重復(fù)性操作的風(fēng)險(xiǎn)。另外,隨著虛擬化和云平臺(tái)的引入,企業(yè)的基礎(chǔ)設(shè)施變得很復(fù)雜,也引入了很多工具和平臺(tái),雖然能在基礎(chǔ)設(shè)施的提供和管理上增加部分效率,但是對(duì)于環(huán)境的一致性保證以及在數(shù)分鐘內(nèi)實(shí)現(xiàn)特定場(chǎng)景下基礎(chǔ)設(shè)施就緒是很難實(shí)現(xiàn)的。因此需要一種全新的管理方法,而IaC借助了軟件開(kāi)發(fā)中的代碼管理經(jīng)驗(yàn),通過(guò)代碼描述基礎(chǔ)設(shè)施的配置及變更,再執(zhí)行代碼完成配置和變更。
只要我們編寫好一套代碼來(lái)描述對(duì)基礎(chǔ)設(shè)施的操作,便可以對(duì)這些代碼進(jìn)行管理和維護(hù),比如將其存放在代碼版本管理工具git中,這樣只要需要用到這段代碼的時(shí)候,就從git中將其check out出來(lái)使用。如果需要對(duì)這段代碼進(jìn)行更改,git也會(huì)記錄代碼更改的所有記錄,實(shí)現(xiàn)了版本控制。通過(guò)這種方式來(lái)管理基礎(chǔ)設(shè)施,能保證部署的環(huán)境一致性,實(shí)現(xiàn)了同一代碼部署多套相同環(huán)境的要求。
IaC主要解決的問(wèn)題就是基礎(chǔ)設(shè)施提供的效率和一致性問(wèn)題。我們可以將基礎(chǔ)設(shè)施作為代碼來(lái)部署,可以實(shí)現(xiàn)版本跟蹤,也能在很短的時(shí)間內(nèi)提供一套全新的相同環(huán)境。如果我們的操作需求很復(fù)雜,可以將基礎(chǔ)設(shè)施劃分為模塊,然后對(duì)每個(gè)模塊分別實(shí)現(xiàn)代碼方式描述,在需要使用的時(shí)候,可以通過(guò)自動(dòng)化以不同方式組合這些模塊,進(jìn)而實(shí)現(xiàn)復(fù)雜場(chǎng)景的快速響應(yīng)。
2. IaC的主要客戶是哪些,它能帶來(lái)哪些好處?
對(duì)于擁有大量IT基礎(chǔ)設(shè)施環(huán)境的企業(yè)都可以考慮IaC,比如擁有大量服務(wù)器、存儲(chǔ)、網(wǎng)絡(luò)設(shè)備、操作系統(tǒng)、虛擬化平臺(tái)、私有云平臺(tái)、公有云平臺(tái)、容器云平臺(tái)甚至是混合云架構(gòu)下的混合平臺(tái)的企業(yè)都應(yīng)該考慮IaC,尤其是在這些基礎(chǔ)設(shè)施上有頻繁操作需求的,比如對(duì)變更、新業(yè)務(wù)系統(tǒng)上線、基礎(chǔ)環(huán)境制備要求更高響應(yīng)速度的企業(yè)更應(yīng)該考慮使用IaC。
使用IaC能帶來(lái)以下幾方面的好處:
1) 提高開(kāi)發(fā)速度。開(kāi)發(fā)業(yè)務(wù)代碼需要依賴基礎(chǔ)設(shè)施環(huán)境,如果基礎(chǔ)設(shè)施能快速就位,快速響應(yīng)變更,并行執(zhí)行任務(wù),就會(huì)使開(kāi)發(fā)效率得到提高。
2) 保證環(huán)境一致性。使用相同的代碼部署出來(lái)的環(huán)境一定是相同的,對(duì)所納管的環(huán)境變更也一定是一致的。
3) 自動(dòng)化的處理。當(dāng)代碼借助自動(dòng)化工具開(kāi)始執(zhí)行,執(zhí)行期間不需要人為干預(yù),完全自動(dòng)化,避免了人工手動(dòng)操作帶來(lái)的弊端。
4) 降低成本。對(duì)于運(yùn)維成本,環(huán)境使用成本,人力成本都能降低。
5) 降低錯(cuò)誤發(fā)生率。由于是自動(dòng)化方式處理,代碼的變更和版本控制有審核,會(huì)大大降低人為操作的失誤。
6) 進(jìn)行多元化整合。對(duì)于復(fù)雜場(chǎng)景下的基礎(chǔ)設(shè)施提供,需要依賴很多組件或者軟件,通過(guò)IaC能將多系統(tǒng)、多平臺(tái)在統(tǒng)一代碼中進(jìn)行描述,實(shí)現(xiàn)多系統(tǒng)、多平臺(tái)的整合。
7) 操作過(guò)程可審計(jì)。在經(jīng)過(guò)測(cè)試后的代碼上線使用時(shí),擁有執(zhí)行過(guò)程記錄,可回溯以往的執(zhí)行事件。
8) 可以實(shí)現(xiàn)自服務(wù)。開(kāi)發(fā)人員處理業(yè)務(wù)需求的時(shí)候,可以通過(guò)自服務(wù)門戶集成IaC,這樣只需要審核通過(guò)后,開(kāi)發(fā)人員即可以自我實(shí)現(xiàn)環(huán)境的上線,大大降低了對(duì)基礎(chǔ)設(shè)施管理員的依賴。
3. 實(shí)現(xiàn)IaC需要做哪些準(zhǔn)備工作?IaC落地的主要障礙有哪些?
如果要采用IaC,這里有些最佳實(shí)踐經(jīng)驗(yàn)可以分享給大家。最好提前做好以下準(zhǔn)備:
1) 使用具有可分支管理、安全、集成的源代碼管理 (SCM),可以考慮使用git。
2) 選擇經(jīng)過(guò)仔細(xì)研究和理解的工具,為編寫的基礎(chǔ)設(shè)施代碼組成自動(dòng)化引擎,例如ansible或者terraform 等。最終用戶團(tuán)隊(duì)能夠理解和使用這些工具。
3) 使用相關(guān)工具后,要在執(zhí)行后能快速獲得基礎(chǔ)設(shè)施狀態(tài)反饋,以便了解執(zhí)行狀態(tài)。
4) 制定開(kāi)發(fā)人員和基礎(chǔ)設(shè)施團(tuán)隊(duì)協(xié)作流程,制定雙方認(rèn)可的標(biāo)準(zhǔn),使提供的基礎(chǔ)設(shè)施環(huán)境能保證業(yè)務(wù)成功上線。
5) 有良好的測(cè)試環(huán)境,保證生產(chǎn)和測(cè)試場(chǎng)景下的環(huán)境一致性。
6) 要有一個(gè)安全的前端,包括帶有憑證管理的權(quán)限管理(RBAC)。
7) 可以迭代完善代碼,測(cè)試一次,快速失敗,然后繼續(xù)小步快跑前進(jìn)。
IaC落地的主要障礙有以下幾個(gè):
1) 企業(yè)服務(wù)器規(guī)模較小,管理工作相對(duì)較少,需求不強(qiáng)烈。
2) 害怕自動(dòng)化,執(zhí)行過(guò)程不放心。
3) 團(tuán)隊(duì)害怕學(xué)習(xí)新技術(shù)或者編寫代碼維護(hù)基礎(chǔ)設(shè)施。
4) 企業(yè)內(nèi)部管理流程限制,權(quán)限不足,審計(jì)要求,無(wú)法打通多組件。
4. IaC如何工作的?有哪些工具可以幫忙?
IaC的本質(zhì)是通過(guò)代碼去調(diào)用管理工具提供的API接口來(lái)對(duì)設(shè)備進(jìn)行操作。最簡(jiǎn)單的IaC工作過(guò)程如下圖所示。主要分為5個(gè)步奏:1. 編寫代碼(分支并行開(kāi)發(fā));2. 功能測(cè)試; 3. 提交代碼; 4. 變更申請(qǐng);5. 批準(zhǔn)后執(zhí)行代碼進(jìn)行環(huán)境部署。
常見(jiàn)的IaC工具有如下幾個(gè):Ansible、Terraform、AWS cloudformation、Azure Resource Manager、Google Cloud Deployment Manager、Chef、Puppet、SaltStack。
5. IaC與自動(dòng)化運(yùn)維、AIOps、DevOps有什么關(guān)系?
IaC是針對(duì)基礎(chǔ)設(shè)施進(jìn)行管理,它的落地是需要采用自動(dòng)化工具對(duì)基礎(chǔ)設(shè)施環(huán)境進(jìn)行操作,具體的操作方法是通過(guò)編寫代碼的方式實(shí)現(xiàn),對(duì)基礎(chǔ)設(shè)施的變更操作只需要修改代碼即可完成。而自動(dòng)化運(yùn)維的維度不僅僅局限在基礎(chǔ)設(shè)施上,因此他們是兩個(gè)不同的維度,IaC的落地要借助自動(dòng)化運(yùn)維的方法。
AIOps是在傳統(tǒng)運(yùn)維的基礎(chǔ)上引入人工智能,通過(guò)大數(shù)據(jù)分析或者機(jī)器學(xué)習(xí)等方法來(lái)提前感知運(yùn)維狀態(tài),進(jìn)而采用動(dòng)態(tài)的方式調(diào)整相關(guān)組件或者基礎(chǔ)設(shè)施。因此其維度更廣,IaC可以被AIOps利用,例如在發(fā)現(xiàn)業(yè)務(wù)性能瓶頸時(shí),需要對(duì)其后端服務(wù)器進(jìn)行擴(kuò)容,這樣可以提前寫好IaC針對(duì)基礎(chǔ)設(shè)施擴(kuò)容的代碼,然后AIOps將這段代碼調(diào)用起來(lái),配合其他的后續(xù)自動(dòng)化處理任務(wù),共同完成一次業(yè)務(wù)擴(kuò)容的智能運(yùn)維操作。
DevOps是近年來(lái)非常受歡迎的一套方法論,追求的是開(kāi)發(fā)和運(yùn)維一體化,從而加入軟件上線速度。在DevOps流程中IaC的作用是支持開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境的快速交付。
6. 業(yè)務(wù)全部上公有云后,是否還需要IaC?
公有云提供了業(yè)務(wù)運(yùn)行環(huán)境和通用運(yùn)維場(chǎng)景的管理,比如保證了服務(wù)器的可用性等,但是并不具備快速提供特定應(yīng)用的一致的運(yùn)行環(huán)境,IaC正好解決了公有云上的不足之處,提前規(guī)劃好IaC,有利于用戶更好地使用公有云環(huán)境。
7. 紅帽在IaC的落地上能發(fā)揮什么作用?
紅帽在IaC建設(shè)上能提供全球一流的產(chǎn)品(Red Hat Ansible Automation Platform)和技術(shù)服務(wù),同時(shí)能提供全球的經(jīng)驗(yàn)并指導(dǎo)用戶落地和掌握IaC方案,包括IaC的整體方案設(shè)計(jì)及落地及后續(xù)的維護(hù)和相關(guān)培訓(xùn),保證用戶能順利掌握IaC。
8. 您認(rèn)為目前市場(chǎng)對(duì)這個(gè)概念的認(rèn)可程度如何?
從國(guó)內(nèi)市場(chǎng)來(lái)看,對(duì)IaC的采納有行業(yè)屬性的區(qū)分,金融行業(yè)相對(duì)制造行業(yè)要更超前一些,雖然沒(méi)有全面開(kāi)展IaC的落地,但是在某些場(chǎng)景下已經(jīng)通過(guò)自動(dòng)化的方式向IaC邁進(jìn),一些IaC工作正是以自動(dòng)化的名義在進(jìn)行。紅帽在當(dāng)前國(guó)內(nèi)市場(chǎng)上所推廣的自動(dòng)化方案中,大部分都是基于IaC思想,旨在幫助客戶更高效的管理基礎(chǔ)設(shè)施,同時(shí)為客戶提供培訓(xùn),保證能力掌握。

