發(fā)布于:2021-01-06 15:35:12
0
207
0
使用基礎(chǔ)設(shè)施即代碼(IaC),您可以編寫有關(guān)基礎(chǔ)設(shè)施的計算,存儲和網(wǎng)絡(luò)要求的聲明性說明并執(zhí)行。這與平臺即代碼(PaC)相比如何?這兩個概念是如何發(fā)展的?
以最簡單的形式,任何應(yīng)用程序的技術(shù)堆棧都分為三層:包含裸機實例,虛擬機,網(wǎng)絡(luò),防火墻,安全性等的基礎(chǔ)層;具有操作系統(tǒng),運行時環(huán)境,開發(fā)工具等的平臺層;當(dāng)然還有包含您的應(yīng)用程序代碼和數(shù)據(jù)的應(yīng)用程序?qū)印R粋€典型的運營團隊除了可以部署代碼之外,還負(fù)責(zé)基礎(chǔ)層和平臺層的供應(yīng),監(jiān)視和管理。
云計算的興起首先使基礎(chǔ)層抽象化。借助基礎(chǔ)架構(gòu)即服務(wù)(IaaS)模型,IT /運營團隊只需單擊一下按鈕即可立即配置云基礎(chǔ)架構(gòu)。AWS EC2,Azure VM和Google CE是當(dāng)今使用最廣泛的IaaS服務(wù)。隨之而來的是平臺即服務(wù)(PaaS)模型,該模型抽象了下一層?;A(chǔ)設(shè)施提供商自己開始提供平臺層-操作系統(tǒng),開發(fā)工具,數(shù)據(jù)庫管理等。諸如AWS Beanstalk,Azure CDN,Google App Engine之類的PaaS服務(wù)廣受歡迎。
實際上,Ops團隊還開始構(gòu)建自己的PaaS,將選定的功能子集整合到與現(xiàn)有的基礎(chǔ)設(shè)施兼容或具有自定義工作流程的位置。如果您使用容器化或微服務(wù)范式,這可能會變得乏味且笨拙。
在構(gòu)建基于微服務(wù)的應(yīng)用程序中對規(guī)模,一致性,可重復(fù)性,可共享性和可審計性的需求迫使運營團隊考慮采用根本性的新方法來處理基礎(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é)果,無論是交付管道的自然組成部分還是打算根據(jù)特定事件進行自動擴展,置備基礎(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)地擴展和縮減基礎(chǔ)設(shè)施-在這種規(guī)模上手動管理幾乎是不可能的。
使用基礎(chǔ)架構(gòu)作為代碼,云本機應(yīng)用程序可以大規(guī)模地具有一致,可靠且受版本控制的基礎(chǔ)架構(gòu)。但是,僅IaC并不能提供最佳的應(yīng)用程序生命周期管理經(jīng)驗。該平臺仍需要由Ops團隊進行配置和管理。通過將抽象編寫為基礎(chǔ)層API的包裝器來實現(xiàn)IaC,因此,開發(fā)人員將需要為每個抽象提供新的CLI。
為了獲得流暢的開發(fā)人員體驗,僅IaC還遠遠不夠。我們需要平臺作為代碼。
平臺即代碼
平臺即代碼(PaC)是平臺層的類似抽象。PaC允許您將有關(guān)平臺層的聲明性說明(包括應(yīng)用程序的開發(fā)和操作所需的OS和其他工具)寫入代碼并執(zhí)行。
本質(zhì)上,PaC允許開發(fā)人員定義自己的平臺:也就是說,為您的應(yīng)用程序提供定制的執(zhí)行環(huán)境。對于每個應(yīng)用程序,這可能是不同的環(huán)境,有多少個應(yīng)用程序。如果Kubernetes是您的平臺,則可以像編寫應(yīng)用程序代碼一樣為平臺元素編寫YAML聲明。
與IaC不同,PaC通過抽象實現(xiàn)為Kubernetes API擴展,而不是通過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)用交付。通過通用語言進行的協(xié)作使Dev和Ops更加緊密。最重要的是,它為下一代開發(fā)生命周期工具鋪平了道路-它提供了迭代開發(fā),優(yōu)化的工作流程,輕量級的客戶端工具,可用于生產(chǎn)的CI / CD管道和以應(yīng)用程序為中心的部署自動化。