如何利用開源DevOps工具完成雲上的自動運維


內容來源:本文內容來源於 黎山阿里雲棲社區- 運維/DevOps在線技術峯會上的主題演講,IT大咖說爲獨家視頻合做方。
閱讀字數 :2916 | 15分鐘閱讀


內容概況

雲計算的特色是開箱即用,能夠隨時的擴縮容,不用考慮硬件的損壞問題,也有豐富的雲服務和雲平臺供咱們選擇。在本次演講中,黎山經過實際應用場景爲咱們講述了基礎設施及代碼的重要性,以及在雲計算的運維中,如何利用工具來實現自動化,提升效率。html

嘉賓分享視頻地址:t.cn/RX8IwrAjson

你們好,今天咱們圍繞幾個議題展開:後端

  • 經過實際的應用場景來說解IaC的重要性。安全

  • Terraform、Packer的使用介紹。服務器

  • 多個工具組合案例+操做演示。網絡


實際應用場景

應用場景解析一

某應用爲了增大吞吐量,作了流量的均衡處理,在整個的基礎設施架構中,選擇了兩臺ECS掛在SOB的一個基礎設施。若是要實現這樣的一個架構,須要作如下8個步驟來完成這些基礎設施的搭建:建立ECS、建立安全組、添加安全組規則、建立SOB、添加後端服務器、配置監聽端口、配置會話保持、添加健康檢查。要經過這八個步驟來完成兩個ECS掛到SOB上面的基礎設施搭建。架構


應用場景解析二

應用二的特色是須要作網絡隔離,因此要把它整個的應用架構搭在VPC下面。它有對外訪問網絡的需求,同時也有應用對外提供服務。若是要實現這樣一個基礎設施的話,大的步驟是須要如下七步:建立爲PC、建立VSWITCH、建立NET網關、新建共享帶寬包、建立ECS、建立SLB、建立SNAT、最後掛載SLB。中間省略了若干個配置操做。併發


應用場景解析三

應用三與應用二是同樣的基礎設施要求,就要按照固定的流程再從新作一遍重複的這些操做。app

應用場景解析四

隨着應用的增長和業務的發展,咱們的基礎設施的資源也在增長。咱們但願可以把應用和基礎設施作一個分組,也就是經過打標籤的方式,把哪些資源屬於哪個應用作分類。框架


應用場景解析五

隨着業務的發展,應用二深受市場歡迎,流量也暴增。就須要增長ECS以承載更多的併發和訪問量,因此須要擴容一臺與線上應用一致的ECS掛載到SOB上面,這裏的一個關鍵點是擴容一臺與現上應用一致的ECS。

按照傳統的操做方式,先將已經安裝好應用的ECS打上快照,而後生成鏡像,基於此鏡象建立ECS,再添加到SLB當中,一樣這裏面省略了若干的配置步驟。


場景總結:

經過以上幾個場景可知,它們的特色就是,操做流程是有序可循的,而且配置是固定的。若是所有是手工操做的話,會帶來如下缺點:效率低、時間長、可能致使錯誤、變動不能回滾、過程當中沒有歷史記錄、過程不能審計。

針對場景五的IaC思想。場景五的一個需求就是要擴展,擴容一臺與線上應用一致的ECS。若是用IaC的思想,操做流程應該是利用Packer建立一個鏡像,在打鏡像的時候,把提供服務的應用打到鏡像當中,而後用Terraform建立ECS以及其餘資源。在建立ECS的時候,選擇Packer打出來鏡像ID。在變動的時候,咱們只須要修改Terraform的模板,把ECS變量的參數加一,執行變動就能夠了。就可以實現擴容一臺與線上應用一致的ECS而且自動掛載到SLB下面。


Terraform 和 Packer 的介紹

它們來自於HashiCorp家族,有兩大特色,第一是支持多平臺,第二是開源。如今主流的雲平臺像阿里雲、AWS、Azure等都已經支持了。另外一個開源的好處是成熟、透明、可自加強。


Terraform最重要的一點就是模板,模板裏面最重要的就是resource。resource是來描述資源,它後面有兩個字串。第一個字符串是資源名稱,這個名稱是固定的;後面的一個串表明的是別名,別名能夠自定義。咱們就以這個模板爲例來詳細講解一下,怎麼經過模板去描述一個把資源的定義。

