在“DevOps”世界中,組織正在使用基礎架構即代碼 (IAC) 實施或構建流程。Ansible、Terraform 和 Puppet 允許企業擴展和創建可重復的配置,以測試和執行程序以持續確保正確的結果。我們將更深入地研究這三者之間的差異。指導您選擇最適合您需求的平臺。這三個都是高級平臺,用于部署具有高度復雜要求的可復制和重復應用程序。比較這些應用程序在配置管理、架構和編排方面的異同,并做出明智的決定。
基礎設施即代碼
十多年前引入的?基礎設施即代碼 (IAC)的概念?是指管理和配置計算機數據中心的過程。這是一種管理數據中心服務器、網絡基礎設施和存儲的策略。其目的是顯著簡化大規模管理和配置。
IAC 允許通過機器可讀的定義文件配置和管理計算機數據中心,而無需配置工具或物理硬件。簡單來說,IAC 將手動配置、構建指南、運行手冊和相關過程視為代碼。由軟件讀取,維護基礎設施狀態的代碼。
IAC 旨在解決配置漂移、系統不一致、人為錯誤和上下文丟失,解決了所有這些潛在的嚴重問題。這些過程過去需要相當長的時間;現代 IAC 工具使所有流程更快。它消除了手動配置步驟,并使它們具有可重復性和可擴展性。它可以更快地加載數百臺服務器。它允許用戶獲得可預測的架構并自信地維護數據中心的配置或狀態。
有多種 IAC 工具可供選擇,其中三個主要示例是 Ansible、Terraform 和 Puppet。他們都有自己獨特的優勢和劣勢,我們將進一步探討。
Terraform、Ansible 和 Puppet 的簡短背景
在我們開始比較這些工具之前,請參閱下面的簡要說明:
- Terraform(2014 年發布——當前版本 0.12.8):??Hashicorp 將?Terraform開發?為基礎架構協調器和服務供應商。它與云無關,支持多個提供商。因此,用戶可以使用相同的編程語言和配置結構來管理多云或多產品環境。它使用 Haschorp 語言,與其他工具相比非常用戶友好。
- Ansible(2012 年發布——當前版本 2.8.4):??Ansible?是一個強大的工具,用于利用各種類和配置方法將服務和服務器帶入所需狀態。此外,它還可以通過包裝模塊連接到不同的提供者來配置資源。用戶更喜歡它,因為它在編碼方面是輕量級的,具有快速部署能力。
- Puppet(2005 年發布——當前版本 6.8.0):??Puppet?是可用的最古老的聲明性期望狀態工具之一。它是基于服務器/客戶端的,它通過目錄刷新客戶端的狀態。它使用“hiera data”,一種強大的元數據配置方法。它通過將基礎設施定義為代碼的能力來強制使用程序進行系統配置。它在 Windows 或 Linux 上廣泛用于同時在多個應用程序服務器上提取字符串。
編排與配置管理
Ansible 和 Terraform 有一些關鍵的區別,但兩者也有一些相似之處。當我們查看兩個 DevOps 概念時,它們會有所不同:編排和配置管理,它們是工具的類型。Terraform 是一個編排工具。Ansible主要是一個配置管理工具(CM);它們的表現不同,但確實有一些重疊,因為這些功能不是相互排斥的。針對各種用途和優勢進行了優化,將這些工具用于各種情況。
編排工具?有一個目標:確保環境持續處于“理想狀態”。Terraform 就是為此而構建的,因為它存儲了環境的狀態,當某些東西不能正常運行時,它會在重新加載后自動計算并恢復系統。它非常適合需要恒定和不變狀態的環境。'Terraform Apply' 用于有效解決所有異常。
配置管理工具不同;他們不會重置系統。相反,他們在本地修復問題。Puppet 的設計可以在服務器上安裝和管理軟件。與 Puppet 一樣,Ansible 也可以配置每個動作和工具,并確保其正常運行而不會出現任何錯誤或損壞。CM 工具用于修復問題,而不是完全更換系統。在這種情況下,Ansible 有點混合,因為它可以同時執行編排和替換基礎架構。Terraform 使用更廣泛。它被認為是卓越的產品,因為它具有先進的狀態管理功能,而 Ansible 沒有。
這里要知道的重要一點是這里的功能重疊。大多數 CM 工具可以在一定程度上進行配置,反之亦然,許多配置工具可以進行一些配置管理?,F實情況是,不同的工具更適合某些類型的任務,因此這取決于您的服務器的要求。
程序性與聲明性
DevOps 工具?分為兩類來定義其操作:“聲明式”和“程序式”。由于存在重疊,并非每個工具都適合這種模具。Procedural 定義了一個需要精確方向和程序的工具,您必須在代碼中進行布局。聲明式是指一種工具“聲明”確切需要什么。它沒有概述獲得結果所需的過程。
在這種情況下,Terraform 完全是聲明性的。有一個定義的環境。如果該環境有任何改變,它會在下一個“Terraform Apply”中得到糾正。簡而言之,該工具會嘗試達到系統管理員所描述的所需最終狀態。Puppet 也旨在以這種方式進行聲明。
使用 Terraform,您只需要描述所需的狀態,Terraform 就會自動計算出如何從一種狀態進入下一種狀態。
或者,在這種情況下,Ansible 有點混合。它可以兩者兼而有之。它執行實現過程式配置的臨時命令,并使用大多數以聲明式執行的模塊。
如果您決定使用 Ansible,請仔細閱讀文檔,以便了解它的作用并了解預期的行為。必須知道您是否需要添加或減少資源以獲得正確的結果,或者您是否需要明確指出所需的資源。
比較配置
自動化配置任何基礎設施是自動化應用程序及其部署的整個運營生命周期的第一步。在云中,軟件從 VM、Docker 容器或?裸機服務器運行。Terraform 或 Ansible 都是配置此類系統的不錯選擇。Puppet 是較舊的工具,因此我們將仔細研究用于管理多個服務器的較新的 DevOps 程序。
Terraform 和 Ansible 以不同的方式處理配置過程,如下所述,但存在一些重疊。
使用 Terraform 進行配置:
Terraform 現有的聲明性模型中沒有體現某些行為。當以下列方式使用 Terraform 時,此設置會增加大量的不確定性和復雜性:
當 Terraform 模型是計劃的一部分時,它無法對供應商的操作進行建模。它需要協調比正常使用 Terraform 成功使用配置器所需的更多細節。
它需要額外的措施,例如授予對用戶服務器的直接網絡訪問權限、安裝必要的外部軟件以及頒發 Terraform 憑據以進行登錄。
使用 Ansible 進行配置:
Ansible 可以可靠地配置最新的云平臺、網絡設備、裸機服務器、虛擬主機和管理程序。
完成引導后,Ansible 允許單獨的團隊將節點連接到存儲。它可以將它們添加到負載均衡器,或任何安全補丁或其他操作任務。這種設置使 Ansible 成為任何流程管道的完美連接工具。
它有助于自動將裸基礎設施直接用于日常管理。使用 Ansible 進行配置,允許用戶在配置管理、應用程序部署和編排中無縫地使用通用的、人類可讀的自動化語言。
適用于 AWS 的 Ansible 和 Terraform 之間的差異
AWS 代表 Amazon Web Services,它是亞馬遜的子公司,為個人、公司和商業實體提供按需云計算平臺。Terraform 和 Ansible 對待 AWS 管理的方式截然不同。
使用 AWS 的 Terraform:
對于沒有大量虛擬化經驗的用戶來說,Terraform 是管理 AWS 的絕佳方式。盡管起初感覺??很復雜,但 Terraform 已經大大減少了阻礙提高采用率的障礙。
將 Terraform 與 A??WS 結合使用有幾個顯著優勢。
- Terraform 是開源的,它帶來了使用開源軟件的所有常見優勢,以及它背后不斷增長和熱切的用戶社區。
- 它對資源關系有內在的理解。
- 如果發生故障,它們會隔離到相關資源。另一方面,非依賴資源會繼續被創建、更新和銷毀。
- Terraform 使用戶能夠在應用之前預覽更改。
- Terraform 帶有 JSON 支持和用戶友好的自定義語法。
使用 AWS 的 Ansible:
Ansible 長期以來一直為 AWS 提供重要支持。這種支持允許使用 Ansible 劇本解釋甚至最復雜的 AWS 環境。描述后,用戶可以根據需要多次部署它們,并能夠擴展到不同區域的數百甚至數千個實例。
Ansible 有近 100 個支持 AWS 功能的模塊。例如虛擬私有云 (VPC)、簡單存儲服務 (S3)、安全令牌服務、安全組、Route53、關系數據庫服務、Lambda、身份訪問管理器 (IAM)、AMI 管理和 CloudTrail 等等。此外,它還包括 1300 多個附加模塊,用于管理用戶的 Linux、Windows、UNIX 等的不同方面。
以下是將 Ansible 與 AWS 結合使用時的優勢。
- 借助 Ansible Tower 的云庫存同步,您將準確了解哪些 AWS 實例已注冊,無論它們是如何啟動的。
- 您可以通過在其生命周期內準確跟蹤部署的基礎設施來控制庫存。因此,您可以確保系統管理正確,安全策略正確執行。
- 自動化的安全性及其基于角色的訪問控制,確保用戶只能訪問他們完成工作所需的 AWS 資源。
- 相同的簡單劇本語言可以輕松管理基礎架構并將應用程序大規模部署到不同的基礎架構。
Ansible、Puppet 和 Terraform 的比較
Puppet、Terraform 和 Ansible 已經存在了相當長的一段時間。但是,它們在設置、GUI、CLI、語言、用法和其他功能方面有所不同。
您可以找到以下三者之間的詳細比較:
差異點 | Ansible | 木偶 | 地形 |
管理和調度 | 在 Ansible 中,即時部署是可能的,因為服務器將配置推送到節點。在調度方面,企業版 Ansible Tower 具有免費版所沒有的功能。 | Puppet 主要關注推送和拉取配置,客戶端從服務器拉取配置。配置必須用 Puppet 的語言編寫。在調度方面,Puppet 的默認設置允許它檢查所有節點以查看它們是否處于所需狀態。?? | 在 Terraform 中,資源調度程序的工作方式與提供程序類似,使其能夠向它們請求資源。因此,它不僅限于 AWS 等物理提供商,還允許分層使用。Terraform 可用于配置到已調度的網格,以及設置運行調度程序的物理基礎設施。 |
易于設置和使用 | Ansible 更易于安裝和使用。它有一個沒有代理的主機,在客戶端機器上運行。它是無代理的這一事實大大有助于其簡單性。Ansible 使用以 Python 語言編寫的 YAML 語法,該語法內置于大多數 Linux 和 Unix 部署中。 | Puppet 更受模型驅動,適用于系統管理員。Puppet 服務器可以安裝在一臺或多臺服務器上,而 puppet 代理需要安裝在所有需要管理的節點上。因此,該模型是客戶端-服務器或代理主控模型。安裝時間可能需要大約十到三十分鐘。 | Terraform 在設置和使用方面也更容易理解。如果需要運行安裝程序,它甚至允許用戶使用代理服務器。 |
可用性: | Ansible 有一個輔助節點,以防活動節點下降。 | Puppet 有一個或多個 master,以防原來的 master 失敗。 | 不適用于 Terraform 的情況。 |
可擴展性: | 可擴展性更容易實現 | 可擴展性不太容易實現 | 可擴展性相對容易實現 |
模塊 | Ansible 的存儲庫或庫稱為 Ansible Galaxy。它沒有單獨的排序功能,需要人工干預。 | Puppet 的存儲庫或庫稱為 Puppet Forge。它包含近 6000 個模塊。用戶可以將 puppet 模塊標記為 Puppet 批準或支持,從而節省大量時間。 | 在 Terraform 的案例中,模塊允許用戶抽象出任何可重用的部分。這些部件可以配置一次,并且可以在任何地方使用。因此,它使用戶能夠對資源進行分組,以及定義輸入和輸出變量。 |
圖形用戶界面 | 開發較少的是 Ansible 的 GUI,最初是作為僅命令行工具引入的。即使企業版提供了一個 UI,但由于與命令行的同步問題,它仍然達不到預期。 | Puppet 的 GUI 優于 Ansible,能夠執行許多復雜的任務。用于有效地管理、查看和監視活動。 | 只有第三方 GUI 可用于 Terraform。例如,Codeherent 的 Terraform GUI。 |
支持 | Ansible 還包括對其企業版的兩個級別的專業支持。此外,AnsibleFest 是用戶和貢獻者的大型聚會,每年舉行一次。與 Puppet 相比,它背后的社區更小。 | Puppet 有一個專門的支持門戶以及一個知識庫。此外,還存在兩個級別的專業支持;標準版和高級版。Puppet 社區每年都會制作一份“DevOps 狀態”報告。 | Terraform 通過 Web 門戶提供對 HashiCorp 支持渠道的直接訪問。 |
需要考慮的三個綜合解決方案
在查看了上述比較之后,Ansible 對于以類似腳本的方式存儲和配置系統非常有利,而不是其他方式。用戶可以在短暫的環境中高效工作。它還可以與 Kubernetes 無縫協作以配置容器主機。
Puppet 在社區支持方面更加成熟。Puppet 具有出色的模塊,使其能夠更多地作為企業級解決方案工作。其強大的模塊測試易于使用。Ansible 適用于小型、臨時和快速部署。鑒于 Puppet 被推薦用于長期或更復雜的部署,并且可以管理 Docker 容器和?容器編排器。Terraform 在管理服務器下方的云服務方面表現更好。Ansible 擅長配置軟件和機器;Terraform 擅長管理云資源。在為自動化設計 IAC 環境時,這三者都有其優點和局限性。成功取決于知道哪些工具用于哪些工作。