基礎(chǔ)設(shè)施即代碼(IaC)是一套IT基礎(chǔ)設(shè)施管理流程,強調(diào)將DevOps軟件開發(fā)最佳實踐引入云基礎(chǔ)設(shè)施的資源管理當中。
硬件虛擬化技術(shù)的全面普及催生出云基礎(chǔ)設(shè)施托管這波全新機遇。云托管服務(wù)商開始直接為客戶提供對于動態(tài)基礎(chǔ)設(shè)施即服務(wù)(IaaS)平臺的訪問通道。隨著這類平臺的快速發(fā)展以及基礎(chǔ)設(shè)施資產(chǎn)復(fù)雜性的不斷提升,傳統(tǒng)系統(tǒng)管理角色的工作內(nèi)容也變得愈加繁復(fù)。大規(guī)模云基礎(chǔ)設(shè)施的快速配置與統(tǒng)籌管理,開始成為困擾管理人員的新難題。
持續(xù)集成/持續(xù)部署(CI/CD)的成功激發(fā)了基礎(chǔ)設(shè)施即代碼(IaC),即使用代碼對基礎(chǔ)設(shè)施進行建模的新思路。DevOps則證明只要將代碼提交至Git repo,再通過功能分支及pull請求即可建立極為高效的工作流。借助這類已經(jīng)在軟件開發(fā)自動化領(lǐng)域大放異彩的全新工作流,相信云系統(tǒng)的管理復(fù)雜度問題也將迎刃而解。
基礎(chǔ)設(shè)施即代碼是一套IT基礎(chǔ)設(shè)施管理流程,強調(diào)將DevOps軟件開發(fā)最佳實踐引入云基礎(chǔ)設(shè)施的資源管理當中,包括虛擬機、網(wǎng)絡(luò)、負載均衡器、數(shù)據(jù)庫及其他聯(lián)網(wǎng)應(yīng)用程序在內(nèi)的各類基礎(chǔ)設(shè)施資源均適用于這種新流程。
IaC代表著一種配置管理形式,可以將企業(yè)組織的基礎(chǔ)設(shè)施資源編碼為文本文件,再將這些基礎(chǔ)設(shè)施文件提交至Git等版本控制系統(tǒng)。版本控制repo支持功能分支及pull請求等工作流,而這些正是建立CI/CD體系的基本要素。
基礎(chǔ)設(shè)施即代碼的實現(xiàn),離不開云基礎(chǔ)設(shè)施托管平臺,特別是IaaS平臺的興起。IaaS允許我們通過遠程API按需供應(yīng)并申請云資源,這些API在本質(zhì)上屬于提交至基礎(chǔ)設(shè)施的配置文件的屬性設(shè)置模板。Iac的自動化功能則可獲取這些配置文件,并針對遠程IaaS API加以運行。
在團隊將基礎(chǔ)設(shè)施配置提交至版本控制repo后,即可將CI/CD實踐應(yīng)用于基礎(chǔ)設(shè)施變更?;A(chǔ)設(shè)施的更新同樣可以遵循DevOps工作流程。如果團隊成員編輯了其中某一配置文本文件,則可以使用pull請求及代碼審查工作流對編輯結(jié)果的正確性進行審核與驗證。
IaC的持續(xù)演進,是為了幫助用戶解決“環(huán)境漂移”的問題。云應(yīng)用程序在其發(fā)布生命周期的各個階段中往往有著相互獨立的部署環(huán)境,具體包括開發(fā)、登臺、生產(chǎn)等環(huán)境類型,而不同環(huán)境又對應(yīng)不同的網(wǎng)絡(luò)資源,例如應(yīng)用程序服務(wù)器、負載均衡器與數(shù)據(jù)庫等。當這些特殊環(huán)境之間的基礎(chǔ)設(shè)施未能同步時,即引發(fā)所謂環(huán)境漂移。
如果沒有IaC的支持,基礎(chǔ)設(shè)施管理將是一個混亂且脆弱的過程。系統(tǒng)管理員只能手動接入遠程云服務(wù)商,并使用API或Web儀表板對新硬件及資源加以配置。這種手動工作流缺乏對應(yīng)用程序基礎(chǔ)設(shè)施的整體視圖,管理員很可能在更改了一套環(huán)境后,卻忘記了對另一環(huán)境做出相應(yīng)變更。正是因為這樣,環(huán)境漂移才會頻頻發(fā)生。
環(huán)境漂移是一種昂貴的商業(yè)浪費,錯誤與故障的根源永遠是團隊在登臺或開發(fā)環(huán)境中的構(gòu)建成果未能與最終部署時的生產(chǎn)環(huán)境相同步,迫使成員不得不耗費大量時間調(diào)查原因并補全缺失內(nèi)容。
沒有IaC,基礎(chǔ)設(shè)施的手動管理在速度方面同樣令人抓狂。受到環(huán)境漂移、流量峰值或者其他特定問題的影響,如果我們明確需要對基礎(chǔ)設(shè)施做出某些變更,則系統(tǒng)管理員的響應(yīng)與適配時長根本無法預(yù)測或控制。由此引發(fā)的服務(wù)中斷會打擊客戶信心。而在IaC的幫助下,基礎(chǔ)設(shè)施能夠自動適應(yīng)配置變化,并通過自動擴展功能對流量峰值做出反應(yīng)。
基礎(chǔ)設(shè)施即代碼還為手動系統(tǒng)管理提供更理想的監(jiān)督能力與可見性。在將基礎(chǔ)設(shè)施配置文件提交至中央版本控制repo之后,所有團隊成員都能查看并編輯基礎(chǔ)設(shè)施數(shù)據(jù),由此實現(xiàn)強大的審計能力。例如,如果團隊需要接受PCI合規(guī)性審計,則應(yīng)當明確基礎(chǔ)設(shè)施中的特定部分是否使用SSL進行了加密。在IaC的支持下,可以快速查看SSL的配置方式并執(zhí)行相關(guān)代碼,確保當前基礎(chǔ)設(shè)施與配置文件完全相符,即正確啟用SSL。版本控制提交歷史也可作為日志記錄使用,用于審查各項變更何時添加、何時被移除。
要全面實現(xiàn)基礎(chǔ)設(shè)施即代碼,我們需要準備一系列依賴項。
首先,也是最重要的依賴項,就是遠程訪問托管。配置管理工具需要接入并修改該遠程主機。如果遠程基礎(chǔ)設(shè)施具備自我管理能力,我們就要確保團隊能夠隨時訪問其配置管理工具。而IaaS云托管平臺則提供API,允許用戶根據(jù)需要自動創(chuàng)建、刪除及修改基礎(chǔ)設(shè)施資源。配置管理工具同樣可以訪問這些API,借此將相關(guān)操作任務(wù)轉(zhuǎn)為自動化形式。目前流行的IaaS平臺包括Digital Ocean、Amazon AWS以及微軟Azure。
實現(xiàn)IaC的下一項要求,則是接入IaaS API并負責自動執(zhí)行常規(guī)任務(wù)的工具套件。團隊當然可以自主創(chuàng)建一組腳本及工具,但這會帶來大量的開發(fā)負擔與后續(xù)維護成本,投資回報也往往不高。目前市面上已經(jīng)有多種開源配置管理平臺用于解決這類需求,包括Terraform、Ansible、Salt Stack以及Chef等。
最后是版本控制系統(tǒng)。配置管理平臺使用以YAMl等標記語言編寫的、人類及機器皆可讀取的文本文件對平臺將要執(zhí)行的任務(wù)及序列做出聲明。這類文本文件作為應(yīng)用代碼文件存在,并被存儲在版本控制系統(tǒng)repo當中。這套repo相當于集中指定來源,同時支持pull請求及代碼審查。目前最流行的版本控制系統(tǒng)當數(shù)Git。
有了以上依賴項,我們設(shè)想以下示例場景,其中開發(fā)人員希望向系統(tǒng)當中添加新的應(yīng)用程序服務(wù)。下面來看IaC工作流演示:
1. 開發(fā)人員在選定的配置管理平臺Terraform中編輯YAML配置文本文件,由此指定所需的新托管服務(wù)器。
2. 開發(fā)人員將編輯結(jié)果提交至Git repo中的功能分支。由于項目的Git repo托管在Bitbucket上,因此開發(fā)者會開啟一項pull請求。其他團隊成員負責審查這項pull請求,并發(fā)現(xiàn)其中包含基礎(chǔ)設(shè)施變更。后者批準此項pull請求,而后由之前的開發(fā)人員將提交結(jié)合提交并合并至repo的主分支當中。
3. 到這里,我們需要使用配置平臺以執(zhí)行更新。這項更新可以由開發(fā)人員手動觸發(fā)。本場景中的團隊使用的是Bitbucket,因此可以訪問Bitbucket Pipelines以使用管道自動執(zhí)行此步驟。
4. 執(zhí)行完成后,Terraform將與團隊的IaaS進行交互。Terraform將針對IaaS API執(zhí)行一系列命令,確保IaaS與預(yù)期的基礎(chǔ)設(shè)施配置保持同步。
IaC是一種高效的配置管理形式,專注于實現(xiàn)云IT基礎(chǔ)設(shè)施的自動化管理。在IaC部署到位之后,即可用于實現(xiàn)CI/CD層級的自動化功能,高效調(diào)整項目的基礎(chǔ)設(shè)施。IaC還針對基礎(chǔ)設(shè)施變更當中的溝通及透明度因素提供多種有益見解。至于IaC在實現(xiàn)當中所需要的托管平臺及自動化工具等依賴項,目前市面上已經(jīng)有眾多托管廠商提供廣泛的解決方案以供選擇。
? ? ? ? ? ? ? ?Copyright 2020-2026 同袍存儲 粵ICP備2021121885號網(wǎng)站地圖