五大最流行的配置管理工具
DevOps 正因為有提高產品質量、縮短產品開發時間等優勢,目前備受業界關注,同時也在長足發展當中。
DevOps 的核心價值觀是 團隊文化 、 自動化 、 評估 和 分享 (CAMS),同時,團隊對 DevOps 的執行力也是 DevOps 能否成功的重要因素。
- 團隊文化讓大家團結一致;
- 自動化是 DevOps 的基礎;
- 評估保證了及時的改進;
- 分享讓 CAMS 成為一個完整的循環過程。
DevOps 的另一個思想是任何東西,包括伺服器、資料庫、網路、日誌文件、應用配置、文檔、自動化測試、部署流程等,都可以通過代碼來管理。
在本文中,我主要介紹配置管理的自動化。配置管理工具作為 基礎架構即代碼 (IaC)的一部分,支持使用經過測試和驗證的軟體開發實踐,通過明文定義文件管理和配置數據中心。
DevOps 團隊只需要通過操作簡單的配置文件,就可以實現應用開發中包括版本控制、測試、小型部署、設計模式在內的這些最佳實踐。總而言之,配置管理工具實現了通過編寫代碼來使基礎架構的配置和管理變得自動化。
為什麼要使用配置管理工具?
配置管理工具可以提高應用部署和變更的效率,還可以讓這些流程變得可重用、可擴展、可預測,甚至讓它們維持在期望的狀態,從而讓資產的可控性提高。
使用配置管理工具的優勢還包括:
- 讓代碼遵守編碼規範,提高代碼可讀性;
- 具有 冪等性 ,也就是說,無論執行多少次重複的配置管理操作,得到的結果都是一致的;
- 分散式的設計可以方便地管理大量的遠程伺服器。
配置管理工具主要分為 拉取 模式和 推送 模式。拉取模式是指安裝在各台伺服器上的 代理 定期從 中央存儲庫 拉取最新的配置並應用到對應的伺服器上;而推送模式則由 中央伺服器 的中央伺服器會觸發其它受管伺服器的更新。
五大最流行的配置管理工具
目前配置管理工具有很多,不同的配置管理工具都有自己最適合的使用場景。而對於下面五個我按照字母順序列出的配置管理工具,都對 DevOps 有明顯的幫助:全都具有開源許可證、使用外部配置文件、支持無人值守運行、可以通過腳本自定義運行。下面對它們的介紹都來源於它們的軟體庫和官網內容。
Ansible
「Ansible 是一個極其簡潔的 IT 自動化平台,可以讓你的應用和系統以更簡單的方式部署。不需要安裝任何代理,只需要使用 SSH 的方式和簡單的語言,就可以免去腳本或代碼部署應用的過程。」——GitHub Ansible 代碼庫
Ansible 是我最喜歡的工具之一,我在幾年前就開始使用了。你可以使用 Ansible 在命令行中讓多個伺服器執行同一個命令,也可以使用 YAML 格式的 劇本 來讓它自動執行特定的操作,這促進了技術團隊和非技術團隊之間的溝通。簡潔、無代理、配置文件對非技術人員友好是它的幾個主要優點。
由於 Ansible 不需要代理,因此對伺服器的資源消耗會很少。Ansible 默認使用的推送模式需要藉助 SSH 連接,但 Ansible 也支持拉取模式。劇本 可以使用最少的命令集編寫,當然也可以擴展為更加精細的自動化任務,包括引入角色、變數和其它人寫的模塊。
你可以將 Ansible 和其它工具(包括 Ansible Works、Jenkins、RunDeck、ARA 等)結合起來使用,因為這些工具 提供了運行劇本時的可追溯性,這樣就可以創建控制流程的中央控制台。
CFEngine
「CFEngine 3 是一個流行的開源配置管理系統,它主要用於為大規模的系統提供自動化配置和維護。」——GitHub CFEngine 代碼庫
CFEngine 最早在 1993 年由 Mark Burgess 作為自動配置管理的科學方法提出,目的是降低計算機系統配置中的熵,最終收斂到期望的配置狀態,同時還闡述了冪等性是讓系統達到期望狀態的能力。Burgess 在 2004 年又提出了 承諾理論 ,這個理論描述了代理之間自發合作的模型。
CFEngine 的最新版本已經用到了承諾理論,在各個伺服器上的代理程序會從中央存儲庫拉取配置。CFEngine 的配置對專業技能要求較高,因此它比較適合技術團隊使用。
Chef
「為整個基礎架構在配置管理上帶來便利的一個系統集成框架。」——GitHub Chef 代碼庫
Chef 通過由 Ruby 編寫的「 菜譜 」來讓你的基礎架構保持在最新、最兼容的狀態,這些「菜譜」描述了一系列應處於某種狀態的資源。Chef 既可以通過客戶端-服務端的模式運行,也可以在 chef-solo 這種獨立配置的模式下運行。大部分雲提供商都很好地集成了 Chef,因此可以使用它為新機器做自動配置。
Chef 有廣泛的用戶基礎,同時也提供了完備的工具包,讓不同技術背景的團隊可以通過「菜譜」進行溝通。儘管如此,它仍然算是一個技術導向的工具。
Puppet
「Puppet 是一個可以在 Linux、Unix 和 Windows 系統上運行的自動化管理引擎,它可以根據集中的規範來執行諸如添加用戶、安裝軟體包、更新伺服器配置等等管理任務。」——GitHub Puppet 代碼庫
Puppet 作為一款面向運維工程師和系統管理員的工具,在更多情況下是作為配置管理工具來使用。它通過客戶端-服務端的模式工作,使用代理從主伺服器獲取配置指令。
Puppet 使用 聲明式語言 或 Ruby 來描述系統配置。它包含了不同的模塊,並使用 清單文件 記錄期望達到的目標狀態。Puppet 默認使用推送模式,但也支持拉取模式。
Salt
「為大規模基礎結構或應用程序實現自動化管理的軟體。」——GitHub Salt 代碼庫
Salt 的專長就是快速收集數據,即使是上萬台伺服器也能夠輕鬆完成任務。它使用 Python 模塊來管理配置信息和執行特定的操作,這些模塊可以讓 Salt 實現所有遠程操作和狀態管理。但配置 Salt 模塊對技術水平有一定的要求。
Salt 使用客戶端-服務端的結構(Salt minions 是客戶端,而 Salt master 是服務端),並以 Salt 狀態文件記錄需要達到的目標狀態。
總結
DevOps 工具領域一直在發展,因此必須時刻關注其中的最新動態。希望這篇文章能夠鼓勵讀者進一步探索相關的概念和工具。為此, 雲原生計算基金會 (CNCF)在 Cloud Native Landscape Project 中也提供了很好的參考案例。
via: https://opensource.com/article/18/12/configuration-management-tools
作者:Marco Bravo 選題:lujun9972 譯者:HankChow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive