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