了解 DevOps 工具:Ansible 和 Terraform

已發表: 2021-08-31

Ansible 和 Terraform——聽說過這些 DevOps 工具嗎? 本文是關於它們及其差異的全部內容。

基礎架構即代碼(IaC)是 DevOps 領域的核心部分,是 DevOps 工程師必須具備的核心技能。 IaC 用於使用機器可讀定義文件的配置代碼來配置和管理 IT 基礎架構。 使用這種針對運營的軟件工程方法,您可以使用編程腳本自動化 IT 基礎架構。

當 DevOps 工程師考慮在 DevOps 中使用代碼實現自動化時,總是會突出顯示兩個 DevOps 工具,即 Terraform 和 Ansible。 兩者都是 DevOps 領域中評價最高且使用廣泛的工具。 但是很多人對這些工具不熟悉,不知道它們之間的主要區別。 在本文中,我將討論 Terraform、Ansible 及其主要區別。

什麼是 Terraform?

Terraform 是由 HashiCorp 創建的作為代碼軟件工具的開源基礎設施。 您可以通過在 Terraform 中使用非常易於使用的聲明性語言來編排完整的 IT 基礎架構。 在 Terraform 中,您需要為基礎設施聲明和配置必要的資源。 然後,它將處理所有必需的依賴項並為您構建基礎架構。

Terraform 僅在幾年前於 2014 年推出,但該工具的採用率非常驚人。 它提供了出色的功能,可以簡化 IT 基礎架構的完整編排,因為在大型組織中配置整個基礎架構非常複雜。 您還可以將此工具與所有流行的雲提供商集成,例如 AWS、GCP 等。

大多數 IT 組織為不同的團隊提供不同的工作環境,因此開發、分段或 QA 和生產團隊將擁有各自獨立的環境。 一段時間後,管理生產環境並不容易。 為了簡化管理,組織使用 Terraform 對生產環境中的所有內容進行編碼。 通過使用 terraform,您可以非常快速地旋轉開發人員和暫存環境,這與生產環境非常相似。 這有助於在與生產類似的平台上開發和測試應用程序。

星巴克、Slack、Uber 等許多大型組織都在大量使用 terraform 功能。

以下是 Terraform 的一些優點:

  • 使用簡單的 GUI 管理服務。
  • 使用簡單的語言(聲明性)描述 GCP、AWS、Azure 和其他的基礎架構。
  • 支持基於角色的訪問控制 (RBAC) 以確保安全。
  • 它可以使用 OpenStack、Azure、AWS、GCP 的 API 輕鬆配置
  • 它遵循無主架構,因此沒有用於跟踪所有配置更新的主節點。
  • 組織內的團隊可以使用 terraform 註冊表輕鬆地在基礎架構上進行協作。
  • 與 GitLab、Jenkins、Travis 等持續集成平台集成以部署 DevOps 管道很容易。

什麼是 Ansible?

Ansible 是 DevOps 域中的一個配置管理工具,用於自動化所有 IT 任務。 Ansible 也是一個開源工具,它使用聲明式和過程式語言進行配置管理。 這個工具得到了所有流行的雲提供商的大力支持,它使應用程序、網絡、基礎設施、安全、容器等自動化。它顯著降低了 DevOps 流程的複雜性,因此許多 DevOps 工程師更喜歡使用這個工具。

Ansible 通過使用簡單的 YAML 配置文件(人類可讀)輕鬆自動化最複雜的基礎架構。 它使用 YAML 編寫的代碼文件來執行配置管理; 此代碼文件稱為 Ansible Playbook。 Ansible 是無代理的,並且有一個主服務器來推送管理和更新遠程服務器上的應用程序所需的所有配置。

在 Ansible 中,您需要使用 SSH 連接到 IT 基礎架構中的節點。 一旦與節點的連接成功,Ansible 就會使用 Ansible 模塊推送最新的配置來安裝或更新或刪除應用程序。 您還可以選擇在 Ansible 中運行臨時命令,以快速執行小任務。

