隨(suí)著企(qǐ)業采用多雲戰略和遷移到雲平台(tái),需要依賴不同的雲(yún)資源來支持業務係統。傳統的(de)手動開通和配置資源關聯關係(xì)的(de)方(fāng)法在多雲環境下變得耗時(shí)且複雜,給運(yùn)維帶來困難。
為了應對(duì)多雲環境中基礎設施管理的複雜性(xìng),尋找一種(zhǒng)高效(xiào)的多雲資源編排方法至關重要。資源編排可以對混合雲資源進行編排,實現快速部署和管(guǎn)理,並(bìng)降低管理複(fù)雜性、人工成本和運維成本。核心過程是設計藍圖、編排資源(yuán),並將編排結果作為實施模板傳(chuán)遞給雲平台,實現資源的統一開通、變更和回收。
盡管(guǎn)資源編排是降低成本和提高(gāo)效率的有效方法,但在實施(shī)過程中也麵臨一(yī)些困難和挑戰(zhàn)。以下是其中的幾個主要(yào)方麵(miàn):
多雲平台的異(yì)構性:不同的雲服務提供商之間存在差異,這意味著在跨多個雲平台進行資源編排時,需要處(chù)理不同的語法和語義,增加了編排模板的複雜性和學習成(chéng)本(běn)。
依(yī)賴關係(xì)管理(lǐ):資源之間可能存在複雜的依賴關係,這需要準確定義和管理,處理依賴關係可能(néng)涉及解決循環依賴、處理(lǐ)資源創建的先後順序等問題。
配置(zhì)參(cān)數的靈活性:不(bú)同的雲服務和場(chǎng)景可能需要不同的(de)配置(zhì)參數和選項。資源編排(pái)需要提供靈(líng)活的配置能力(lì)和對需求的個性化定(dìng)製能力,增加了編排模板的複雜性。
為了(le)解決上述困難,可以采用兩個標準(zhǔn)來進行多雲資源編排:標準描述文件和標準雲平台對(duì)接。通過這兩個標準(zhǔn)對雲平台的差異進行統一定(dìng)義,使混合雲編排變得簡單可(kě)操作。在業界中,TOSCA和Terraform是兩個備受(shòu)關注的資源編排工具(jù)。
TOSCA提出了藍圖(tú)拓撲編排標準規範,定義(yì)了資(zī)源之間的拓撲關係和依賴關係,可以實現對複雜應用和服務的編排。Terraform則可以(yǐ)對(duì)資源編排的產物進行簡化的實施部署,實現基礎設施即代碼(IaC)的理(lǐ)念(niàn),可以通過編寫(xiě)可重複使用(yòng)的代碼來描述和(hé)管理基(jī)礎設施資源。
本文將基於TOSCA和Terraform這兩個工具進行多雲資源編排的(de)探索與討論,以幫助企業更好地實現混合雲環境下的資源編排和管理。
TOSCA規範(fàn)與Terraform工具(jù)
TOSCA(Topology and Orchestration Specification for Cloud Applications)是由OASIS組織製定的雲應用(yòng)拓撲編排規範。它定(dìng)義了(le)雲資源編排的拓(tuò)撲結構、組件(jiàn)關係、屬性和操作等信息,以(yǐ)便於方(fāng)便地描述雲資源(yuán)的拓撲結構和行為。
簡而言之(zhī),TOSCA旨在製定一套藍圖拓撲編排標準規範,通(tōng)過使用統一標準來描(miáo)述雲平台上應用的(de)拓撲結構。TOSCA有以下一(yī)些優點:
高度可擴展性:TOSCA可以在多個層次上描述雲原生(shēng)應用程(chéng)序,包括服務部署、網絡拓撲等。因此,它非常適合在複雜(zá)的分布式(shì)係統中管理和編排應用程序。
獨立於雲平台:TOSCA模板可以在多個雲平台上運行,因為它是一個獨立於雲平台的標準。
生命周期管理(lǐ):TOSCA模板中的工作流可以描述應(yīng)用程序的整個生命周期(qī),從創建部署環境(jìng)到在生產環境中(zhōng)運(yùn)行的監視和維護,可以進行(háng)全生命周期管理。
但(dàn)是,TOSCA也(yě)有一些缺點,例如:
相對複雜:TOSCA需要編寫XML或YAML格式的模板,語(yǔ)法和語義相對複雜,因此需要一(yī)定的技術水平。
缺少良好的工具支持:目前,TOSCA的工具生態係統尚不夠完善,使用起來可(kě)能會(huì)比較困(kùn)難。
更適合(hé)應用(yòng)程序描(miáo)述:TOSCA更適合描述和管(guǎn)理整個應用程序,而不是管理雲基礎架構。
TOSCA的主要(yào)概念包括兩個(gè)要素(sù):節點(Node)和關係(Relationship)。TOSCA規範定義了一(yī)係列(liè)原(yuán)生的節點類型(Node Types),用於表示雲應(yīng)用中的不同組(zǔ)件和功能。TOSCA規範中定義了一些原生節點類型,這些原生的節點類型提供了一種(zhǒng)描述雲資源中不同類型組件屬性和(hé)行為的方式,便於進行模板編寫和雲資源管理。通過使用和派生這些節點類型,可以更加方便和(hé)標準化地描述和管理雲資源中的各個組件。
Terraform是(shì)由HashiCorp開發的開源工具,旨在管理雲基礎架構。它采用聲明式編程風格,使用戶能夠編寫基(jī)礎架構模板,以描述需要部署的所有資源及其相互關係。這樣的模板描(miáo)述方式允許用戶以可重複、可(kě)維護的方式定義(yì)和管理雲基礎架構,確保資源的一(yī)致性和可擴展性(xìng)。
Terraform通過描述文件進行直接實施部署,即通過定義Terraform的描述文件(.tf文件),可以將其發送給Terraform服務進行(háng)執行(terraform apply),從而(ér)與雲平(píng)台進行無縫對(duì)接,實現對描(miáo)述文件中所定義的資源進行部署和開通。這種方式能夠簡化(huà)和自動化雲資(zī)源的管理(lǐ)過(guò)程,使得部署和配置變得更(gèng)加高效和可靠。

