溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動化配置與編排

發(fā)布時間:2021-10-25 11:04:28 來源:億速云 閱讀:130 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章給大家分享的是有關(guān)基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動化配置與編排的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

云上運(yùn)維,那就是和云上資源和產(chǎn)品打交道,無疑會涉及到一系列的資源部署。比如簡單地使用一臺云服務(wù)器,就需要運(yùn)維人員依次創(chuàng)建 VPC、VSwitch、安全組和云服務(wù)器實(shí)例,如果想創(chuàng)建一個集群,那還要進(jìn)一步創(chuàng)建負(fù)載均衡、數(shù)據(jù)庫和多個云服務(wù)器實(shí)例。

隨著業(yè)務(wù)規(guī)模的不斷擴(kuò)大,IT系統(tǒng)和環(huán)境日益復(fù)雜,人工一個一個創(chuàng)建資源的方式顯然不可取,許多人正在轉(zhuǎn)向自動化資源部署和配置的工具。

本文將基于基礎(chǔ)設(shè)施即代碼 IaC 理念,分享如何借助自動化編排工具實(shí)現(xiàn)自動化部署,使得運(yùn)上運(yùn)維工作更為高效。

手動/半手動云上運(yùn)維的五大痛點(diǎn)

對于云上資源的部署,如果你的云上運(yùn)維還處于手動或是半手動運(yùn)維階段,那么大部分工作是通過控制臺選擇特定資源規(guī)格參數(shù)進(jìn)行創(chuàng)建,還有一部分是使用  CLI(如 aliyun-cli)或者 SDK  直接調(diào)用接口來創(chuàng)建資源。但隨著企業(yè)的云上業(yè)務(wù)規(guī)模不斷擴(kuò)大,不論是哪種方式,或多或少都會遇到下述五個問題:

  • 部署效率低。手動創(chuàng)建對于創(chuàng)建少量種類的資源來說倒是種很直觀的方式,但一旦涉及到大量不同資源時,尤其是資源之間還有依賴關(guān)系,這時候會發(fā)現(xiàn)需要在不同的產(chǎn)品控制臺之間來回切換,還要時刻關(guān)注創(chuàng)建進(jìn)度,才能再去創(chuàng)建下一個依賴它的資源,整個過程所耗費(fèi)的時間和精力可想而知,相信不少人有深有體會。

  • 可復(fù)制性差。當(dāng)手動創(chuàng)建好了一系列的資源后,如果需要針對不同的環(huán)境(如預(yù)發(fā)、測試和生產(chǎn))或不同的地域(如北京和上海)創(chuàng)建完全相同的資源,則又需要花費(fèi)很多時間一步步地進(jìn)行操作,無法直接復(fù)制、做到一鍵部署。

  • 一致性差。手動創(chuàng)建還有一個非常大的問題,那就是非常容易出現(xiàn)配置錯誤,很難保證兩套環(huán)境中各個資源配置是完全相同的。

  • 管理困難。資源的創(chuàng)建只是開始,可能還需要針對這批資源做擴(kuò)縮容、更新特定資源的規(guī)格等操作。但手動運(yùn)維的方式就導(dǎo)致沒有統(tǒng)一管理這批資源的入口,仍需要分別到各產(chǎn)品控制臺上操作。隨著資源數(shù)越來越多,資源管理就愈發(fā)難以維護(hù)。

  • 難以 DevOps。每次開發(fā)、測試或部署軟件應(yīng)用程序時都可能需要手動部署基礎(chǔ)設(shè)施,既無法對基礎(chǔ)設(shè)施進(jìn)行版本控制,也無法對其變動進(jìn)行評審,更無法做到敏捷部署。 

其實(shí),我們都知道這些問題的背后是因?yàn)橘Y源的部署還未做到自動化。但這些問題也不斷促使著我們思考應(yīng)該通過什么樣的方式來解決這些痛點(diǎn),才能讓整個資源部署過程自動化。

引入基礎(chǔ)設(shè)施即代碼 IaC 理念,實(shí)現(xiàn)云上資源自動化部署

