阿裏雲黎山:如何利用開源DevOps工具完成雲上的自動運維
本文內容來源於黎山在阿裏雲棲社區-運維/DevOps在線技術峰會上的主題演講,IT大咖說為視頻合作方。
雲計算的特點是開箱即用,可以隨時的擴縮容,不用考慮硬件的損壞問題,也有豐富的雲服務和雲平台供我們選擇。在本次演講中,黎山通過實際應用場景為我們講述了基礎設施及代碼的重要性,以及在雲計算的運維中,如何利用工具來實現自動化,提高效率。
大家好,今天我們圍繞幾個議題展開:
-
通過實際的應用場景來講解IaC的重要性。
-
Terraform、Packer的使用介紹。
-
多個工具組合案例+操作演示。
應用場景解析一
某應用為了增大吞吐量,做了流量的均衡處理,在整個的基礎設施架構中,選擇了兩台ECS掛在SOB的一個基礎設施。如果要實現這樣的一個架構,需要做以下8個步驟來完成這些基礎設施的搭建:創建ECS、創建安全組、添加安全組規則、創建SOB、添加後端服務器、配置監聽端口、配置會話保持、添加健康檢查。要通過這八個步驟來完成兩個ECS掛到SOB上麵的基礎設施搭建。
應用場景解析二
應用二的特點是需要做網絡隔離,所以要把它整個的應用架構搭在VPC下麵。它有對外訪問網絡的需求,同時也有應用對外提供服務。如果要實現這樣一個基礎設施的話,大的步驟是需要以下七步:創建為PC、創建VSWITCH、創建NET網關、新建共享帶寬包、創建ECS、創建SLB、創建SNAT、最後掛載SLB。中間省略了若幹個配置操作。
應用場景解析三
應用三與應用二是一樣的基礎設施要求,就要按照固定的流程再重新做一遍重複的這些操作。
應用場景解析四
隨著應用的增加和業務的發展,我們的基礎設施的資源也在增加。我們希望能夠把應用和基礎設施做一個分組,也就是通過打標簽的方式,把哪些資源屬於哪一個應用做分類。
應用場景解析五
隨著業務的發展,應用二深受市場歡迎,流量也暴增。就需要增加ECS以承載更多的並發和訪問量,所以需要擴容一台與線上應用一致的ECS掛載到SOB上麵,這裏的一個關鍵點是擴容一台與現上應用一致的ECS。
按照傳統的操作方式,先將已經安裝好應用的ECS打上快照,然後生成鏡像,基於此鏡象創建ECS,再添加到SLB當中,同樣這裏麵省略了若幹的配置步驟。
場景總結:
通過以上幾個場景可知,它們的特點就是,操作流程是有序可循的,並且配置是固定的。如果全部是手工操作的話,會帶來以下缺點:效率低、時間長、可能導致錯誤、變更不能回滾、過程中沒有曆史記錄、過程不能審計。
針對場景五的IaC思想。場景五的一個需求就是要擴展,擴容一台與線上應用一致的ECS。如果用IaC的思想,操作流程應該是利用Packer創建一個鏡像,在打鏡像的時候,把提供服務的應用打到鏡像當中,然後用Terraform創建ECS以及其他資源。在創建ECS的時候,選擇Packer打出來鏡像ID。在變更的時候,我們隻需要修改Terraform的模板,把ECS變量的參數加一,執行變更就可以了。就能夠實現擴容一台與線上應用一致的ECS並且自動掛載到SLB下麵。
它們來自於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的能力。
今天的分享就到這,謝謝大家!
相關推薦
推薦文章
近期活動

視頻地址:https://www.itdks.com/dakashuo/detail/1247
最後更新:2017-06-23 23:35:51