它具有以(yǐ)下優點:
易於使用:Terraform采用聲明(míng)式編程風格,用戶可以更簡單、清晰地定(dìng)義和(hé)管理基礎架構。
可擴展:Terraform具有(yǒu)通(tōng)過插件機製工作的靈活性,可以很(hěn)容易地(dì)集成到其他工具和流程(chéng)中。
模塊:Terraform將基礎架構(gòu)的(de)各種組件以(yǐ)模塊的方式進行(háng)封裝,從而更容易(yì)地重用。
但(dàn)是,Terraform也存(cún)在一些(xiē)缺點:
更適合管理基礎架構:Terraform更適合管理雲基礎架構,而不是(shì)管理完整的應用程序。
學習成本高:雖然Terraform的語言很簡單,但功能十分豐富。這意味著使用它需要一定的學習成本。
非標準: Terraform並(bìng)不是一個標準,需要在不同的雲平台上學習相(xiàng)應的DSL。
目前,Terraform已經得到了多個雲平台的支(zhī)持,包括公有雲、專有雲、Docker、Kubernetes。通過Terraform的統一(yī)管理,用(yòng)戶能夠在多個雲平台和基礎設施(shī)上進行資源的配置和部署,實現跨平台、跨服務商(shāng)的自動化管理。
在實際(jì)應用中,TOSCA和Terraform在不同場景(jǐng)下(xià)發揮著各自的(de)作用。TOSCA主要適用於管理和(hé)編排雲原生應用程序,而Terraform則更適用(yòng)於管理更底層的基礎架構(gòu)。以下是兩種工具常見的應用場景:
雲原生資(zī)源編排:TOSCA模板能夠(gòu)描述雲原生(shēng)應用程序的完整生命周期,包(bāo)括部署、配置和管理等過程。通過TOSCA,多個組件和服務可以被編排成一個完整的雲原生應(yīng)用程序。
雲基礎架構(gòu)管理:Terraform可以以模塊化的方式編排雲基礎架構資源,使得各種資源和(hé)服(fú)務能夠更清晰地進(jìn)行管理。通過使用Terraform,可以通過代碼來管理多個雲基礎架(jià)構,實現對基礎設施(shī)的統一(yī)管理。
在實際應用中,TOSCA和Terraform可以分(fèn)別應用於不同的資源編排場景。由於TOSCA和Terraform各自具有優(yōu)勢和劣勢,可以將(jiāng)它們的長處結合起來形成更優(yōu)的解決(jué)方案。例如,TOSCA在藍圖編排方麵表現出色(sè),可以利用(yòng)其(qí)優勢為多雲資源編排提供標準化的藍圖編排規範(fàn),實現跨平台的編排(pái)。而Terraform則擁有豐富(fù)的社區生(shēng)態和良好的雲平台對接模式,可以快(kuài)速(sù)與不同的雲平台進行(háng)集成。
主要思路是采用TOSCA進行藍圖設計模(mó)式,通過藍圖編(biān)排將業務所需的雲產品組件組織成符(fú)合TOSCA 1.3 YAML規範的藍圖模板。然後,將該模板轉換為符合Terraform實施描述文件(jiàn)的統一(yī)格式,以便進行實施。具體架構如下所示(shì):

