1. 程式人生 > >Terraform,自動化配置與編排必備利器

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 來配置基礎架構,因此除了您已經使用雲提供商之外,沒有新的身份驗證機制,並且不需要直接訪問您的伺服器。