在真正做到自動化部署之前,不妨回頭看看所需要創(chuàng)建的云服務(wù)資源(如 VPC、VSwitch、ECS  實(shí)例等),它們相對于Web服務(wù)等應(yīng)用程序來說都是云上的基礎(chǔ)設(shè)施,如果把這些基礎(chǔ)設(shè)施想象成一段“代碼”,在“代碼”中定義產(chǎn)品、規(guī)格、數(shù)量等信息,那么是不是就可以通過這段“代碼”來管理整個基礎(chǔ)設(shè)施了呢?

這就是基礎(chǔ)設(shè)施即代碼Infrastructure as Code(IaC)的理念,將基礎(chǔ)設(shè)施配置視為軟件編程。Kief Morris 在《Infarftruce as Code》一書中對基礎(chǔ)設(shè)施即代碼是這么定義的:

“基礎(chǔ)設(shè)施即代碼是一種使用新的技術(shù)來構(gòu)建和管理動態(tài)基礎(chǔ)設(shè)施的方式。它把基礎(chǔ)設(shè)施、工具和服務(wù)以及對基礎(chǔ)設(shè)施的管理本身作為一個軟件系統(tǒng),采納軟件工程實(shí)踐以結(jié)構(gòu)化的安全的方式來管理對系統(tǒng)的變更?!?/p>

引入 IaC 的理念,運(yùn)維人員可以將基礎(chǔ)設(shè)施的部署和管理過程變得敏捷:

  • 在模板(寬泛意義上的代碼)中定義基礎(chǔ)設(shè)施,即各類云資源及其規(guī)格、數(shù)量等屬性、云資源之間的依賴;

  • 使用版本控制(如 Git)管理模板,并提交評審;

  • 通過評審后由自動化部署工具使用模板來創(chuàng)建/更新基礎(chǔ)設(shè)施; 

基礎(chǔ)設(shè)施的部署和管理變得便捷后,上述提到的手動運(yùn)維/半手動運(yùn)維的痛點(diǎn)問題就可以得到很好的解決:

  • 提升部署效率。使用自動化部署工具進(jìn)行部署,相對于人工部署的效率將大大提升。

  • 標(biāo)準(zhǔn)化和一致性。將基礎(chǔ)設(shè)施的內(nèi)容通過模板的形式保存,對基礎(chǔ)設(shè)施的變更由對模板的變更來實(shí)現(xiàn),實(shí)現(xiàn)了基礎(chǔ)設(shè)施管理的標(biāo)準(zhǔn)化。此外,使用相同的模板在不同地域部署,也能夠保證資源的一致性。

  • 易于管理。對基礎(chǔ)設(shè)施的管理不再分散于各個產(chǎn)品控制臺,而統(tǒng)一到單個模板,使得管理成本大大降低。

  • 敏捷化工作流程。通過基礎(chǔ)設(shè)施管理流程的規(guī)范化和標(biāo)準(zhǔn)化,資源部署的整個過程就變得敏捷。

  • 審計(jì)和回滾。對模板進(jìn)行版本管理,使得對基礎(chǔ)設(shè)施變動的審計(jì)和回退到某個特定版本成為了可能。

四個常見的 IaC 自動化配置與編排工具

當(dāng)前,有很多 IaC 自動化部署工具,有第三方資源編排工具,也有云服務(wù)商提供的云原生的資源編排工具,這里介紹四個自動化配置與編排工具:

  1. 阿里云資源編排服務(wù) ROS(Resource Orchestration  Service),這是云原生編排工具,通過編寫 JSON/YAML  格式的模板,在模板中定義所需的ECS實(shí)例、數(shù)據(jù)庫實(shí)例等云服務(wù)資源以及資源依賴關(guān)系等,然后再根據(jù)模板在 ROS 中創(chuàng)建資源棧,ROS  服務(wù)端將根據(jù)模板自動完成所有資源的創(chuàng)建和配置,實(shí)現(xiàn)自動化部署及運(yùn)維。而資源棧則管理著模板中定義的所有資源,并可通過新模板來更新資源棧,包括資源的新增、更新或刪除等操作。

  2. AWS CloudFormation,也是云原生的編排工具,運(yùn)維人員也是通過 JSON/YAML 格式的模板定義云服務(wù)資源,通過資源棧管理這些資源。

  3. HashiCorp Terraform,這是一個開源的自動化編排工具。以配置文件為驅(qū)動,可以在文件中定義所要管理的組件,即基礎(chǔ)設(shè)施資源,以此生成一個可執(zhí)行的計(jì)劃,通過執(zhí)行這個計(jì)劃來完成所定義組件的創(chuàng)建,增量式的變更和持續(xù)的管理。如果不可執(zhí)行,會提示報錯。Terraform  不僅可以管理 IaaS 層的資源,如計(jì)算實(shí)例、網(wǎng)絡(luò)實(shí)例和存儲實(shí)例等,也可以管理更上層的服務(wù),如DNS 域名和解析記錄、SaaS 應(yīng)用的功能等。

  4. Pulumi,與 Terraform 一樣也是開源項(xiàng)目,但它與 Terraform 的重要區(qū)別在于:可以用熟悉的編程語言來編寫聲明式配置,而不需要額外學(xué)習(xí)云服務(wù)商特定的模板語言來寫配置。

