瞭解一下配置管理工具,以找出哪個最適合你的 DevOps 組織。
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
本文由 LCTT 原創編譯,Linux中國 榮譽推出