第一步:首先根據TOSCA規範定義雲產品組件,並進行藍圖編排,以(yǐ)生成符合TOSCA規範的藍圖描述(shù)文件(YAML格式)。
第二步:利用配置轉(zhuǎn)換器,將TOSCA描述文件轉換為Terraform描述文件。可以借助報文轉換器等工具來進行此(cǐ)轉換,具體細節不再詳述。
第三步:利用Terraform描述文件和Terraform服務進行雲產品的編排和實施部署。
下麵將通過一個實操(cāo)來(lái)簡要描述如何利用TOSCA藍圖編排並使(shǐ)用Terraform進行開通操作。假設需要部署一個 web 網站,該網站(zhàn)依賴三個雲資源:虛(xū)擬專有網絡(VPC)、虛(xū)擬交換機(VSwitch)和雲服務(wù)器(ECS)。案例將模擬在阿裏雲杭州(zhōu)節點上進行這三個虛擬產(chǎn)品的實(shí)施部署,其中 ECS 將部署在 VSwitch 下方(fāng),而 VSwitch 的網絡分配依賴於 VPC。
在過去的情況下,可能需要先在阿(ā)裏雲上開通 VPC,然後在 VPC 上創建一個 VSwitch,並最後創建一個 ECS。簡單來(lái)說,這需要三個單獨的實(shí)施部署操作。
通過資源編排的方式,可以將 VPC、VSwitch 和 ECS 編排在一個藍圖拓撲描述文(wén)件中,遵循 TOSCA 規(guī)範。然後,可以將這個藍圖(tú)描述(shù)文件轉換為 Terraform 的描述文件,以實現統一的開通操作。這樣一來,就可以通過資(zī)源編排來(lái)簡化整個部署過程,實(shí)現快速而一致的雲資(zī)源開通。
根據需求背景(jǐng),使用可視化(huà)的藍圖設計工具(或手動編(biān)排拓撲文件,或使用基於TOSCA的開(kāi)源編排工具,例如Cloudify),編排出符合TOSCA規範(fàn)的藍圖描述文件,如(rú)下(xià)所示:

該描述文件定義了一個包(bāo)含VPC、VSwitch網絡關係的ECS(Elastic Compute Service)規範,其中包括三個自定義雲資源節點類型:
alicloud.nodes.VPC:派(pài)生 tosca.nodes.Network 節點類型,表示網絡。具有屬性,如CIDR。
alicloud.nodes.vSwitch:派生 tosca.nodes.Network 節(jiē)點類型,表示虛擬交換機。具有屬性,如CIDR。
alicloud.nodes.ECSInstance:派(pài)生 tosca.nodes.Compute 節點類型,表示ECS實例。具有屬性(xìng),如鏡像ID、實例類(lèi)型和實例名稱。
其中,組(zǔ)件定義的屬性可以作為用戶填(tián)寫,如果有其他(tā)需要輸入屬性,也可在該節點增加。在relationships節點上,描述(shù)了三者的關係(xì)和互相依賴前提(tí)。
該描(miáo)述文件采用(yòng)YAML格式,其中節點描(miáo)述繼承了TOSCA規範的派生節(jiē)點,後(hòu)續可(kě)以不斷擴展與繼(jì)承。描述文件簡(jiǎn)單通過節點(diǎn)和關係來描述藍圖拓撲的節點、屬性和關聯關係,使其具有(yǒu)較高的通用性。
實踐步驟二:把TOSCA轉換成Terraform描述文件
將TOSCA規範描述文件轉(zhuǎn)換為(wéi)Terraform描述文(wén)件目前(qián)沒有現成開源解決方案。因此,需自研定製化接口進行轉換。當然,TOSCA規範也支持(chí)自定義接口實現,以調用其他開源組件(jiàn)進行開通操作。
下麵是通過轉換工具生成(chéng)的Terraform描述文件main.tf的示例(lì):

