背景
隨著用戶在 UCloud 上資源用量的指數(shù)增長(zhǎng),傳統(tǒng) API/SDK 手動(dòng)編寫腳本的資源管理方式已經(jīng)無(wú)法滿足其需要。為此,UCloud 研發(fā)團(tuán)隊(duì)基于 Terraform 編寫了一套自己的資源編排工具,幫助用戶降低云上資源的管理成本,為其提供安全可靠、高度一致的產(chǎn)品使用體驗(yàn),盡可能消除遷移上云時(shí)的風(fēng)險(xiǎn)。
Terraform 代表了業(yè)界前沿的技術(shù)和標(biāo)準(zhǔn),我們基于此,并配合 UCloud CLI 等工具,編寫了新一代 UCloud 資源編排工具,進(jìn)一步拓展 Terraform 的功能,實(shí)現(xiàn)基礎(chǔ)設(shè)施可編程。在一個(gè)通過(guò) ULB 卸載流量至云主機(jī)的案例中,相比于傳統(tǒng)方式,新方案下的構(gòu)建時(shí)間從原先的 3 分 20 秒縮短至 43 秒,編排的效率、穩(wěn)定性和可描述性都得到了顯著提升。
Terraform是什么?
Terraform 是 Hashicorp 公司開源的一種多云資源編排工具,目前已經(jīng)形成完整生態(tài),并與AWS、Microsoft Azure、Google、阿里云以及UCloud等多家主流云廠商建立合作。
使用者通過(guò)一種特定的配置語(yǔ)言(HCL, Hashicorp Configuration Language)來(lái)描述基礎(chǔ)設(shè)施,由 Terraform 工具統(tǒng)一解析,構(gòu)建資源之間的關(guān)系,生成執(zhí)行計(jì)劃,并通過(guò)調(diào)用 UCloud 公有云 API 來(lái)完成整個(gè)基礎(chǔ)設(shè)施生命周期的管理。
相對(duì)于其它的云上資源管理方式,Terraform 的主要特點(diǎn)有:
1. 有廣泛的兼容性,目前海內(nèi)外累計(jì)已有超過(guò) 40 家公有云廠商支持,其中包括 UCloud 在內(nèi)的 4 家國(guó)內(nèi)云廠商,另有 200 多個(gè)軟件服務(wù)商為其提供支持。
2. 基于 IaC(基礎(chǔ)設(shè)施即代碼,Infrastructure as Code)的設(shè)計(jì),可以將基礎(chǔ)設(shè)施以一種領(lǐng)域特定語(yǔ)言描述出來(lái),消除了在基礎(chǔ)設(shè)施自動(dòng)化時(shí)描述語(yǔ)義上的歧義,同時(shí)減輕人為因素造成的不確定影響。
3. Terraform 在執(zhí)行編排動(dòng)作前,會(huì)生成一份可讀性良好的執(zhí)行計(jì)劃,關(guān)鍵基礎(chǔ)設(shè)施的變更可以得到充分審查,保證了基礎(chǔ)設(shè)施的可靠性。
4. 基于 DAG(有向無(wú)環(huán)圖,Directed Acyclic Graph)描述資源與資源之間的關(guān)系,由于 DAG 良好的拓?fù)湫再|(zhì),當(dāng)資源屬性與資源關(guān)系發(fā)生改變時(shí),變更動(dòng)作將被充分并行地執(zhí)行。
下圖是一張資源編排與傳統(tǒng)資源管理方式的對(duì)比表:
圖1:資源編排與傳統(tǒng)資源管理方式對(duì)比
可以看出,在自動(dòng)化 DevOps 環(huán)境下,資源編排相對(duì)傳統(tǒng)資源管理方式具有明顯優(yōu)勢(shì),目前已覆蓋了 IaaS 層的核心產(chǎn)品,但隨著時(shí)間的推移,將來(lái) UCloud 資源編排會(huì)支持更多的產(chǎn)品。
應(yīng)用場(chǎng)景
用戶可以很容易的從Terraform受益,因?yàn)槌跏蓟品?wù)時(shí)若缺少資源編排工具,將投入大量的時(shí)間成本,而且對(duì)于云上資源的變更,往往需要很復(fù)雜的變更邏輯以保證基礎(chǔ)設(shè)施的安全性。
UCloud 資源編排工具能夠很好地解決如下常見的問(wèn)題:
– CI/CD 自動(dòng)化資源管理
– 高峰期應(yīng)用縮擴(kuò)容
– 部署復(fù)雜資源拓?fù)?例如兩地三中心的應(yīng)用架構(gòu))
例如,驛氪作為一家SaaS解決方案提供商,已經(jīng)將UCloud Terraform編排系統(tǒng)接入自身業(yè)務(wù)。
下圖是驛氪業(yè)務(wù)架構(gòu)的示意圖。它同時(shí)使用了多家云服務(wù),需要統(tǒng)一的資源管理平臺(tái)進(jìn)行多云管理,而獨(dú)立研發(fā)一套資源管理平臺(tái),需要對(duì)接各云廠商接口,同時(shí)還要研發(fā)人員深入了解各家云服務(wù)的產(chǎn)品細(xì)節(jié),這無(wú)疑會(huì)加重企業(yè)的研發(fā)成本和運(yùn)營(yíng)成本。
圖2: 驛氪業(yè)務(wù)架構(gòu)的示意圖
而在應(yīng)對(duì)SaaS 業(yè)務(wù)時(shí),Terraform可以靈活的動(dòng)態(tài)調(diào)整資源,用戶只需要調(diào)整部分參數(shù),就可以利用模板進(jìn)行非??焖俚馁Y源管理,相較于自建管理平臺(tái),UCloud Terraform可以極大節(jié)省用戶的運(yùn)營(yíng)成本和效率。
生命周期
以首次執(zhí)行 Terraform 創(chuàng)建 UCloud 云上資源為例,這一資源編排動(dòng)作的生命周期如下圖所示:
圖3:Terraform 生命周期
圖中立方體所示分別為:
–Terraform 核心進(jìn)程:負(fù)責(zé)資源定義文件,構(gòu)建有向無(wú)環(huán)圖,管理狀態(tài)存儲(chǔ);
–Provider 進(jìn)程:即提供資源編排能力的進(jìn)程,包括由云廠商實(shí)現(xiàn)的能力(比如 UCloud 的資源編排實(shí)現(xiàn)),和應(yīng)用程序提供的能力(比如 TLS 自簽名證書)等;
–Provisioner 進(jìn)程:即提供資源編排后處理操作的進(jìn)程,比如執(zhí)行 Shell 命令,上傳文件等。
以中央的有向無(wú)環(huán)圖為分界線,左側(cè)的部分是 Terraform 本身提供的能力,右側(cè)是由云廠商提供的能力。
Terraform 核心的良好抽象,保證了資源編排的安全和穩(wěn)定,為 UCloud 資源編排提供了堅(jiān)實(shí)的工程基礎(chǔ)。
UCloud資源編排實(shí)踐
在一個(gè)生產(chǎn)環(huán)境的資源編排系統(tǒng)中,往往要依賴數(shù)目龐大的云資源后臺(tái)管理服務(wù)。資源編排的工程實(shí)現(xiàn)中,以下幾個(gè)方面的根本訴求需要首先得到保障:
– 保障資源編排在復(fù)雜終端環(huán)境下的成功率。這個(gè)是最基本也是最核心的訴求。
– 保障產(chǎn)品的一致性。使用戶可以平滑遷移,變更無(wú)感知。
– 保障產(chǎn)品的工程質(zhì)量。資源編排作為關(guān)鍵基礎(chǔ)設(shè)施的接入方式,本身需要足夠穩(wěn)定可靠。
下文,我們將詳細(xì)分享 UCloud 在基于 Terraform 的資源編排工具研發(fā)中,在容錯(cuò)能力、接入能力和工程能力優(yōu)化上的一些實(shí)踐。
容錯(cuò)能力優(yōu)化
容錯(cuò)能力是衡量系統(tǒng)可用性的一個(gè)重要維度,資源編排作為 UCloud 服務(wù)的入口,本身必須足夠穩(wěn)定,具有對(duì)故障可以做出合理應(yīng)對(duì)的能力,包括對(duì)上游服務(wù)異常的容錯(cuò)能力,以及對(duì)于輸入異常的糾錯(cuò)能力。
首先,Terraform 的殺手級(jí)特性是執(zhí)行計(jì)劃與過(guò)程分離,用戶在執(zhí)行真正的資源編排動(dòng)作變更現(xiàn)網(wǎng)基礎(chǔ)設(shè)施之前,可以先生成執(zhí)行計(jì)劃,比較資源定義文件和當(dāng)前資源狀態(tài)的差異,檢查關(guān)鍵基礎(chǔ)設(shè)施的變更。
UCloud 在實(shí)現(xiàn)資源編排的過(guò)程中,借助 Terraform 執(zhí)行計(jì)劃的 CustomDiff 特性,自定義了部分資源的 Diff 過(guò)程。比如,兩個(gè)地域之間僅能存在一條高速通道(UDPN),如果執(zhí)行編排動(dòng)作前已經(jīng)存在了一條高速通道(UDPN),將會(huì)把所有的編排動(dòng)作阻止在執(zhí)行計(jì)劃階段,提高終端用戶的使用效率。
圖4:自定義 Diff 以在執(zhí)行計(jì)劃中檢查輸入
對(duì)于錯(cuò)誤的處理,UCloud 編排工具通過(guò)梳理整個(gè)編排工作流的生命周期,將錯(cuò)誤信息嚴(yán)格壓縮在(動(dòng)詞、附加動(dòng)作、資源名、ID)這個(gè)形式化的四元組中,轉(zhuǎn)化為人類可讀的描述信息反饋給使用者,對(duì)于輸入異??梢栽谔峁┮欢ǖ慕换ゼm錯(cuò)能力的前提下,精確定位到源碼行。
圖5:錯(cuò)誤信息四元組的自然語(yǔ)言表示樣例
其次,UCloud 通過(guò)下文介紹的 API 一致性工程,識(shí)別出了所有操作的冪等性質(zhì)(即該操作是否存在副作用,導(dǎo)致真正的資源創(chuàng)建),并對(duì)所有冪等(無(wú)副作用的)操作執(zhí)行自動(dòng)重試,大幅提升了編排工具的容錯(cuò)能力,同時(shí)保證了自動(dòng)重試機(jī)制是真正安全的。對(duì)于非冪等操作,得益于 Terraform 的狀態(tài)管理機(jī)制,可以簡(jiǎn)單地重新執(zhí)行編排計(jì)劃,僅重試失敗的創(chuàng)建過(guò)程。
UCloud 編排工具還提供對(duì)于異步操作的同步封裝,使用 Terraform 內(nèi)建的等待機(jī)制,創(chuàng)建資源后,將會(huì)輪詢等待資源完成可以查詢方才返回成功,保證操作的原子性和資源狀態(tài)的一致性。
最后,對(duì)于上述的重試或等待機(jī)制,使用指數(shù)級(jí)增長(zhǎng)的間隔(Exponential Backoff),以及優(yōu)雅退出(Gracefully Shutdown)的方案,進(jìn)一步提升資源編排的容錯(cuò)能力。
接入能力優(yōu)化
基于 Terraform 的資源編排有一定固有的局限性,比如其本身更適合基礎(chǔ)設(shè)施的構(gòu)建,不適合 adhoc 的臨時(shí)日常工作,比如列表查詢和開關(guān)機(jī)這樣的操作。
如要批量重啟主機(jī),使用 Terraform 的做法是使用 data source 查詢出對(duì)應(yīng)的數(shù)據(jù),定義輸出變量,再將輸出變量值作為參數(shù)傳遞給外部的腳本。在這樣的即席查詢場(chǎng)景下,相對(duì)于 Ansible 等配置管理工具并沒有明顯的優(yōu)勢(shì)。
因此 UCloud 在資源編排之外,開發(fā)了 UCloud CLI 工具來(lái)擴(kuò)展資源編排的能力。例如,使用 CLI 來(lái)查詢和重啟通過(guò) UCloud 編排工具創(chuàng)建的資源:
圖6:使用 CLI 來(lái)查詢和重啟通過(guò) UCloud 編排工具創(chuàng)建的資源
UCloud 實(shí)現(xiàn)了資源編排與 UCloud CLI 的集成,資源編排工具可以直接使用 CLI的權(quán)限配置信息。也可以通過(guò)編排工具的特性,調(diào)用 UCloud CLI 進(jìn)行額外的資源管理操作。
圖7:Terraform 與 CLI 集成用法示例
打通資源編排與 UCloud CLI 之后,資源編排可以復(fù)用 CLI 即席查詢的能力,而CLI 可以復(fù)用資源編排所持有的資源拓?fù)湫畔?,例如主機(jī)列表,網(wǎng)絡(luò) CIDR 信息等,極大拓展了雙方的的產(chǎn)品接入能力。
工程能力優(yōu)化
UCloud 資源編排從立項(xiàng)之初,就將終端用戶使用上的一致性和可用性作為核心訴求。要滿足這些訴求,在工程上必須攻破幾個(gè)關(guān)鍵的技術(shù)難關(guān):
1. 盡可能使用戶實(shí)現(xiàn)跨版本、跨云的平滑遷移。
2. 同時(shí)對(duì)資源編排工具所依賴的基礎(chǔ) API 的實(shí)現(xiàn)自動(dòng)化管理,從源頭上提高編排工具的可用性。
3. 資源編排作為關(guān)鍵基礎(chǔ)設(shè)施的接入方式,本身需要足夠的質(zhì)量保障措施。
· 平滑遷移
首先,對(duì)于資源編排工具的升級(jí),UCloud 嚴(yán)格按照 Terraform 的 Schema 變更策略,每當(dāng)資源的屬性有破壞性的變更,都會(huì)隨之提供版本遷移的實(shí)現(xiàn),使終端用戶在升級(jí)工具時(shí),自動(dòng)將其資源狀態(tài)平滑遷移至新版本。
其次,對(duì)于云平臺(tái)之間的遷移,UCloud 實(shí)現(xiàn)了通用的風(fēng)格轉(zhuǎn)換函數(shù),通過(guò)將 UCloud 接口的大寫駝峰(Camel)命名,統(tǒng)一映射成 Terraform 常用的小寫下劃線(Snake)風(fēng)格,并使用 Terraform 建議的產(chǎn)品命名法,降低用戶的跨云遷移成本。終端用戶只需要少量改動(dòng)模板,即可通過(guò)資源編排工具平滑接入 UCloud。
· 變更自動(dòng)化
資源編排作為 UCloud 重要的產(chǎn)品接入方式,對(duì)于 UCloud 全線產(chǎn)品都有很強(qiáng)的依賴,接口變更對(duì)接時(shí)的一點(diǎn)微小錯(cuò)誤,都可能導(dǎo)致破壞性的后果。
所以一致性工程的重要目標(biāo)是,快速響應(yīng)產(chǎn)品新特性的變更,同時(shí)盡可能降低人工成本,使變更自動(dòng)化,減少錯(cuò)誤的發(fā)生。
為了使 API 能夠得到統(tǒng)一管理,同時(shí)防止產(chǎn)品間豎井式的信息隔離,UCloud 很早以前就打造了公共、統(tǒng)一的 API 管理平臺(tái),將所有現(xiàn)網(wǎng) API 的定義收斂至統(tǒng)一的 API 注冊(cè)中心上,使用自定義的格式來(lái)形式化地描述 API Schema。API 管理平臺(tái)將 API 的場(chǎng)景抽象成測(cè)試集(Test Set),一次 API 的調(diào)用抽象成測(cè)試用例(Test Case),并使用自定義的表達(dá)式語(yǔ)法構(gòu)造隨機(jī)的參數(shù)注入到用例中執(zhí)行。
圖8:API 管理平臺(tái)示意圖
基于 API 管理平臺(tái),UCloud 資源編排團(tuán)隊(duì)編寫了 API SDK 的自動(dòng)化生成程序,通過(guò)嚴(yán)格形式化的 API 定義,轉(zhuǎn)譯成 Go SDK 代碼。同時(shí)通過(guò)編寫一個(gè)遞歸下降的表達(dá)式解析器,將測(cè)試用例中表達(dá)式語(yǔ)法,轉(zhuǎn)譯成等價(jià)的 Go 代碼。實(shí)現(xiàn)了 API 定義和 Go 代碼的直接映射,低成本同步上游變更。
圖9:通過(guò)編寫 API 建模工具轉(zhuǎn)譯 API SDK 代碼
此外在這個(gè)過(guò)程中,UCloud 通過(guò)在 API 管理平臺(tái)與 SDK 之間編寫 API 建模工具,用以抽象出一個(gè)中間層,在該層統(tǒng)一標(biāo)注出 API 的冪等性質(zhì),為資源編排工具提供了真正安全的重試機(jī)制。
這樣就完成了整個(gè)調(diào)用鏈路上的接口一致性工程建設(shè),實(shí)現(xiàn)了從 API 管理平臺(tái)到 SDK 到 Terraform 的完整語(yǔ)義映射,降低了 SDK 的開發(fā)和維護(hù)成本,同時(shí)消除了人為變更帶來(lái)的不確定影響。
· 質(zhì)量工程建設(shè)
資源編排作為大規(guī)模云上資源管理的推薦方式,涉及到關(guān)鍵基礎(chǔ)設(shè)施的操作與管理,編排工具本身的質(zhì)量十分關(guān)鍵。
圖10:資源編排持續(xù)集成檢查表
如表2所示,作為一個(gè)開源項(xiàng)目,UCloud 資源編排工具共有三個(gè)質(zhì)量周期,
– 開源協(xié)作周期,使用 Travis CI 進(jìn)行代碼風(fēng)格檢查和單元測(cè)試,不會(huì)發(fā)起真正的 API 請(qǐng)求;
– 合并主分支周期,UCloud 使用 Gitlab CI on Kubernetes 進(jìn)行風(fēng)格檢查、單元測(cè)試和集成測(cè)試,其中集成測(cè)試會(huì)調(diào)用現(xiàn)網(wǎng) API 操作真正的云上資源,并在每天凌晨進(jìn)行 Daily Regression;
– 發(fā)布正式 Release 到 Terraform 官方倉(cāng)庫(kù)周期,合作方 Hashicorp 使用 TeamCity 進(jìn)行全量驗(yàn)收測(cè)試,當(dāng)所有測(cè)試完成后,發(fā)布新版本。
為了保證代碼不會(huì)隨時(shí)間腐化,提前清除一些隱患,比如拼寫錯(cuò)誤、安全密鑰泄露、抽象不合理等等,UCloud 接入產(chǎn)品團(tuán)隊(duì)選取了三種不同維度的靜態(tài)檢查工具來(lái)量化代碼質(zhì)量,其中包括:
– GoReportCard,用來(lái)做最基本的風(fēng)格檢查
– SonarCloud,發(fā)現(xiàn)代碼的 Bug 和安全問(wèn)題
– Gocyclo,計(jì)算函數(shù)的圈復(fù)雜度(圈復(fù)雜度是用來(lái)衡量一個(gè)函數(shù)復(fù)雜程度的指標(biāo),和控制流的復(fù)雜程度相關(guān))
并通過(guò)周期性的代碼優(yōu)化,將代碼質(zhì)量的量化指標(biāo)始終維持在A+ 評(píng)級(jí)。
圖11
寫在最后
經(jīng)過(guò)長(zhǎng)時(shí)間的發(fā)展,Terraform 已經(jīng)成為一個(gè)業(yè)內(nèi)通用的資源編排工具,且近年來(lái)海內(nèi)外的友商也陸續(xù)開始支持基于 Terraform 的資源編排系統(tǒng),證明了業(yè)內(nèi)對(duì)通用資源編排系統(tǒng)的強(qiáng)需求。
UCloud 深入研究了 Terraform 的內(nèi)部機(jī)理,并基于此為 UCloud 下一代資源編排系統(tǒng)進(jìn)行了深度的探索,在研發(fā)過(guò)程中多次優(yōu)化,打通整個(gè)鏈路上的基礎(chǔ)工程建設(shè),最后通過(guò)充分的質(zhì)量工程實(shí)踐,為資源編排的可靠性與穩(wěn)定性保駕護(hù)航。UCloud Terraform 的具體使用細(xì)節(jié)和樣例請(qǐng)點(diǎn)擊閱讀原文至 UCloud 資源編排官方文檔查閱。
- 蜜度索驥:以跨模態(tài)檢索技術(shù)助力“企宣”向上生長(zhǎng)
- 為什么年輕人不愛換手機(jī)了
- 柔宇科技未履行金額近億元被曝已6個(gè)月發(fā)不出工資
- 柔宇科技被曝已6個(gè)月發(fā)不出工資 公司回應(yīng)欠薪有補(bǔ)償方案
- 第六座“綠動(dòng)未來(lái)”環(huán)保公益圖書館落地貴州山區(qū)小學(xué)
- 窺見“新紀(jì)元”,2021元宇宙產(chǎn)業(yè)發(fā)展高峰論壇“廣州啟幕”
- 以人為本,景悅科技解讀智慧城市發(fā)展新理念
- 紐迪瑞科技/NDT賦能黑鯊4 Pro游戲手機(jī)打造全新一代屏幕壓感
- 清潔家電新老玩家市場(chǎng)定位清晰,攜手共進(jìn),核心技術(shù)決定未來(lái)
- 新思科技與芯耀輝在IP產(chǎn)品領(lǐng)域達(dá)成戰(zhàn)略合作伙伴關(guān)系
- 芯耀輝加速全球化部署,任命原Intel高管出任全球總裁
免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。