對于自動化配置與編排工具的選擇,筆者的建議是:

  1. 如果你的業(yè)務(wù)部署在單一云平臺,就選擇云平臺提供的資源編排工具,在阿里云平臺就用 ROS、在 AWS 平臺就用  CloudFormation,原因很簡單:云平臺提供的工具是云原生,是免費(fèi)的托管服務(wù),在服務(wù)端就可以執(zhí)行自動化部署;同時,它還實(shí)現(xiàn)了云原生的訪問控制、編排資源與實(shí)際資源差異檢測等功能,用起來比較省心。

  2. 如果你的業(yè)務(wù)是部署在多個云平臺,建議使用第三方的 Terraform 和 Pulumi,因?yàn)樗粌H可以進(jìn)行多云資源的部署和管理,還能管理除云以外的其他資源,如 Kubernetes。 

如何利用編排工具進(jìn)行自動化部署和管理?

對于運(yùn)維人員來說,使用 IaC 理念的自動化部署工具的門檻其實(shí)不高,使用步驟也非常簡單,主要來說就是編寫模板和使用模板。這里談?wù)劸帉懩0搴褪褂媚0逵心男┳⒁馐马?xiàng),如何才能更好地利用工具、更好地提升運(yùn)維效率。

1、編寫模板的三個注意事項(xiàng)

確認(rèn)好自動化部署工具,就可以根據(jù)不同工具的模板語言來編寫對應(yīng)的模板文件。如果你選擇云服務(wù)商提供的云原生的編排工具, 編寫模板這里,有三點(diǎn)注意事項(xiàng)想重點(diǎn)提醒一下:

  1. 注意資源的依賴關(guān)系。不恰當(dāng)?shù)囊蕾嚮蛏倭艘蕾嚩紩?dǎo)致資源創(chuàng)建出錯。

  2. 注意使用通用屬性作為參數(shù)。比如實(shí)例規(guī)格等就是比較通用的屬性,建議使用同一份模板,指定不同的參數(shù)來達(dá)到部署不同規(guī)格實(shí)例的目的。

  3. 使用有價值的屬性作為輸出。比如實(shí)例 ID、連接地址等內(nèi)容就是有價值的屬性,它們都是在資源創(chuàng)建完成后才能獲取到,把這些屬性作為整個模板的輸出,可以方便后續(xù)的查看和管理。

2、自動解析依賴關(guān)系,自動化部署基礎(chǔ)設(shè)施

編寫完模板后,就可以通過對應(yīng)的自動化部署工具將模板轉(zhuǎn)化為真正的資源。上述提到的編排工具都能解析資源的依賴關(guān)系,并能先后創(chuàng)建這些資源。同時,對于互不依賴的資源也能夠并行創(chuàng)建。

  • 對于阿里云 ROS 和 AWS CloudFormation 來說,可使用模板來創(chuàng)建一個資源棧。一個資源棧即一組云上資源,也就是在模板中定義的基礎(chǔ)設(shè)施。后續(xù)當(dāng)需要增/刪/改一些資源時,也是通過使用模板來更新資源棧來達(dá)到目的。

  • 對于 Terraform 來說,可使用配置文件生成一個可執(zhí)行的計(jì)劃,通過執(zhí)行這個計(jì)劃來完成所定義資源/組件的創(chuàng)建,增量式的變更和持續(xù)的管理。

  • 對于 Pulumi 來說,則是直接執(zhí)行代碼來進(jìn)行部署。

