閱讀977 返回首頁    go 阿裏雲 go 技術社區[雲棲]


巧用Terraform和Packer開源工具完成雲上自動運維

2017年在線技術分會——運維/DevOps在線技術峰會上,來自阿裏雲的黎山分享了利用開源DevOps工具完成雲上的自動運維的實踐。她首先通過對5個應用場景的分析引出了“自動化能自動化的一切”的理念。然後介紹了使用Terraform和Packer開源工具完成雲上自動運維的具體實現過程。最後對多工具組合案例進行了分享。

 

以下內容根據直播視頻整理而成。

 

雲計算的特點是開箱即用,可以隨時擴縮容,不用考慮硬件的損壞問題,而且有豐富的雲平台和雲產品供選擇。

應用場景分析

應用1

a0c7ba83fdc86264351cfef675dba10cc3ea2bd8

某應用1,為了增大吞吐率,做了流量均衡處理、擴大並發數、縮短延遲,選擇了將兩台ECS掛在一個SLB基礎設施上的組合。要實現上述架構需要進行以下八個步驟來完成基礎設施的構建:創建ECS、創建安全組、添加安全組規則、創建SLB、添加後端服務器、配置監聽端口、配置會話保持、添加健康檢查。

應用2

83d40633b6269a2aaa3b1a466094269c2a0b5acd

應用2的特點是需要做網絡隔離,需要將其整個的應用架構搭在VPC網絡內,同時有對外網絡訪問的需求,同時也有應用對外提供服務。所以,整個的架構是VPC下麵有兩個子網,通過NAT網關和共享帶寬包提供對外請求,然後通過負載均衡提供入網能力。要實現以上架構需要七個步驟:創建VPC、創建VSWITCH、創建NAT網關、新建共享帶寬包、創建ECS、創建SLB、創建SNAT、掛載SLB。

應用3

5296b30825ca85d8d762664a1fbe44ecfac0af49

應用3與應用2的基礎設施要求一樣。此時需要按照固定流程手工再做一次重複的工作。由於人員流動,文檔不全,會導致接手的人需要幾天的時間熟悉環境及各種配置。

應用4

20b7902ad267a557a03f61bb5a6e44e98d5c2a2f

隨著應用的增加,ECS、SLB等資源也在增加,希望通過“打標簽”區分哪些資源屬於哪些應用,將資源按照應用分組。此時需要找到資源和應用的對應關係,再把每個資源都打上標簽。

應用5

bc9dd2c69a48d025cfd96a8e7a93372a3e6282c5

應用2深受市場歡迎,流量暴增,需要增加ECS以承載更多的並發和訪問量,需要擴容一台與線上應用一致的ECS,掛載到SLB上。此時,需要四步來完成上述任務:將應用的ECS打快照、生成鏡像、基於此鏡像創建ECS、添加到SLB。

通過以上場景分析,我們發現操作流程是有序可循的,配置是固定的。如果全部由手工操作來完成的話,效率低、時間長,可能導致錯誤,變更不能回滾,過程沒有曆史記錄,過程不能審計(不知道是誰做了什麼樣的操作)。解決上述問題的方法是自動化。

自動化能自動化的一切

d61010b8e4701b93877c923be0dbdbd6e2465300

上圖有三條主線,第一條是利用Packer去生成鏡像,自動存儲在鏡像列表中,用Terraform去自動創建更新或者銷毀這些基礎設施。在創建ECS的時候可以選擇Packer創建出來的鏡像ID,同時在運行期可以使用Ansible去管理這些基礎設置或者管理ECS上麵的應用。

針對場景5的IaC思路

7211509d668b3e102496021e72b3bcf708330d6a

場景5的需求是擴容一台與線上應用一致的ECS。具體的操作流程是利用Packer去創建鏡像,把提供服務的應用打到鏡像中,用Terraform去創建ECS及其他資源,創建ECS的時候選擇Packer打出來的ID。變更的時候隻需要修改Terraform的模板,把ECS變量的參數加1。

Terraform/Packer介紹

5a0cf414c29bf3db306e9a110e00ebb91f3ae489