在這裏需要介紹(shào)的是,Terraform核心文件包括兩個部分。首先是編排執行文件,其(qí)文件後綴名采用tf(在本案例(lì)中為main.tf)。該文件用於定(dìng)義和執(zhí)行資源編排的操作。其次(cì)是本地(dì)狀態文(wén)件,其文件後(hòu)綴名采用tfstate。本地狀態文(wén)件用於記錄當(dāng)前資(zī)源的狀態和配置信息。
後綴名tf文件:業務編排(pái)的主文件,可(kě)以(yǐ)將所有內容(róng)合並到一個tf文件中,也可以(yǐ)根據不同的雲(yún)產品將(jiāng)其劃分為多個文件(jiàn)。無(wú)論是合並還是劃分,隻要文件後綴名為tf,它(tā)們之間可以相互引用和調(diào)用。
後綴名tfstate:本地狀態文件,它由Terraform服務在實施部署(shǔ)後自動創建。該文件記錄了實施部署生成的實例信息和狀態。
在tf文件中,可以觀察到以下幾個節點,將對它們進行簡單介紹:
terraform 節點:用於指定要下載的雲平台提供的provider。這些provider是各大雲(yún)平台在Terraform生態圈中開源提供的工具,通過(guò)使用(yòng)這些provider,我們可以無縫對接雲平台進行資源的開通。
provider 節點:主(zhǔ)要用於提供授權信息,包括企業(yè)或個人雲平台賬號的AK/SK(Access Key/Secret Key)。這(zhè)些信息用於進行雲平台的認證(zhèng)和授權。
data 節點:用於(yú)在雲平台(tái)中進行(háng)查(chá)詢操作。在許多情況(kuàng)下,開通某種雲產品需要使用已部署的其他雲產品的屬性進行關聯。通過(guò)data節點,我們可以根據屬性值查詢雲平台的數(shù)據,以便於提供即將開通(tōng)的資源(yuán)所需的信息。
resource 節點:用於描述將要實施部署的資源節點信息。這些資源節點可以是將要部署、變更或刪除(chú)的資源。在執(zhí)行Terraform時,根據該節點的信息與本地狀態文件(jiàn)以及遠程雲平台的狀態信息(xī)進行比對(duì),決定是進行新的部署、變更(gèng)部(bù)署(shǔ)還是回收部署。
output 節點:用(yòng)於返回實施部署後的一些資源實例信息。在這裏,我們定義了返回的三個(gè)資源實例的ID,以方便進行多(duō)雲產品的資源管理記錄。
實(shí)踐步驟三:通過Terraform服務執行描述文件
準備好了Terraform描述文件後,可以通過(guò)Terraform服務進(jìn)行執行。Terraform的執行過程主要包括三個關鍵步驟:init、plan和apply。
(1) terraform init:這(zhè)一步是進行provider的初始化。在本案例中,我們描(miáo)述了對接阿裏公有雲且使用(yòng)1.204.1版本的情況(kuàng)。由於在此之前沒有進行提前下載,因此在執行該命令時,Terraform將自動進行(háng)下載。以(yǐ)下是示例輸出:

(2) terraform plan: 這一步用於(yú)檢查main.tf中的邏輯是否合理,並且可以在plan執行日誌中查看將(jiāng)要進行的(de)資源狀態(tài)變更情況。根據(jù)案例的執行日誌可以看到terraform根據模板計劃新增(zēng)了4個(gè)實例(Plan: 4 to add, 0 to change, 0 to destroy)。執行該命(mìng)令後的(de)輸出如下所示:

(3) terraform apply:通過使用terraform apply命令,可以執行實施部署。如果需要傳遞參數(shù),可以通過apply命令進行傳遞,例如AK/SK等敏感信息不適合明文寫入文件中,這裏隻是(shì)為了演示方(fāng)便。執(zhí)行(háng)該命(mìng)令後,可以觀察(chá)到terraform已根據描述(shù)文件中的關聯關係自動推算(suàn)出實施(shī)部署雲產品的依(yī)賴順序。這也是terraform的一個重要優勢,在混合雲編排場景中(zhōng),各種雲產品之間的相互依賴以及執行順(shùn)序的複雜(zá)分析都可(kě)以通(tōng)過terraform直接解(jiě)決。以下是具體的執行日誌:

(4) 實施成功後,可以在阿裏公有雲上看到已部署的產(chǎn)品。如下圖所示,可(kě)以看到ECS ID為(wéi)i-bp11o38dc5haho1667hc已成功部署在阿裏公有雲上。這(zhè)證明實(shí)施操作已經順利完成:

(5) 到目前為止(zhǐ),已成(chéng)功實現了藍圖(tú)式自動化部署。基於這(zhè)種模式,企業可以在多雲產品規劃方麵進行上層業務封裝。最終,企業能夠(gòu)實現資(zī)源編排、應用編排、自動(dòng)化部(bù)署以及雲解決方案自動化開通等(děng)各種場景需(xū)求。這(zhè)為企業提供了(le)更(gèng)高效和自動化的雲部(bù)署解決方(fāng)案。
TOSCA-Simple-Profile-YAML-v1.3.pdf介紹文(wén)檔:https://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.3/os/TOSCA-Simple-Profile-YAML-v1.3-os.html
Terraform官方(fāng)介紹:https://www.terraform.io/
Terraform實戰介紹:https://lonegunmanb.github.io/introduction-terraform/5.5.console.html
Terraform語法介紹:https://bbs.huaweicloud.com/blogs/163482
《實(shí)戰》作者:斯科特·溫克勒(Scott Winkler) 譯者:趙利(lì)通