這樣的部署方式既能使得資源能按照合理的順序創(chuàng)建出來,又能夠提升部署效率,在遇到異常情況時也會進(jìn)行一定程度的重試,真正讓整個自動化部署過程變得穩(wěn)定和高效。

以基礎(chǔ)設(shè)施代碼化為基礎(chǔ),進(jìn)一步高效運(yùn)維

當(dāng)運(yùn)維工作完成整個基礎(chǔ)設(shè)施模板化后,DevOps 就變得更加容易。我們可以使用版本管理工具(如  Git)管理描述當(dāng)前基礎(chǔ)設(shè)施的模板,使用阿里云云效/AWS CodePipline/Jenkins  創(chuàng)建一個從代碼提交觸發(fā)到人工卡點(diǎn)再到資源棧部署的流水線,這樣整個基礎(chǔ)設(shè)施的管理就會變得更加敏捷和自動化。

基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動化配置與編排

圖1: 基礎(chǔ)設(shè)施變更的流程圖

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 在每次變更模板后,將本地倉庫的分支內(nèi)容推送到遠(yuǎn)程倉庫,并發(fā)起評審;

  3. 若評審不通過,則修改模板后重新發(fā)起評審;若評審?fù)ㄟ^,則自動觸發(fā)流水線;

  4. 流水線觸發(fā)人工卡點(diǎn),通知上級管理員檢查此次變更。若不同意,則終止;若同意,則進(jìn)入下一個步驟;

  5. 若是首次提交模板,則創(chuàng)建資源棧(即創(chuàng)建基礎(chǔ)設(shè)施);反之,則更新資源棧(即更新基礎(chǔ)設(shè)施)。

基礎(chǔ)設(shè)施變更及預(yù)覽

IT 基礎(chǔ)設(shè)施并非一成不變,隨著業(yè)務(wù)的變化,我們可能面臨擴(kuò)縮容場景,也可能面臨整個架構(gòu)的變化。好在基于 IaC  的理念,我們只需要描述基礎(chǔ)設(shè)施最新配置,而不用擔(dān)心如何進(jìn)行變更。但即使如此,我們需要在變更前知道究竟會發(fā)生哪些變化。阿里云ROS 和 AWS  CloudFormation 的更改集功能,Terraform 的執(zhí)行計(jì)劃均能讓我們提前了解到變更內(nèi)容。

例如,由于業(yè)務(wù)變化,在基于圖1的架構(gòu)基礎(chǔ)上,在阿里云平臺上新增一臺 ECS 實(shí)例,并使用 SLB 實(shí)例為兩臺 ECS 實(shí)例做負(fù)載均衡。在編寫好新的模板后,就可以使用更改集功能來感知變化,下圖是 阿里云ROS 的一個變更示例:

基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動化配置與編排

在確認(rèn)無誤后,便可以執(zhí)行變更。隨后,自動化編排工具便會對整個基礎(chǔ)設(shè)施進(jìn)行更新,根據(jù)模板發(fā)生的變化來決定新增、更改或刪除哪些資源。

基礎(chǔ)設(shè)施偏差檢測和糾正

盡管使用了自動化編排工具部署資源,仍可能有部分人員會通過非標(biāo)準(zhǔn)化的方式(比如通過控制臺或  API)修改了基礎(chǔ)設(shè)施中部分資源的屬性,使得資源實(shí)際情況和模板中定義的資源產(chǎn)生了差異。好的自動化編排工具不僅具備檢測基礎(chǔ)設(shè)施實(shí)際屬性和模板中定義的屬性之間差異的能力;還能基于差異結(jié)果糾正模板或?qū)嶋H資源,使得模板和基礎(chǔ)設(shè)施保持一致。

當(dāng)前,通過 阿里云 ROS 和 AWS CloudFormation 的偏差檢測能力,就可以輕松地發(fā)現(xiàn)實(shí)際資源和模板中定義的資源之間的差異,并可通過偏差糾正功能使模板內(nèi)容和實(shí)際資源保持一致。

感謝各位的閱讀!關(guān)于“基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動化配置與編排”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI