什么是基礎(chǔ)架構(gòu)即代碼和平臺即代碼?看完就清楚了
使用基礎(chǔ)設(shè)施即代碼(IaC),捏可以編寫有關(guān)基礎(chǔ)設(shè)施計算,存儲和網(wǎng)絡(luò)要求的聲明性說明,然后執(zhí)行該聲明。這與平臺即代碼(PaC)有什么不同?
任何應(yīng)用程序的技術(shù)堆棧都分為三層,即包含裸機實例,虛擬機,網(wǎng)絡(luò),防火墻,安全性等的基礎(chǔ)層;具有操作系統(tǒng),運行時環(huán)境,開發(fā)工具等的平臺層;當(dāng)然還有包含應(yīng)用程序代碼和數(shù)據(jù)的應(yīng)用程序?qū)印5湫偷募夹g(shù)運維團(tuán)隊除了可以部署代碼外,還負(fù)責(zé)基礎(chǔ)層和平臺層的部署,監(jiān)控和管理任務(wù)。
云計算的興起,首先讓基礎(chǔ)層得以抽象化。借助基礎(chǔ)架構(gòu)即服務(wù)(IaaS)模型,IT/運維團(tuán)隊只需通過云即可立即配置云基礎(chǔ)架構(gòu)。AWS、微軟Azure、谷歌GCE,阿里云等都提供廣泛的IaaS服務(wù),如AWS EC2。在其上的是平臺即服務(wù)(PaaS)模型。基礎(chǔ)設(shè)施提供商在云上提供平臺層,包括云操作系統(tǒng),開發(fā)工具,數(shù)據(jù)庫管理等。比如你熟悉的AWS Beanstalk,Azure CDN,Google App Engine之類的PaaS服務(wù)也廣受歡迎。
實際上,運維團(tuán)隊還自己構(gòu)建PaaS平臺,將選定的功能子集整合到與其現(xiàn)有的基礎(chǔ)架構(gòu)兼容,或具有自定義工作流程的功能。如果你使用容器化或微服務(wù)范式,這可能會讓你變得乏味且笨拙。
在構(gòu)建基于微服務(wù)的應(yīng)用程序中對規(guī)模,一致性,可重復(fù)性,可共享性和可審計性的需求,迫使運維團(tuán)隊考慮采用新方法來處理基礎(chǔ)層和平臺層。正是針對這些擔(dān)憂,出現(xiàn)了基礎(chǔ)架構(gòu)即代碼(IaC)和平臺即代碼(PaC)的概念。
基礎(chǔ)架構(gòu)即代碼
基礎(chǔ)架構(gòu)即代碼通過軟件而不是物理硬件配置或其他工具來管理和配置基礎(chǔ)架構(gòu)。使用IaC,你可以編寫有關(guān)基礎(chǔ)設(shè)施的計算,存儲和網(wǎng)絡(luò)要求的聲明性說明并執(zhí)行。然后,自動化引擎(如AWS Cloud Formation和Terraform之類的工具)將通過抽象的IaaS API捕獲聲明/代碼來為你配置它。
結(jié)果,無論是交付管道的自然組成部分,還是為了響應(yīng)特定事件而自動擴(kuò)展,供應(yīng)基礎(chǔ)設(shè)施的速度都將顯著提高。如果你使用dev,QA,staging,prod等多種環(huán)境,則使用同一代碼庫啟動基礎(chǔ)結(jié)構(gòu)可確保一致性,并通過減少錯誤配置,停機等風(fēng)險等來節(jié)省大量時間和可能的麻煩。變更管理也變得非常重要,而且更簡單。你可以編寫代碼來更新基礎(chǔ)結(jié)構(gòu),并具有完整的版本控制。
這對云上的容器化應(yīng)用程序特別有影響:
- 容器化和微服務(wù)啟動了數(shù)百個小型應(yīng)用程序,而不是像以前的開發(fā)范例中那樣使用少數(shù)大型實例。在這樣的規(guī)模下,開發(fā)過程將存在時間滯后,從而嚴(yán)重影響敏捷性。
- 在多云部署中,數(shù)百/數(shù)千個應(yīng)用程序的可重復(fù)性對于交付一致的客戶體驗至關(guān)重要。
- 云計算的付費機制,使其謹(jǐn)慎地根據(jù)需要動態(tài)擴(kuò)展和縮減基礎(chǔ)架構(gòu),在這種規(guī)模上幾乎無法手動進(jìn)行管理。
使用基礎(chǔ)架構(gòu)即代碼,云本機應(yīng)用程序可以大規(guī)模地具有一致,可靠且受版本控制的基礎(chǔ)架構(gòu)。但是,僅IaC并不能提供最佳的應(yīng)用程序生命周期管理經(jīng)驗。該平臺仍需要由運維團(tuán)隊進(jìn)行配置和管理。IaC是通過將抽象作為基礎(chǔ)層API的包裝程序來實現(xiàn)的,因此,開發(fā)人員將需要為每個抽象提供新的CLI。
為了獲得流暢的開發(fā)人員體驗,僅IaC還遠(yuǎn)遠(yuǎn)不夠。我們需要平臺即代碼。
平臺即代碼
平臺即代碼(PaC)是平臺層的抽象。PaC允許將有關(guān)平臺層的聲明性說明,包括應(yīng)用程序的開發(fā)和操作所需的操作系統(tǒng)和其他工具寫入代碼并執(zhí)行。
本質(zhì)上,PaC允許開發(fā)人員定義自己的平臺。也就是說,為應(yīng)用程序提供定制的執(zhí)行環(huán)境。對于每個應(yīng)用程序來說,這可能是不同的環(huán)境,它們有多少個。如果Kubernetes是你選擇平臺,則可以像編寫應(yīng)用程序代碼一樣為平臺元素編寫YAML聲明。
與IaC不同,PaC通過抽象實現(xiàn)為Kubernetes API擴(kuò)展,而不是通過k8s API編寫包裝器。因此,PaC抽象成為一流的實體,允許開發(fā)人員使用kubectl和YAML提供聲明性指令。
自動化所節(jié)省的時間和精力不言而喻。但是,在Kubernetes上PaC的真正價值在于,即使開發(fā)人員正在為其K8s集群創(chuàng)建自定義平臺堆棧,它也將具有可重復(fù)性和可控制性。這將確保應(yīng)用程序的開發(fā)/生產(chǎn)的奇偶性。所有平臺元素,例如YAML文件,管理員清單等都是可共享的。使用Kubernetes Operators還可以在多云環(huán)境中一致地部署。
平臺即代碼范例,已實現(xiàn)了大規(guī)模,高效,一致,可重復(fù)的企業(yè)應(yīng)用交付。通過通用語言進(jìn)行協(xié)作,使開發(fā)(Dev)和運維(Ops)更加緊密。最重要的是,它為下一代開發(fā)生命周期工具鋪平了道路。它提供了迭代開發(fā),優(yōu)化的工作流,輕量級的客戶端工具,可用于生產(chǎn)的CI/CD管道和以應(yīng)用程序為中心的部署自動化。


























