理解Terraform
用例之前,先理解[什麼是Terraform]()非常有用。當前頁面列出了Terraform
的一些實際使用案例,實際的用例比我們講到的要多很多。由於其原生擴充套件性,可以增加provider
和provisioner
來進一步擴充套件Terraform
操作資源的能力。
Heroku應用程式設定
Heroku
是個流行的託管web應用的PaaS平臺。開發者們建立一個應用程式,然後追加附件元件,如:資料庫或郵件供應商等。最好的特性之一就是可以動態調整 dynos 和 workers 的數量。但是,但多數普通應用會很快需要許多附加元件和外部服務。
Terraform可以用來程式碼化 HeroKu 應用需要的一些配置,以確保所有所需元件可用,但是它可以更進一步做到:配置DNSSimple設定一個 CNAME,或為應用配置一個 CloudFare CDN。最妙的是,Terraform可以在不借助Web介面的前提下在30秒以內完成所有工作。
多層應用
多層架構一個非常常見的模式。大多數兩層架構是使用資料庫層的web伺服器叢集。增加其他層用於API伺服器,快取伺服器,路由網格等。使用該模式是因為每一層可以獨立伸縮,併為關注點進行隔離。
Terraform是一個構建和管理基礎設施的完美工具。每一層都可以被描述為一個資源集,並且每層間的依賴關係都會被自動處理;Terraform會在web伺服器啟動前確保資料庫伺服器已經可用並且負載均衡可以感知後端web節點。每一層通過只修改配置檔案的計數值,使用Terraform可以很容易實現伸縮。因為建立和配置資源被程式碼化和自動化了,所以,隨負載彈性伸縮變得不再重要。
自服務叢集 (Self-Service Clusters)
在一定的組織規模下,管理一個大型且在增長的基礎設施對於集中式運維團隊而言變得非常有挑戰性。取而代之的是變為建立自服務的基礎設施,允許產品團隊使用集中運維團隊提供的工具管理他們自己的基礎設施。
使用Terraform,如何構建和伸縮一個服務的知識可以被程式碼化為一個配置檔案。Terraform配置檔案可以在組織內分享傳播,使客戶團隊可以像黑盒一樣使用配置檔案,並且使用Terraform作為工具來管理服務。
軟體演示
現代軟體越來越向網路化和分散式發展。儘管又像Vagrant這樣的工具構建虛擬環境用於演示,在與生產環境更接近的真實基礎設施做演示依然充滿挑戰。
軟體開發這可以提供一個terraform配置檔案來在類似AWS的雲平臺上建立,配置,引導一個演示環境。這使終端使用者很容易在他們自己的基礎設施上演示軟體,設定可以調整引數像叢集數量以更加嚴格的測試任意規模的工具。
一次性環境
同時有production和staging或QA環境是常用的實踐。這些環境是生產環境副本的縮小版克隆,用於在正式環境釋出新應用前的測試。隨著生產環境增長,也越來越複雜,維護一個最新版staging環境的工作也日益繁重。
使用Terraform,生產環境可以被程式碼化,然後共享給staging, QA 或 dev。這些環境可以被用於快速啟動新環境進行測試,也很容易被銷燬。Terraform可以幫助馴服平行環境的複雜性,使彈性建立和銷燬變得可行。
軟體定義網路
軟體定義網路(SDN)在資料中心中變得越來越受歡迎,因為它為運維和開發提供了更多控制並使網路更好的支援執行於上層的應用。大多數SDN的實現有一個控制層和一個基礎設施層。
Terraform可以用於軟體定義網路的程式碼化配置。這些配置以後可以使用Terraform自動配置和程式碼化程式碼化控制層介面。這使得配置可以版本化和自動變更。比如:AWS VPC是最常見的軟體定義網路之一,且可以使用Terraform配置。
資源排程程式
一個大型基礎架構下,為應用靜態分配機器變得越來越具有挑戰性。為了解決該問題,湧現了大量像 Borg, Mesos, YARN, 和 Kubernetes的排程器。他們可以用來動態排程Docker容器,Hadoop,Spark和許多其他軟體工具。
Terraform並不侷限於像AWS這樣的物理 provider。資源排程器可以被認為是一個provider,Terraform能夠向他們請求資源。這使Terraform可以用於多層:配置物理基礎設施,執行排程器以及配置排程器網格。
多雲部署
跨雲擴充套件基礎設施依提升容錯能力通常很有吸引力。只用一個可用區或一家雲提供商,容錯能力往往受限於該提供商的能力。擁有多雲部署可以更優雅的恢復某宕掉的可用區甚至整個雲平臺。很明顯多雲部署很有挑戰,因為目前已有的針對基礎設施管理的工具都是針對特定雲平臺的。Terraform不限定某個雲平臺,允許一個配置檔案用於管理多個雲提供商甚至可以處理跨雲依賴。它簡化了管理和編排,可幫助運維構建大型多雲基礎設施。
<!– more –>
<!–//
二流運維,三流英語,硬啃官方文件產物,若有不妥之處,歡迎指正,請以官方文件為準!
//–>