這篇文章給大家分享的是有關(guān)基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動(dòng)化配置與編排的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。
成都創(chuàng)新互聯(lián)是專業(yè)的衢州網(wǎng)站建設(shè)公司,衢州接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站制作,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行衢州網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
云上運(yùn)維,那就是和云上資源和產(chǎn)品打交道,無疑會(huì)涉及到一系列的資源部署。比如簡單地使用一臺云服務(wù)器,就需要運(yùn)維人員依次創(chuàng)建 VPC、VSwitch、安全組和云服務(wù)器實(shí)例,如果想創(chuàng)建一個(gè)集群,那還要進(jìn)一步創(chuàng)建負(fù)載均衡、數(shù)據(jù)庫和多個(gè)云服務(wù)器實(shí)例。
隨著業(yè)務(wù)規(guī)模的不斷擴(kuò)大,IT系統(tǒng)和環(huán)境日益復(fù)雜,人工一個(gè)一個(gè)創(chuàng)建資源的方式顯然不可取,許多人正在轉(zhuǎn)向自動(dòng)化資源部署和配置的工具。
本文將基于基礎(chǔ)設(shè)施即代碼 IaC 理念,分享如何借助自動(dòng)化編排工具實(shí)現(xiàn)自動(dòng)化部署,使得運(yùn)上運(yùn)維工作更為高效。
對于云上資源的部署,如果你的云上運(yùn)維還處于手動(dòng)或是半手動(dòng)運(yùn)維階段,那么大部分工作是通過控制臺選擇特定資源規(guī)格參數(shù)進(jìn)行創(chuàng)建,還有一部分是使用 CLI(如 aliyun-cli)或者 SDK 直接調(diào)用接口來創(chuàng)建資源。但隨著企業(yè)的云上業(yè)務(wù)規(guī)模不斷擴(kuò)大,不論是哪種方式,或多或少都會(huì)遇到下述五個(gè)問題:
部署效率低。手動(dòng)創(chuàng)建對于創(chuàng)建少量種類的資源來說倒是種很直觀的方式,但一旦涉及到大量不同資源時(shí),尤其是資源之間還有依賴關(guān)系,這時(shí)候會(huì)發(fā)現(xiàn)需要在不同的產(chǎn)品控制臺之間來回切換,還要時(shí)刻關(guān)注創(chuàng)建進(jìn)度,才能再去創(chuàng)建下一個(gè)依賴它的資源,整個(gè)過程所耗費(fèi)的時(shí)間和精力可想而知,相信不少人有深有體會(huì)。
可復(fù)制性差。當(dāng)手動(dòng)創(chuàng)建好了一系列的資源后,如果需要針對不同的環(huán)境(如預(yù)發(fā)、測試和生產(chǎn))或不同的地域(如北京和上海)創(chuàng)建完全相同的資源,則又需要花費(fèi)很多時(shí)間一步步地進(jìn)行操作,無法直接復(fù)制、做到一鍵部署。
一致性差。手動(dòng)創(chuàng)建還有一個(gè)非常大的問題,那就是非常容易出現(xiàn)配置錯(cuò)誤,很難保證兩套環(huán)境中各個(gè)資源配置是完全相同的。
管理困難。資源的創(chuàng)建只是開始,可能還需要針對這批資源做擴(kuò)縮容、更新特定資源的規(guī)格等操作。但手動(dòng)運(yùn)維的方式就導(dǎo)致沒有統(tǒng)一管理這批資源的入口,仍需要分別到各產(chǎn)品控制臺上操作。隨著資源數(shù)越來越多,資源管理就愈發(fā)難以維護(hù)。
難以 DevOps。每次開發(fā)、測試或部署軟件應(yīng)用程序時(shí)都可能需要手動(dòng)部署基礎(chǔ)設(shè)施,既無法對基礎(chǔ)設(shè)施進(jìn)行版本控制,也無法對其變動(dòng)進(jìn)行評審,更無法做到敏捷部署。
其實(shí),我們都知道這些問題的背后是因?yàn)橘Y源的部署還未做到自動(dòng)化。但這些問題也不斷促使著我們思考應(yīng)該通過什么樣的方式來解決這些痛點(diǎn),才能讓整個(gè)資源部署過程自動(dòng)化。
在真正做到自動(dòng)化部署之前,不妨回頭看看所需要?jiǎng)?chuàng)建的云服務(wù)資源(如 VPC、VSwitch、ECS 實(shí)例等),它們相對于Web服務(wù)等應(yīng)用程序來說都是云上的基礎(chǔ)設(shè)施,如果把這些基礎(chǔ)設(shè)施想象成一段“代碼”,在“代碼”中定義產(chǎn)品、規(guī)格、數(shù)量等信息,那么是不是就可以通過這段“代碼”來管理整個(gè)基礎(chǔ)設(shè)施了呢?
這就是基礎(chǔ)設(shè)施即代碼(IaC)的理念,將基礎(chǔ)設(shè)施配置視為軟件編程。Kief Morris 在《Infarftruce as Code》一書中對基礎(chǔ)設(shè)施即代碼是這么定義的:
“基礎(chǔ)設(shè)施即代碼是一種使用新的技術(shù)來構(gòu)建和管理動(dòng)態(tài)基礎(chǔ)設(shè)施的方式。它把基礎(chǔ)設(shè)施、工具和服務(wù)以及對基礎(chǔ)設(shè)施的管理本身作為一個(gè)軟件系統(tǒng),采納軟件工程實(shí)踐以結(jié)構(gòu)化的安全的方式來管理對系統(tǒng)的變更。”
引入 IaC 的理念,運(yùn)維人員可以將基礎(chǔ)設(shè)施的部署和管理過程變得敏捷:
在模板(寬泛意義上的代碼)中定義基礎(chǔ)設(shè)施,即各類云資源及其規(guī)格、數(shù)量等屬性、云資源之間的依賴;
使用版本控制(如 Git)管理模板,并提交評審;
通過評審后由自動(dòng)化部署工具使用模板來創(chuàng)建/更新基礎(chǔ)設(shè)施;
基礎(chǔ)設(shè)施的部署和管理變得便捷后,上述提到的手動(dòng)運(yùn)維/半手動(dòng)運(yùn)維的痛點(diǎn)問題就可以得到很好的解決:
提升部署效率。使用自動(dòng)化部署工具進(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è)施的管理不再分散于各個(gè)產(chǎn)品控制臺,而統(tǒng)一到單個(gè)模板,使得管理成本大大降低。
敏捷化工作流程。通過基礎(chǔ)設(shè)施管理流程的規(guī)范化和標(biāo)準(zhǔn)化,資源部署的整個(gè)過程就變得敏捷。
審計(jì)和回滾。對模板進(jìn)行版本管理,使得對基礎(chǔ)設(shè)施變動(dòng)的審計(jì)和回退到某個(gè)特定版本成為了可能。
當(dāng)前,有很多 IaC 自動(dòng)化部署工具,有第三方資源編排工具,也有云服務(wù)商提供的云原生的資源編排工具,這里介紹四個(gè)自動(dòng)化配置與編排工具:
阿里云資源編排服務(wù) ROS(Resource Orchestration Service),這是云原生編排工具,通過編寫 JSON/YAML 格式的模板,在模板中定義所需的ECS實(shí)例、數(shù)據(jù)庫實(shí)例等云服務(wù)資源以及資源依賴關(guān)系等,然后再根據(jù)模板在 ROS 中創(chuàng)建資源棧,ROS 服務(wù)端將根據(jù)模板自動(dòng)完成所有資源的創(chuàng)建和配置,實(shí)現(xiàn)自動(dòng)化部署及運(yùn)維。而資源棧則管理著模板中定義的所有資源,并可通過新模板來更新資源棧,包括資源的新增、更新或刪除等操作。
AWS CloudFormation,也是云原生的編排工具,運(yùn)維人員也是通過 JSON/YAML 格式的模板定義云服務(wù)資源,通過資源棧管理這些資源。
HashiCorp Terraform,這是一個(gè)開源的自動(dòng)化編排工具。以配置文件為驅(qū)動(dòng),可以在文件中定義所要管理的組件,即基礎(chǔ)設(shè)施資源,以此生成一個(gè)可執(zhí)行的計(jì)劃,通過執(zhí)行這個(gè)計(jì)劃來完成所定義組件的創(chuàng)建,增量式的變更和持續(xù)的管理。如果不可執(zhí)行,會(huì)提示報(bào)錯(cuò)。Terraform 不僅可以管理 IaaS 層的資源,如計(jì)算實(shí)例、網(wǎng)絡(luò)實(shí)例和存儲(chǔ)實(shí)例等,也可以管理更上層的服務(wù),如DNS 域名和解析記錄、SaaS 應(yīng)用的功能等。
Pulumi,與 Terraform 一樣也是開源項(xiàng)目,但它與 Terraform 的重要區(qū)別在于:可以用熟悉的編程語言來編寫聲明式配置,而不需要額外學(xué)習(xí)云服務(wù)商特定的模板語言來寫配置。
對于自動(dòng)化配置與編排工具的選擇,筆者的建議是:
如果你的業(yè)務(wù)部署在單一云平臺,就選擇云平臺提供的資源編排工具,在阿里云平臺就用 ROS、在 AWS 平臺就用 CloudFormation,原因很簡單:云平臺提供的工具是云原生,是免費(fèi)的托管服務(wù),在服務(wù)端就可以執(zhí)行自動(dòng)化部署;同時(shí),它還實(shí)現(xiàn)了云原生的訪問控制、編排資源與實(shí)際資源差異檢測等功能,用起來比較省心。
如果你的業(yè)務(wù)是部署在多個(gè)云平臺,建議使用第三方的 Terraform 和 Pulumi,因?yàn)樗粌H可以進(jìn)行多云資源的部署和管理,還能管理除云以外的其他資源,如 Kubernetes。
對于運(yùn)維人員來說,使用 IaC 理念的自動(dòng)化部署工具的門檻其實(shí)不高,使用步驟也非常簡單,主要來說就是編寫模板和使用模板。這里談?wù)劸帉懩0搴褪褂媚0逵心男┳⒁馐马?xiàng),如何才能更好地利用工具、更好地提升運(yùn)維效率。
確認(rèn)好自動(dòng)化部署工具,就可以根據(jù)不同工具的模板語言來編寫對應(yīng)的模板文件。如果你選擇云服務(wù)商提供的云原生的編排工具, 編寫模板這里,有三點(diǎn)注意事項(xiàng)想重點(diǎn)提醒一下:
注意資源的依賴關(guān)系。不恰當(dāng)?shù)囊蕾嚮蛏倭艘蕾嚩紩?huì)導(dǎo)致資源創(chuàng)建出錯(cuò)。
注意使用通用屬性作為參數(shù)。比如實(shí)例規(guī)格等就是比較通用的屬性,建議使用同一份模板,指定不同的參數(shù)來達(dá)到部署不同規(guī)格實(shí)例的目的。
使用有價(jià)值的屬性作為輸出。比如實(shí)例 ID、連接地址等內(nèi)容就是有價(jià)值的屬性,它們都是在資源創(chuàng)建完成后才能獲取到,把這些屬性作為整個(gè)模板的輸出,可以方便后續(xù)的查看和管理。
編寫完模板后,就可以通過對應(yīng)的自動(dòng)化部署工具將模板轉(zhuǎn)化為真正的資源。上述提到的編排工具都能解析資源的依賴關(guān)系,并能先后創(chuàng)建這些資源。同時(shí),對于互不依賴的資源也能夠并行創(chuàng)建。
對于阿里云 ROS 和 AWS CloudFormation 來說,可使用模板來創(chuàng)建一個(gè)資源棧。一個(gè)資源棧即一組云上資源,也就是在模板中定義的基礎(chǔ)設(shè)施。后續(xù)當(dāng)需要增/刪/改一些資源時(shí),也是通過使用模板來更新資源棧來達(dá)到目的。
對于 Terraform 來說,可使用配置文件生成一個(gè)可執(zhí)行的計(jì)劃,通過執(zhí)行這個(gè)計(jì)劃來完成所定義資源/組件的創(chuàng)建,增量式的變更和持續(xù)的管理。
對于 Pulumi 來說,則是直接執(zhí)行代碼來進(jìn)行部署。
這樣的部署方式既能使得資源能按照合理的順序創(chuàng)建出來,又能夠提升部署效率,在遇到異常情況時(shí)也會(huì)進(jìn)行一定程度的重試,真正讓整個(gè)自動(dòng)化部署過程變得穩(wěn)定和高效。
當(dāng)運(yùn)維工作完成整個(gè)基礎(chǔ)設(shè)施模板化后,DevOps 就變得更加容易。我們可以使用版本管理工具(如 Git)管理描述當(dāng)前基礎(chǔ)設(shè)施的模板,使用阿里云云效/AWS CodePipline/Jenkins 創(chuàng)建一個(gè)從代碼提交觸發(fā)到人工卡點(diǎn)再到資源棧部署的流水線,這樣整個(gè)基礎(chǔ)設(shè)施的管理就會(huì)變得更加敏捷和自動(dòng)化。
圖1: 基礎(chǔ)設(shè)施變更的流程圖
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
在每次變更模板后,將本地倉庫的分支內(nèi)容推送到遠(yuǎn)程倉庫,并發(fā)起評審;
若評審不通過,則修改模板后重新發(fā)起評審;若評審?fù)ㄟ^,則自動(dòng)觸發(fā)流水線;
流水線觸發(fā)人工卡點(diǎn),通知上級管理員檢查此次變更。若不同意,則終止;若同意,則進(jìn)入下一個(gè)步驟;
若是首次提交模板,則創(chuàng)建資源棧(即創(chuàng)建基礎(chǔ)設(shè)施);反之,則更新資源棧(即更新基礎(chǔ)設(shè)施)。
IT 基礎(chǔ)設(shè)施并非一成不變,隨著業(yè)務(wù)的變化,我們可能面臨擴(kuò)縮容場景,也可能面臨整個(gè)架構(gòu)的變化。好在基于 IaC 的理念,我們只需要描述基礎(chǔ)設(shè)施最新配置,而不用擔(dān)心如何進(jìn)行變更。但即使如此,我們需要在變更前知道究竟會(huì)發(fā)生哪些變化。阿里云ROS 和 AWS CloudFormation 的更改集功能,Terraform 的執(zhí)行計(jì)劃均能讓我們提前了解到變更內(nèi)容。
例如,由于業(yè)務(wù)變化,在基于圖1的架構(gòu)基礎(chǔ)上,在阿里云平臺上新增一臺 ECS 實(shí)例,并使用 SLB 實(shí)例為兩臺 ECS 實(shí)例做負(fù)載均衡。在編寫好新的模板后,就可以使用更改集功能來感知變化,下圖是 阿里云ROS 的一個(gè)變更示例:
在確認(rèn)無誤后,便可以執(zhí)行變更。隨后,自動(dòng)化編排工具便會(huì)對整個(gè)基礎(chǔ)設(shè)施進(jìn)行更新,根據(jù)模板發(fā)生的變化來決定新增、更改或刪除哪些資源。
盡管使用了自動(dòng)化編排工具部署資源,仍可能有部分人員會(huì)通過非標(biāo)準(zhǔn)化的方式(比如通過控制臺或 API)修改了基礎(chǔ)設(shè)施中部分資源的屬性,使得資源實(shí)際情況和模板中定義的資源產(chǎn)生了差異。好的自動(dòng)化編排工具不僅具備檢測基礎(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)自動(dòng)化配置與編排”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
分享標(biāo)題:基礎(chǔ)設(shè)施代碼化IaC如何實(shí)現(xiàn)自動(dòng)化配置與編排
文章分享:http://chinadenli.net/article12/jggsdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、域名注冊、網(wǎng)站導(dǎo)航、做網(wǎng)站、微信小程序、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)