天天看點

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

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

以下内容根據直播視訊整理而成。

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

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

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

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

應用2的特點是需要做網絡隔離,需要将其整個的應用架構搭在vpc網絡内,同時有對外網絡通路的需求,同時也有應用對外提供服務。是以,整個的架構是vpc下面有兩個子網,通過nat網關和共享帶寬包提供對外請求,然後通過負載均衡提供入網能力。要實作以上架構需要七個步驟:建立vpc、建立vswitch、建立nat網關、建立共享帶寬包、建立ecs、建立slb、建立snat、挂載slb。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

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

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

随着應用的增加,ecs、slb等資源也在增加,希望通過“打标簽”區分哪些資源屬于哪些應用,将資源按照應用分組。此時需要找到資源和應用的對應關系,再把每個資源都打上标簽。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

應用2深受市場歡迎,流量暴增,需要增加ecs以承載更多的并發和通路量,需要擴容一台與線上應用一緻的ecs,挂載到slb上。此時,需要四步來完成上述任務:将應用的ecs打快照、生成鏡像、基于此鏡像建立ecs、添加到slb。

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

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

上圖有三條主線,第一條是利用packer去生成鏡像,自動存儲在鏡像清單中,用terraform去自動建立更新或者銷毀這些基礎設施。在建立ecs的時候可以選擇packer建立出來的鏡像id,同時在運作期可以使用ansible去管理這些基礎設定或者管理ecs上面的應用。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

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

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

他們屬于hashicorp家族。他們具有兩大特點:支援多平台,開源。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

terraform的安裝如上圖所示。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

上圖是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做銷毀。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

上圖是vpc叢集的資源拓撲圖,從下往上有vpc、vswitch,有安全組的規則作用在安全組上,vswitch下有兩個執行個體,即别名worker的ecs執行個體和别名為master的ecs執行個體。eip綁定在别名為master的執行個體上,自定義路由的下一跳指定的是别名為master的執行個體。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

packer主要的思想是通過模闆來定義一些内容然後建立鏡像。在此過程中,packer支援基于建立阿裡雲基礎鏡像建立鏡像,以及基于自定義鏡像建立鏡像,會根據模闆定義自動建立經典網絡ecs或者是vpc網絡的ecs。在ecs之上安裝相關的應用,并把ecs打一個快照,根據快照生成鏡像,當鏡像建立完成之後釋放掉過程中建立過的資源,最後還可以做進一步的操作,比如彈性伸縮、共享鏡像、複制鏡像。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

上圖是packer的典型模闆,最重要的是builders和provisioners。builders的type決定鏡像的用處,provisioners裡面定義鏡像要做的任務。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

可以利用packer制作鏡像,生成鏡像id,然後用terraform的模闆指定鏡像id,建立ecs,這個ecs就自帶了所要提供應用的服務。這種方案的好處是一次制作、重複利用,免去每次建立機器、安裝服務的重複過程。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

可以利用packer把應用打在鏡像中,通過ess做伸縮,可以用terraform建立ess的模闆做彈性伸縮。很多使用者做彈性伸縮的過程中很麻煩的一點是在最初的時候ecs所用的鏡像是基礎鏡像(隻有一個作業系統的鏡像),那麼彈出來的機器是不能提供服務的執行個體,結合packer則可以解決這個問題。

巧用Terraform和Packer開源工具完成雲上自動運維應用場景分析 Terraform/Packer介紹 多個工具組合案例總結Reference

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

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