以下是 Ansible 的一些優點和特性:

  • 由於 Ansible 是無代理的,因此您無需在節點上安裝和運行代理即可執行任務。
  • 由於 Ansible 是基於 Python 構建的,因此它在 Python 中提供了大量的庫,這就是它對開發人員非常友好的原因。
  • 使用 SSH 提供安全身份驗證。
  • Ansible Tower 提供企業級可視化功能。
  • master 發送遠程服務器上的最新配置來執行基礎設施的更改,因此它支持基於推送的模型。
  • 它使用人類可讀的 YAML 文件進行配置管理,因此不需要額外的編碼技能。

Terraform 與 Ansible:差異

編排與配置管理

Ansible 是一個配置管理工具,而 Terraform 是一個編排工具。 這是 Terraform 和 Ansible 之間最根本的區別。 儘管這些工具之間的某些功能是共同的,但它們仍然彼此不同。

Ansible 用於添加、更新、刪除和管理 IT 基礎架構的配置,而 Terraform 用於聲明基礎架構組件並在多個雲提供商之間進行編排。

程序性與聲明性

Terraform 使用聲明性配置語言來聲明 IT 基礎架構的資源。 Ansible 使用過程和聲明性語言進行配置管理。 Ansible 中使用程序化方式來運行臨時命令並達到所需的基礎架構配置。 ansible 模塊使用聲明性方法。

可變與不可變基礎設施

您可以使用 Ansible 創建可變基礎架構,使用 Terraform 創建不可變基礎架構。 Ansible 在同一台服務器上管理和配置基礎設施的軟件。 當您推送更多配置更新時,生產環境會變得複雜並導致許多難以識別和修復的錯誤。

Terraform 主要為服務器上的任何部署使用新的 Docker 映像。 Terraform 創建一個新的 docker 鏡像來更新基礎設施上的任何軟件,在所有服務器上部署該鏡像,並刪除舊的配置 docker 鏡像。 因此,即使經過多次配置更新,環境仍然保持穩定。

大師與無大師

Ansible 有一個主機架構,負責存儲完整的基礎架構狀態並將新的配置更新推送到遠程服務器上。 這就是為什麼它在 ansible 中被稱為基於推送的部署模型。

在 Terraform 中,沒有單獨的主系統。 但是,當它通過 API 與 GCP、AWS 等雲提供商合作時,API 服務器就是這種情況下的主機。

社區

相比之下,Ansible 的社區要強於 Terraform。 例如,Ansible 在 GitHub 上有 45 個分支、49.7K 星、51,836 次提交和 21K 分叉,而 Terraform 有 183 個分支、28.7K 星、28,778 次提交和 6.9K 分叉。 目前,這兩種工具的社區正在迅速發展。

選擇哪一個,Ansible 還是 Terraform?

我會說這不是蘋果對蘋果的比較。 這個問題的答案取決於業務需求。 您可以使用 Ansible 進行配置管理,添加 Terraform 來編排 IT 基礎架構。 如果您的組織與雲提供商合作,使用 Terraform 將是更好的選擇。 這兩種工具都有其局限性和優勢,並且都是 DevOps 領域中的流行工具。 因此,根據您要解決的問題陳述,您可以選擇其中任何一種工具。

這是一個比較表,總結了 Ansible 和 Terraform 之間的差異。

標準Ansible 地形
成立於2012 2014
由開發Ansible Inc./紅帽公司哈希公司
寫在Python
類型配置管理工具編排工具
使用程序性和聲明性語言使用聲明性語言
基礎設施支持可變基礎設施支持不可變的基礎設施
生命週期管理是的
包裝和模板完全支持部分的
虛擬機配置和網絡部分的完全支持

社區和支持

49K+星28K+星

結論

這就是關於 Ansible、Terraform 及其差異的全部內容。 這兩種 DevOps 工具都在生產環境中得到高度使用,並且通常存在於大多數大型組織中。 那你還在等什麼? 繼續選擇更適合您組織的業務需求的工具。 您可以從學習其中一種工具開始,但同時了解這兩種工具可以讓您在多元化行業中獲得優勢。

你可能喜歡:

適用於您的 DevOps 項目的最佳包託管存儲庫。