首先看一下安全組。安全組的規則能夠定義出網或者入網規則,它的端口是多少,指定的規則做用在哪個安全組上。也就是對security_group的一個引用,還能夠指定它的網段。

對於ECS來說能夠指定instance的name,還有它的鏡像ID和count。前面說若是應用於場景五,咱們若是想擴容一臺的話,咱們就在count數加一,它就會自動建立一臺ECS,能夠指定這臺ECS所依賴的安全組。SLB一樣是指定它的name以及網絡的收費類型,它是公網SLB仍是私網SLB,還有對它監聽的一些配置。

最後一個是SLB的掛載。這裏定義了SLB和instance這兩個主要的參數,也就是要把哪些instance掛載到SLB下面。


Terraform最重要的三個命令就是PLAN、APPLY和DESTROY。Terraform的意義是執行以後會看到資源的全部的參數值以及要建立哪些資源,若是確認沒有問題的話,就執行APPLY去真正的建立這些資源,而後經過DESTROY作銷燬。


咱們經過一個實例的操做演示來看一下,建立一個VPC集羣的。Terraform在運行時是怎樣的狀態。這個整個的基礎架構是一個VPC集羣,有一個子網,子網裏面有一個ECS,有安全組、安全組規則,經過NET網關和共享帶寬包來實現子網出網和入網的能力。

首先執行Terraform plan。咱們要預覽一下要建立哪些資源,一共有八個資源會被添加。確認沒有問題的話,咱們去執行Terraform apply,這個時候就會實際的創實際的建立這些資源。建立完成以後會返回帶寬包的兩個ip以及instance的ID。


Packer主要的思想也是經過模板來定義一些內容,而後建立鏡像。Packer會經過模板本身來決定是基於阿里雲的基礎鏡像建立仍是基於自定義鏡像建立,而後會自動建立一個經典網絡的ECS或者是VPC網絡的ECS,同時會根據模板的定義在ECS之上去添加這個去安裝相關的應用,而後把ECS打一個快照,根據這個快照生成鏡像。當鏡像建立完成以後,會把它中間所用到的這些資源都釋放掉,能夠再作進一步的操做。

Packer模板最重要的就是兩部分,一個是builders一個是provisioners。Builders的type來決定她建立的這個鏡像是給哪裏用的。Provisioners定義的就是鏡像中要處理的任務。Packer的命令最主要的就是Packer build的一個指定目錄的json。在執行完build以後會提示鏡像建立完成並返回鏡像ID。


多個工具組合案例

用Packer製做鏡像,製做鏡像以後會生成鏡像ID,而後用Terraform的模板鏡像ID建立ECS,這個ECS就自帶了所要提供的服務的應用。這個好處就是一次製做重複使用,免去每次建立機器來重複安裝服務的過程。也能夠用Packer把應用打在鏡像當中,而後經過ESS去作伸縮。不少用戶在作彈性伸縮的時候呢會遇到一個麻煩,就是在最初的時候,ECS所用到的鏡像是隻有一個操做系統的鏡像,是沒有服務的,建立出來以後不可以直接使用。若是結合Packer,Packer把這些應用打在鏡像當中,而後用Terraform或其餘工具,在用彈性伸縮的時候直接是基於已經安裝好應用服務的鏡像去作伸縮。另一個工具就是把Terraform和Ansible結合,一塊兒去實現這個組合。



自動化的實現路徑共有三條主線。第一條線能夠利用Packer去而生成鏡像,自動的存儲到自定義鏡像列表當中,而後用Terraform建立更新或者銷燬這些基礎設施。在建立ECS的時候,咱們能夠選擇Packer建立出來的那個鏡像ID。在運行期咱們可使用Ansible去管理這些基礎設施或是ECS上的應用。


用代碼描述基礎設施的好處就是,代碼編寫好,驗證也是正確的,以後每次執行任務都不會出錯,而且快速高效。還能夠用代碼代替文檔,而且也有歷史記錄,可回滾。不用擔憂文檔更新不及時或者是人員流動帶來的一些問題。並且不用經過訪問生產環境就可以知道生產環境上的配置狀況,也能夠提升整個團隊DevOps的能力。

今天的分享就到這,謝謝你們!

相關文章
相關標籤/搜索