Terraform,自動化配置與編排必備利器

Terraform - Infrastructure as Code什麼是 Terraform

Terraform 是一個安全、高效地部署、更改、版本化基礎設施和應用程序的工具,可以用來管理多層次的資源。從上層的軟件配置到底層的網絡、系統配置都可以使用 Terraform 統一進行管理。

Terraform 用配置文件來描述一個應用。 Terraform 會將配置文件與當前環境對比後,生成一個執行計劃,這個計劃會列出爲了達到配置文件中定義的狀態所需要執行的操作,然後執行計劃以達到期望的狀態。

Terraform 通過插件機制管理不同的資源提供者,以此來接入各種資源,如虛擬機,存儲,網絡和各種應用服務。

Terraform 的主要特性Infrastructure as Code

將基礎架構使用配置語法進行描述,這可以讓數據中心的構建計劃可以像其他代碼一樣進行版本化和追蹤。

Execution Plans

Terraform 有一個規劃步驟,它生成一個執行計劃。執行計劃顯示當您調用應用程序時 Terraform 將執行的操作。使用這個功能可以保證操作基礎設施時不發生意外

Resource Graph

Terraform 創建了一個所有資源的視圖。這使得 Terraform 可以並行化沒有依賴的創建與修改。

因此,Terraform 可以高效地構建基礎架構。操作人員也能更加了解環境的結構。

Change Automation

Terraform 會自動的分析什麼是需要修改的,從而避免了許多可能的人爲錯誤。

Terraform vs. Other Software

與 Terraform 類似的 Infrastructure as Code 工具大概有下面幾種:

下面將從幾個方面來說明 Terraform 與其他工具對比的優勢。

配置管理工具與編排工具

Chef、Puppet、Ansible、SaltStack 都可以稱爲配置管理工具,這些工具的主要目標是在已經存在的機器上安裝和管理軟件。

而 Terraform 和 CloudFormation 可以稱爲編排工具,更注重於數據中心以及相關服務的高級抽象。他們的工作重點是創建資源並且引導進行初始化。

而且在現在的環境下,大家使用容器等服務,鏡像已經包括了軟件的安裝與配置。一旦你有了鏡像,你需要的是一些服務器去運行它。

對於提供服務器這種需求,編排工具會比配置管理工具更適合做此類工作。

編程式語言與聲明式語言

Chef 和 Ansible 希望你去一步步編寫程序以達到最終所期望的狀態。

Terraform、CloudFormation、SaltStack、Puppet 希望你去聲明最終想要的資源與資源的狀態,工具本身會自動分析達到想要的狀態需要進行怎樣的操作。

在使用編程式語言時,工具不會獲取歷史的狀態,所以我們需要考慮的更多以達到與之前版本的兼容。

並且使用編程式語言會導致代碼庫變得越來越龐大,不利於人們理解與代碼的複用。不過聲明式的語言的表達能力是較爲欠缺的,例如我們需要基礎設施的滾動升級時,聲明式的語言是很難滿足要求的。

爲此 Terraform 提供了一些基礎服務,例如輸入變量,輸出變量,在銷燬之前創建等。

客戶端服務器架構與客戶端架構

Chef、PuppetSaltStack 在默認情況下都使用了客戶端服務器架構。客戶端(可能是 Web UI 或 CLI 工具)是用來發出命令(例如 “deploy X”)的東西。

這些命令到達一個服務器,它負責執行你的命令並存儲系統的狀態。要執行這些命令,服務器會與 agent 進行通信,agent 必須在要配置的每個服務器上運行,這有幾個缺點:

  • 您必須在每臺服務器上安裝並運行額外的軟件。

  • 爲了配置管理,您必須部署額外的服務器(甚至是一組服務器以實現高可用性)。

  • 由於客戶端,服務器和代理都需要通過網絡進行通信,因此您必須爲其打開額外的端口,並配置相互驗證。

  • 這些配置會引入大量不同類型的故障,當收到錯誤警告時,必須要弄清楚是哪一部分出現了故障。

     

CloudFormation 也是客戶端 / 服務器架構,但 AWS 透明地處理所有的服務器細節,作爲最終用戶,您只需要考慮客戶端代碼。Ansible 客戶端則通過 SSH 直接連接到您的服務器。

Terraform 使用雲提供商 API 來配置基礎架構,因此除了您已經使用雲提供商之外,沒有新的身份驗證機制,並且不需要直接訪問您的服務器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章