Multi-Cloud模式下Terraform和Packer開源工具實踐分享
在2017雲棲大會・深圳峰會上,來自阿裏雲雲開發的黎山分享了《Multi-Cloud基礎設施和應用管理實踐》。軟件行業的變化、雲計算的出現和興起,推動著越來越多的企業選擇Multi-Cloud模式。黎山詳細介紹了Terraform和Packer開源工具的使用方法,通過4個案例源碼分享了具體的實踐過程。
?
以下內容根據直播視頻整理而成。
?
軟件行業的發展帶來的DevOps的變化
在很多年前,軟件會被打包成EXE或其他可運行的包,由於網絡費用比較高,所以軟件以小為美,並且軟件功能單一、架構簡單,發布周期比較慢。後來,軟件行業發生了很大變化,軟件開始分層(服務層、UI層等),加入很多日誌、服務監控等模塊,架構變得異常複雜。同時,雲計算開始出現並興起,我們可以不用再太多考慮機房的硬件設施,雲計算也提供了緩存、日誌、備份等多種服務,那是不是雲計算的出現會讓我們安枕無憂?
據調查顯示,越來越多的企業選擇Multi-Cloud模式,選擇Multi-Cloud的原因有很多,比如雲計算平台數據中心的訪問速度/雲服務的性能/可用性(上圖是2017年以來雲計算大故障事件)、雲計算平台的成本、雲計算平台的安全性、客戶服務質量、本地化、雲計算平台的提供商、以及企業自有的數據中心地點。在Multi-Cloud模式下,IaC尤其重要。DevOps職責包括五大部分:開發運維協作;自動化、基礎設施即代碼;持續集成/測試;持續交付/部署;持續監控/反饋。
用工具實現自動化
自動化高於手工
按照固定流程所進行的手工工作,比如手工回歸測試和手工部署工作,無趣、緩慢且無法審計。如果能將其代碼化,且用版本控製係統管理起來,並加以自動化,這既能節省以後手工運行的大量時間,又能體驗到開發測試和部署腳本工作的樂趣。
基礎設施即代碼高於手工配置
傳統Ops的部署工作有些需要用鼠標在界麵上點來點去,效率很低;效率高一些的Ops用了自動化腳本,但很多腳本都沒有進行版本控製,更別提針對腳本的自動化測試了。如果能夠將基礎設施的維護工作都通過編寫代碼並加以版本控製來完成,那麼會帶來很多好處,比如Ops可以不用通過訪問生產環境,就能知道生產環境上的配置情況;非運維人員如Dev,就有機會去學習這些運維配置代碼並且加以修改,提升整個團隊的DevOps能力;另外工具能方便地讀取這些代碼,來自動化地維護基層設施,大幅度提升Ops的工作效率。
一張圖看懂IaC
上圖中,右下方是基礎設施,主線是Packer、Terraform、容器服務、cloud-init,其中每一部分中灰色字體是表示不同的工具但可以實現與其類似的事情。從圖中可以看出,我們可以根據代碼定義鏡像的內容,通過Packer製作鏡像存儲在一個媒介中;通過代碼定義資源的編排,然後通過Terraform將這些資源創建起來;利用應用定義的方式創建基礎設施;在資源的運行時期,利用工具配置基礎設施。
Terraform/Packer的介紹
Terraform和Packer是來自HashiCorp家族。Packer是鏡像製作工具,它基於aliyun的基礎鏡像或本地鏡像,生成自定義鏡像。Terraform是資源編排工具,通過模板定義資源的描述,管理資源的創建、更新、銷毀全命周期。它們的特點是支持多平台(Aliyun、AWS、Azure、OpenStack、VMWare等)、開源(成熟、透明、可自增強)。
Terraform
Terraform是通過模板來創建資源,創建之後會生成tfstate文件,該文件會作為後期更新、加載資源的依據。
上圖左邊是Terraform的模板,最主要的是resource,其中“alicloud_instance”表示使用的是阿裏雲,後麵的“instance”是其別名,裏麵定義了創建ECS鏡像的ID、實例類型、創建數量、可用區、安全組、是否IO優化、是否分配IP、ECS的標簽。data也是可選的,利用正則表達式過濾,模板就可以使用過濾之後的結果。output是用來方便於整個資源創建後獲取信息發布的輸出。
Terraform最常用的有三個命令:terraform plan(預覽);terraform apply(執行);terraform destroy(銷毀)。上圖為整個VPC集群創建完成的輸出,可以看到ECS的參數、資源狀況。
上圖是VPC集群資源拓普圖,下方有一個VPC,然後有vswitch,VPC內有一個安全組,其上有規則作用,有兩台ECS(worker和master),eip作用在別名為master的ECS上,自定義路由也指向了master。
Packer
手動創建鏡像的過程是:首先需要自己創建一台ECS,安裝好相應組件,打快照,然後創建鏡像。Packer的目的是將這些手動的過程自動化起來。Packer通過模板的描述,選擇創建經典網絡ECS或者VPC網絡ECS,然後自動打快照、創建鏡像,如果是基於本地鏡像的話還會上傳鏡像到自定義鏡像列表中,最後可以共享鏡像、複製鏡像。
上圖右邊是Packer的模板,builders的type用來描述是基於阿裏雲的定義的鏡像,下方部分是創建完ECS之後所做的事情。
上圖是整個創建的過程,它會把需要的資源都創建起來,然後在對應的機器上安裝軟件。創建完成之後會把軟件卸載掉,最後返回鏡像的ID。
實例演示
四個實例演示的模板詳情可以通過以下鏈接查看。
創建ECS、修改標簽(TAG)
首先預覽一下所有的資源,沒有問題的話運行Terraform真正創建資源。將TAG進行修改,再次運行terraform apply會看到資源被改動。
模板地址:https://github.com/alibaba/terraform-provider/tree/master/terraform/examples/alicloud-ecs
創建ECS、創建SLB、掛載ECS
最後修改ECS的數量,再去執行terraform apply的時候,不僅看到有一台ECS添加,並且可以看到其掛載到了SLB上。
模板地址:https://github.com/alibaba/terraform-provider/tree/master/terraform/examples/alicloud-ecs-slb
創建VPC集群、銷毀VPC集群
Packer製作ChefServer鏡像、Terraform創建ECS啟動ChefServer
模板地址:https://github.com/alibaba/packer-provider/tree/master/examples/alicloud/chef
對於企業,可以基於.tfstate開發自己的應用資源管理係統。以應用的視角,看到應用所依賴的雲平台有哪些,以及每個雲平台所用到的資源。
Reference
- Terraform阿裏雲官方github倉庫:https://github.com/alibaba/terraform-provider
- Packer阿裏雲官方github倉庫:https://github.com/alibaba/packer-provider
- 雲棲公眾號:https://yq.aliyun.com/opstools
- 阿裏雲針對於開源DevOps工具的github倉庫總入口鏈接:https://github.com/alibaba/opstools
- Terraform官網:https://www.terraform.io/
- Packer官網:https://www.packer.io/
最後更新:2017-05-10 13:01:22