對(duì)于任何一個(gè)力,都存在著一個(gè)與其大小相等方向相反的反作用力。這個(gè)物理學(xué)上的牛頓第三定律也同樣適用于IaC:雖然這一服務(wù)是有優(yōu)勢(shì)的,但它也帶來(lái)了一些問(wèn)題。
本文是針對(duì)混合云和多個(gè)云管理使用基礎(chǔ)設(shè)施即代碼系列中的第二部分??牲c(diǎn)擊閱讀第一部分。
基礎(chǔ)設(shè)施即代碼是一個(gè)強(qiáng)大的工具,它可以幫助簡(jiǎn)化混合云和多個(gè)云的管理工作,因?yàn)樗軌驅(qū)崿F(xiàn)服務(wù)器、容器以及虛擬機(jī)的部署與配置操作的自動(dòng)化。但是,它也可能會(huì)導(dǎo)致出現(xiàn)低效過(guò)程、部署錯(cuò)誤以及常見(jiàn)混亂等問(wèn)題。那么,用戶應(yīng)當(dāng)如何解決實(shí)施能夠確定成功與否的基礎(chǔ)設(shè)施即代碼所帶來(lái)的挑戰(zhàn)呢?
在實(shí)施基礎(chǔ)設(shè)施即代碼過(guò)程中,大多數(shù)企業(yè)所遇到的第一個(gè)挑戰(zhàn)就是在開(kāi)發(fā)人員和運(yùn)營(yíng)團(tuán)隊(duì)之間創(chuàng)建一個(gè)和諧融洽的平穩(wěn)關(guān)系。在過(guò)去,開(kāi)發(fā)人員在為應(yīng)用程序設(shè)置托管平臺(tái)時(shí)幾乎很難有所作為。這就會(huì)帶來(lái)問(wèn)題,尤其是在從應(yīng)用程序測(cè)試到實(shí)際生產(chǎn)的過(guò)渡過(guò)程中更是如此。在大型企業(yè)中最常用的開(kāi)發(fā)運(yùn)營(yíng)工具能夠有助于推動(dòng)開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)營(yíng)團(tuán)隊(duì)之間的協(xié)作。但是,對(duì)于那些缺乏開(kāi)發(fā)運(yùn)營(yíng)理念與工具以及相關(guān)企業(yè)文化的公司來(lái)說(shuō),實(shí)施一個(gè)混合云或多個(gè)云可能是第一次需要這樣一種合作。
如果企業(yè)用戶在開(kāi)發(fā)初期就將應(yīng)用與特定平臺(tái)相互關(guān)聯(lián),然后讓這些平臺(tái)需求推動(dòng)基礎(chǔ)設(shè)施策略貫穿整個(gè)應(yīng)用程序生命周期管理直至最后生產(chǎn),那么實(shí)施一次基礎(chǔ)設(shè)施即代碼還較為容易完成的。此外,當(dāng)虛擬平臺(tái)數(shù)量是可管理時(shí),這一目標(biāo)也是較為容易實(shí)現(xiàn)的。這些虛擬平臺(tái)是應(yīng)用開(kāi)發(fā)的目標(biāo),它們可用于在所有云中或者數(shù)據(jù)中心資源(應(yīng)用就是在數(shù)據(jù)中心資源上運(yùn)行的)上部署應(yīng)用。仔細(xì)定義這些虛擬平臺(tái)并讓開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)營(yíng)團(tuán)隊(duì)使用它們作為各自工作的重點(diǎn)。
不要模糊不同角色之間的界限
第二個(gè)挑戰(zhàn)就是確?;A(chǔ)設(shè)施即代碼和開(kāi)發(fā)運(yùn)營(yíng)團(tuán)隊(duì)在混合云和多個(gè)云管理策略中各司其職,正常發(fā)揮合適的作用。開(kāi)發(fā)運(yùn)營(yíng)主要關(guān)注應(yīng)用程序部署,而基礎(chǔ)設(shè)施即代碼則主要負(fù)責(zé)資源配置管理。亞馬遜網(wǎng)絡(luò)服務(wù)(AWS)提供了開(kāi)發(fā)運(yùn)營(yíng)工具Chef作為其云服務(wù)的部署管理工具,這一事實(shí)表明兩者之間的界限有可能會(huì)發(fā)生模糊。事實(shí)上,最常見(jiàn)的基礎(chǔ)設(shè)施即代碼工具是開(kāi)發(fā)運(yùn)營(yíng)的一部分。這一狀況可能會(huì)造成開(kāi)發(fā)團(tuán)隊(duì)和運(yùn)營(yíng)團(tuán)隊(duì)之間的持續(xù)混亂。
除非用戶純粹出于服務(wù)器整合的目的來(lái)使用云服務(wù),希望還需要開(kāi)發(fā)運(yùn)營(yíng)來(lái)實(shí)現(xiàn)部署自定義和應(yīng)用程序生命周期管理的簡(jiǎn)化。對(duì)于企業(yè)用戶來(lái)說(shuō),如果沒(méi)有正確好用的工具集,那么部署多層次、多組件應(yīng)用程序并保持一致地正確協(xié)調(diào)應(yīng)用程序響應(yīng)云計(jì)算或數(shù)據(jù)中心故障將是一項(xiàng)非常困難的任務(wù)。即便用戶并不立即需要所有的開(kāi)發(fā)運(yùn)營(yíng)能力 ,那么也可以選擇一個(gè)開(kāi)發(fā)運(yùn)營(yíng)工具,例如Chef、Puppet、Ansible或Salt等,然后采用其基礎(chǔ)設(shè)施即代碼方法。
不要千篇一律地對(duì)待所有的云服務(wù)供應(yīng)商
當(dāng)使用基礎(chǔ)設(shè)施即代碼來(lái)簡(jiǎn)化混合云和多個(gè)云管理時(shí),第三個(gè)挑戰(zhàn)就是解決不同云托管環(huán)境之間的差異性問(wèn)題。大多數(shù)用戶最終將使用一個(gè)混合云計(jì)算模式或多個(gè)云模式,而其中很多人已經(jīng)這樣做了。每一家公共云供應(yīng)商都有一個(gè)不同的管理框架,他們報(bào)告問(wèn)題的方式也不一樣,如果發(fā)生錯(cuò)誤所需要采取的補(bǔ)救措施也不相同。管理這些問(wèn)題將讓開(kāi)發(fā)運(yùn)營(yíng)所部屬的和基礎(chǔ)設(shè)施即代碼所控制配置的應(yīng)用程序之間的界限變得模糊起來(lái)。
按照用戶開(kāi)發(fā)運(yùn)營(yíng)工具供應(yīng)商的建議來(lái)區(qū)分定義,何種情況由基礎(chǔ)設(shè)施即代碼層來(lái)處理,何種情況在開(kāi)發(fā)運(yùn)營(yíng)層作為“事件”上報(bào)。確定用戶所計(jì)劃做出的任何變更是否會(huì)影響如何部署虛擬平臺(tái),或者如何部署應(yīng)用程序本身。在第一種情況下,可考慮重新部署資源,例如虛擬機(jī)或容器;而在第二種情況下,可考慮重新部署應(yīng)用組件。例如,如果用戶必須擴(kuò)展應(yīng)用程序中一個(gè)組件,那么相關(guān)變更必須發(fā)生在開(kāi)發(fā)運(yùn)營(yíng)層,但如果用戶必須更換故障組件,那么有可能應(yīng)在基礎(chǔ)設(shè)施即代碼層實(shí)施這一操作。
云供應(yīng)商有不同的網(wǎng)絡(luò)服務(wù),這一事實(shí)就帶來(lái)了下一個(gè)挑戰(zhàn)?;A(chǔ)設(shè)施即服務(wù)和基本容器服務(wù)在應(yīng)用鏡像外提供了最小的中間件。但是一些供應(yīng)商(例如AWS和微軟Azure)提供的網(wǎng)絡(luò)服務(wù)從本質(zhì)上說(shuō)就是云托管的中間件。云供應(yīng)商提供這些網(wǎng)絡(luò)服務(wù)的形式各有不同,或者在某些情況下,他們甚至都完全不提供這些網(wǎng)絡(luò)服務(wù)。
由于不同的托管環(huán)境無(wú)法提供相同的功能,所以應(yīng)用無(wú)法具備跨不同托管環(huán)境的可移植性。如果不可能在多家云計(jì)算供應(yīng)商之間實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)的一致性,那么應(yīng)當(dāng)明確命名虛擬平臺(tái)以表明它們是不可移植的。如果用戶所使用的所有平臺(tái)上必要的網(wǎng)絡(luò)服務(wù)可用,但需要不同的部署配置,那么用戶可以使用基礎(chǔ)設(shè)施即代碼腳本程序來(lái)為用戶虛擬平臺(tái)定義多個(gè)托管選項(xiàng)。
不要碎片化實(shí)施基礎(chǔ)設(shè)施即代碼
實(shí)施基礎(chǔ)設(shè)施即代碼的最后一個(gè)挑戰(zhàn)就是配置外部的小修小補(bǔ)。讓基礎(chǔ)設(shè)施即代碼在斷開(kāi)連接的碎片環(huán)境中正常運(yùn)行是非常困難的,同樣讓企業(yè)在缺乏基礎(chǔ)設(shè)施即代碼工具或腳本程序的情況下做出某些配置變更也是非常不容易的。例如,運(yùn)營(yíng)團(tuán)隊(duì)經(jīng)常會(huì)在不更改基礎(chǔ)設(shè)施即代碼腳本程序或模式的情況下做出一些配置變更以適應(yīng)新的軟件版本。這就意味著這些腳本程序?qū)⒉辉俨渴鹜泄芘渲玫恼_版本。
解決這個(gè)問(wèn)題需要執(zhí)行嚴(yán)格的運(yùn)行紀(jì)律。如果沒(méi)有通過(guò)正式的變更管理系統(tǒng)將這個(gè)變更記錄在冊(cè),那么運(yùn)營(yíng)團(tuán)隊(duì)就絕不應(yīng)當(dāng)對(duì)系統(tǒng)或云配置做出這樣一個(gè)變更操作。當(dāng)他們確實(shí)需要做出變更時(shí),他們應(yīng)當(dāng)修改基礎(chǔ)設(shè)施即代碼腳本程序并按要求重新配置,然后將相關(guān)變更登記在冊(cè)。無(wú)論何時(shí)運(yùn)營(yíng)團(tuán)隊(duì)修改了基礎(chǔ)設(shè)施即代碼的腳本程序,他們都必須將這個(gè)變更反饋給開(kāi)發(fā)團(tuán)隊(duì)以便針對(duì)應(yīng)用程序需要驗(yàn)證該變更。
基礎(chǔ)設(shè)施即代碼是基于配置管理和開(kāi)發(fā)運(yùn)營(yíng)的一種發(fā)展,但他也是一個(gè)新興的范例。為基礎(chǔ)設(shè)施即代碼的未來(lái)做好規(guī)劃是非常重要的,否則用戶將面臨無(wú)法發(fā)揮混合云和多個(gè)云管理部署全部潛力的風(fēng)險(xiǎn)。