感謝光顧,簡書停更缭黔,遷移至sengmentfault:https://segmentfault.com/a/1190000018145602
理解Terraform
用例之前食茎,先理解什么是Terraform非常有用。當前頁面列出了Terraform
的一些實際使用案例馏谨,實際的用例比我們講到的要多很多别渔。由于其原生擴展性,可以增加provider
和provisioner
來進一步擴展Terraform
操作資源的能力惧互。
Heroku應(yīng)用程序設(shè)置
Heroku
是個流行的托管web應(yīng)用的PaaS平臺哎媚。開發(fā)者們創(chuàng)建一個應(yīng)用程序,然后追加附件組件喊儡,如:數(shù)據(jù)庫或郵件供應(yīng)商等拨与。最好的特性之一就是可以動態(tài)調(diào)整 dynos 和 workers 的數(shù)量。但是艾猜,但多數(shù)普通應(yīng)用會很快需要許多附加組件和外部服務(wù)买喧。
Terraform可以用來代碼化 HeroKu 應(yīng)用需要的一些配置,以確保所有所需組件可用匆赃,但是它可以更進一步做到:配置DNSSimple設(shè)置一個 CNAME淤毛,或為應(yīng)用配置一個 CloudFare CDN。最妙的是算柳,Terraform可以在不借助Web界面的前提下在30秒以內(nèi)完成所有工作低淡。
多層應(yīng)用
多層架構(gòu)一個非常常見的模式。大多數(shù)兩層架構(gòu)是使用數(shù)據(jù)庫層的web服務(wù)器集群瞬项。增加其他層用于API服務(wù)器蔗蹋,緩存服務(wù)器,路由網(wǎng)格等囱淋。使用該模式是因為每一層可以獨立伸縮猪杭,并為關(guān)注點進行隔離。
Terraform是一個構(gòu)建和管理基礎(chǔ)設(shè)施的完美工具绎橘。每一層都可以被描述為一個資源集,并且每層間的依賴關(guān)系都會被自動處理;Terraform會在web服務(wù)器啟動前確保數(shù)據(jù)庫服務(wù)器已經(jīng)可用并且負載均衡可以感知后端web節(jié)點称鳞。每一層通過只修改配置文件的計數(shù)值涮较,使用Terraform可以很容易實現(xiàn)伸縮。因為創(chuàng)建和配置資源被代碼化和自動化了冈止,所以狂票,隨負載彈性伸縮變得不再重要。
自服務(wù)集群 (Self-Service Clusters)
在一定的組織規(guī)模下熙暴,管理一個大型且在增長的基礎(chǔ)設(shè)施對于集中式運維團隊而言變得非常有挑戰(zhàn)性闺属。取而代之的是變?yōu)閯?chuàng)建自服務(wù)的基礎(chǔ)設(shè)施,允許產(chǎn)品團隊使用集中運維團隊提供的工具管理他們自己的基礎(chǔ)設(shè)施周霉。
使用Terraform掂器,如何構(gòu)建和伸縮一個服務(wù)的知識可以被代碼化為一個配置文件。Terraform配置文件可以在組織內(nèi)分享傳播俱箱,使客戶團隊可以像黑盒一樣使用配置文件国瓮,并且使用Terraform作為工具來管理服務(wù)。
軟件演示
現(xiàn)代軟件越來越向網(wǎng)絡(luò)化和分布式發(fā)展狞谱。盡管又像Vagrant這樣的工具構(gòu)建虛擬環(huán)境用于演示乃摹,在與生產(chǎn)環(huán)境更接近的真實基礎(chǔ)設(shè)施做演示依然充滿挑戰(zhàn)。
軟件開發(fā)這可以提供一個terraform配置文件來在類似AWS的云平臺上創(chuàng)建跟衅,配置孵睬,引導一個演示環(huán)境。這使最終用戶很容易在他們自己的基礎(chǔ)設(shè)施上演示軟件伶跷,設(shè)置可以調(diào)整參數(shù)像集群數(shù)量以更加嚴格的測試任意規(guī)模的工具掰读。
一次性環(huán)境
同時有production和staging或QA環(huán)境是常用的實踐。這些環(huán)境是生產(chǎn)環(huán)境副本的縮小版克隆撩穿,用于在正式環(huán)境發(fā)布新應(yīng)用前的測試磷支。隨著生產(chǎn)環(huán)境增長,也越來越復雜食寡,維護一個最新版staging環(huán)境的工作也日益繁重雾狈。
使用Terraform,生產(chǎn)環(huán)境可以被代碼化抵皱,然后共享給staging, QA 或 dev善榛。這些環(huán)境可以被用于快速啟動新環(huán)境進行測試,也很容易被銷毀呻畸。Terraform可以幫助馴服平行環(huán)境的復雜性移盆,使彈性創(chuàng)建和銷毀變得可行。
軟件定義網(wǎng)絡(luò)
軟件定義網(wǎng)絡(luò)(SDN)在數(shù)據(jù)中心中變得越來越受歡迎伤为,因為它為運維和開發(fā)提供了更多控制并使網(wǎng)絡(luò)更好的支持運行于上層的應(yīng)用咒循。大多數(shù)SDN的實現(xiàn)有一個控制層和一個基礎(chǔ)設(shè)施層据途。
Terraform可以用于軟件定義網(wǎng)絡(luò)的代碼化配置。這些配置以后可以使用Terraform自動配置和代碼化代碼化控制層接口叙甸。這使得配置可以版本化和自動變更颖医。比如:AWS VPC是最常見的軟件定義網(wǎng)絡(luò)之一,且可以使用Terraform配置裆蒸。
資源調(diào)度程序
一個大型基礎(chǔ)架構(gòu)下熔萧,為應(yīng)用靜態(tài)分配機器變得越來越具有挑戰(zhàn)性。為了解決該問題僚祷,涌現(xiàn)了大量像 Borg, Mesos, YARN, 和 Kubernetes的調(diào)度器佛致。他們可以用來動態(tài)調(diào)度Docker容器,Hadoop辙谜,Spark和許多其他軟件工具俺榆。
Terraform并不局限于像AWS這樣的物理 provider。資源調(diào)度器可以被認為是一個provider筷弦,Terraform能夠向他們請求資源肋演。這使Terraform可以用于多層:配置物理基礎(chǔ)設(shè)施,運行調(diào)度器以及配置調(diào)度器網(wǎng)格烂琴。
多云部署
跨云擴展基礎(chǔ)設(shè)施依提升容錯能力通常很有吸引力爹殊。只用一個可用區(qū)或一家云提供商,容錯能力往往受限于該提供商的能力奸绷。擁有多云部署可以更優(yōu)雅的恢復某宕掉的可用區(qū)甚至整個云平臺梗夸。很明顯多云部署很有挑戰(zhàn),因為目前已有的針對基礎(chǔ)設(shè)施管理的工具都是針對特定云平臺的号醉。Terraform不限定某個云平臺反症,允許一個配置文件用于管理多個云提供商甚至可以處理跨云依賴。它簡化了管理和編排畔派,可幫助運維構(gòu)建大型多云基礎(chǔ)設(shè)施铅碍。