他們屬於HashiCorp家族。他們具有兩大特點:支持多平台,開源。

Terraform

257fe4e5e9a61bae20882d093396e801e4548f06

Terraform的安裝如上圖所示。

0eb54221128269c5fd893b310f085e668df302f5

上圖是Terraform的一個模板,其最重要的是resource,其後有兩個字串(資源名稱是固定的,別名可自定義)。安全組規則中,alicloud_security_group_role是固定的,可以定義安全組的出網入網規則、端口、規則作用的安全組、指定網段。對於ECS實例,可以指定instance的name、鏡像ID、實例類型、創建的數量(count)、ECS的安全組、收費類型、帶寬、是否IO優化、是否分配公網IP、可用區、實例的收費類型、係統盤類型等。SLB同樣可以指定name、收費類型等。SLB掛載定義了SLB和instance的主要參數。

Terraform最重要的三個命令是plan、apply和destroy,plan命令會在執行之後看到參數的所有值以及要創建哪些資源,如果沒有問題的話就執行apply去真正創建這些資源,可以通過destroy做銷毀。

ef5b8735bb6a9c934dd5a0b06ff40508d49b13ce

上圖是VPC集群的資源拓撲圖,從下往上有VPC、VSWITCH,有安全組的規則作用在安全組上,VSWITCH下有兩個實例,即別名worker的ECS實例和別名為master的ECS實例。eip綁定在別名為master的實例上,自定義路由的下一跳指定的是別名為master的實例。

Packer

285642ff87ede886ac1275874e25293ef91d6869

Packer主要的思想是通過模板來定義一些內容然後創建鏡像。在此過程中,Packer支持基於創建阿裏雲基礎鏡像創建鏡像,以及基於自定義鏡像創建鏡像,會根據模板定義自動創建經典網絡ECS或者是VPC網絡的ECS。在ECS之上安裝相關的應用,並把ECS打一個快照,根據快照生成鏡像,當鏡像創建完成之後釋放掉過程中創建過的資源,最後還可以做進一步的操作,比如彈性伸縮、共享鏡像、複製鏡像。

e81253f47f0f439bd4f7bc144acca91648011d61

上圖是Packer的典型模板,最重要的是builders和provisioners。builders的type決定鏡像的用處,provisioners裏麵定義鏡像要做的任務。

多個工具組合案例

案例1

627a841d8d4835c9b0f6e3b106adc3f520826a0a

可以利用Packer製作鏡像,生成鏡像ID,然後用Terraform的模板指定鏡像ID,創建ECS,這個ECS就自帶了所要提供應用的服務。這種方案的好處是一次製作、重複利用,免去每次創建機器、安裝服務的重複過程。

案例2

35608ae615a45934456efdcd5f7fdc7ace23a164

可以利用Packer把應用打在鏡像中,通過ESS做伸縮,可以用Terraform創建ESS的模板做彈性伸縮。很多用戶做彈性伸縮的過程中很麻煩的一點是在最初的時候ECS所用的鏡像是基礎鏡像(隻有一個操作係統的鏡像),那麼彈出來的機器是不能提供服務的實例,結合Packer則可以解決這個問題。

案例3

418645c981125766d0dbac3da51753ee89909c04

將Terraform和Ansible做結合。Terraform在執行完成之後會在本地生成一個tfstate文件,利用開源插件Terraform Inventory可以通過tfstate生成Ansible Inventory(用來做機器分組)。Ansible可以通過讀Inventory文件對指定的分組做管理或應用配置。

總結

前麵的思想可以歸納為一句話:自動化能自動化的一切。其優點是:用代碼描述基礎設施的創建、變更、銷毀;代碼編寫好,驗證也是正確的,之後每次執行任務都不會出錯;非常快速,高效;代碼代替文檔,有曆史記錄,可回滾,不用擔心文檔更新不及時或人員流動帶來的“黑盒”問題;不用通過訪問生產環境,就能知道生產環境上的配置情況;提高整個團隊的DevOps能力。

最後更新:2017-04-25 00:01:36

  上一篇:go Docker改名啦?什麼是 Project Moby
  下一篇:go 三大通用核心套件幫你構建智能運維體係