【愛分享】對你有幫助的私有云上的 DevOps 開源工具

天府雲創發表於2017-04-25

在可維護性,可靠性,效率和安全性方面,DevOps 為私有云在改進操作流程方面發揮著重要的作用。私有云是一個由許多硬體和軟體元件組成的複雜系統。

對於任何支援的企業組織,操作流程的自動化和文件記錄,規劃變更和跟蹤應用的更新都是強制性的要求。

同樣的方法也適用於雲端計算的工作負載量。此外DevOps的實踐也成為開發者和 QA 團隊事實上的標準,特別是當使用私有云作為開發或目標平臺時。當然,並不是所有的雲操作方面都可以用 DevOps 來實踐。

例如,許多硬體相關的操作不匹配--你不能用一個軟體工具,去物理的連線伺服器上的硬體開關(本人注:伺服器的 IPMI 是可以做到遠端控制呀。)

但即使在這種情況下,你仍可使用 DevOps 工具和實踐來驗證連通性和記錄網路配置過程。也為不斷增長的軟體定義網路(SDN)的需求提供了一個機會,讓 DevOps 在新的領域得以發展。


我們將回顧私有云幾種類別上的15個DevOps 工具

在這篇文章中,我們將在幾個類別中討論15個針對私有云的 DevOps 工具。這幾些工具類別的分選主要是人為合成的,在由工具提供的功能之間沒有嚴格的邊界,並且在某些情況下,這裡所提到的工具可以做更多範疇假設。

最後,這裡的一些工具沒有根據具體的規則去分類,所以如果我們忘記了你認為應該包括的工具,只需給我們發個訊息,我們將會討論這個工具,並在下一次綜述時將其納入其中。

DevOps Tools

1. 配置管理工具(Configuration management tools)

配置管理工具自動完成日常操作,系統管理任務,當建立複雜的系統時,最大限度地減少人為錯誤。配置管理工具允許你定義的配置作為程式碼。(“Infrastructure as a code” 的方式)。

它可以讓你追蹤配置基線之間的變化(又稱為配置版本控制),有效的應用它們並在必要時進行回滾更改操作。此外操作流程,如部署或釋出管理可以記錄並驗證。

使用案例:私有云初始化部署和配置,將更改應用到私有云,應用具體的部署和配置。

1.1 Chef

Chef 的配置檔案使用領域專用語言(DSL)的“配方”(以.rb 為副檔名)。多個配方也可以整合到一個菜譜(cookbook)中。該配方定義了資源及其狀態,例如:應該安裝的軟體包,該檔案應存在,服務應該執行,等等。

Chef 驗證所有定義的資源是否應具有指定的狀態,如果必要,任何資源的實際狀態如果與指定的狀態不同,那麼則應用更改。這允許你寫冪等的配方,意味著你可以多次應用相同的配方,如果所有定義的資源都具有指定的狀態,那麼 Chef 將不會更改任何內容。

Chef 可以在 伺服器/客戶端 模式中使用,也可在獨立的模式下執行。在任何情況下,Chef 應安裝要配置的節點或VM上。

Chef 客戶端是用 Ruby 語言編寫的,Chef 伺服器是用 Ruby 和 Erlang 語言編寫的。許可:2.7版本以後的使用 Apache License,之前版本使用 GNU General Public License。

Chef 菜譜的示例:

nclude_recipe “apt”

package ‘nginx’ do   action :install end

service ‘nginx’ do   action [ :enable, :start ]

end

1.2 Puppet

Puppet 的配置檔案使用特殊的領域專用語言,它們被稱為 Puppet 清單(以.pp 為副檔名)。Puppet 可以使用獨立的模式或者 伺服器/客戶端 模式。Puppet 客戶端(agent)應該安裝要配置的每個節點或VM上。

Puppet 客戶端 通過一個名為 Facter 的工具收集 Puppet 伺服器上的配置更改要求,並生成特定與伺服器的目錄,其應用的配置更改都會記錄下來。
Puppet 可以用來配置 類 unix 系統或  Windows 節點/虛擬機器。

Puppet 是用Ruby 語言編寫。許可:Apache License.

Puppet 清單 的示例:

service { ‘nginx’:

ensure => running,

enable => true, }

1.3 Ansible

Absible 使用 模組(Modules)來定義配置任務。模組可以用標準指令碼語言(Python,Bash,Ruby,等等)編寫,這是一個很好的做法,使每個模組冪等。Ansible 劇本(YAML語言編寫)角色對映到 節點/虛擬機器上,以對這些節點/虛擬機器 進行編排有序的執行。

Ansible 支援 ad-hoc 任務:管理任務(不必冪等)以在多個節點/虛擬機器上執行。Ansible具有無代理架構:你不需要在配置的節點/虛擬機器上安裝Ansible(然而,這些節點必須安裝 python 環境),Ansible 通過SSH或者通過 PowerShell(Windows 機器)從單個控制機器上配置管理節點/虛擬機器,並且能夠支援並行配置多個節點。

Ansible 可以用來配置類 unix 系統或 Windows 節點/虛擬機器。

Ansible 使用 Python 語言編寫。許可:GNU General Public License.

Ansible playbook 示例:

– name: Install nginx

yum: name=nginx state=present- name: restart nginx

service: name=nginx state=restarted enabled=yes

1.4 Salt

Salt(又叫SaltStack)同時支援伺服器/客戶端 和無代理模式。在後一種情況下,Salt 使用SSH連線到受管理的節點/虛擬機器。Salt 使用以Python編寫的執行模組,其中包含函式以定義配置任務。另外 Salt 支援 ad-hoc  命令。Salt 狀態檔案(以.sls 為副檔名)以 YAML 格式定義冪等任務。

Salt 使用 Python 語言編寫。許可:Apache License.

Salt 狀態描述檔案示例:

nginx:

pkg.installed

2. 裸機配置工具(Bare-metal provisioning tools)

裸機配置工具從中心伺服器基於網路的作業系統自動安裝。

使用案例:在私有云的初始部署期間提供新的裸機,增加新的裸機伺服器,裸機配置作為私有云的服務。

2.1 Cobbler

Cobbler 使用 DHCP 伺服器來處理引導伺服器並將其引導到TFTP伺服器,在那裡它可以下載作為PXE引導檔案和帶有作業系統的可引導映像。

然後 Cobbler 使用 Linux 的 Kickstart(用於基於Red Hat的作業系統)或Pressed(用於基於Debian的作業系統)安裝方法進行無人值守的作業系統安裝和配置。

由配置檔案來自定義要配置的系統,Cobbler 支援多個配置檔案。一旦節點被配置,Cobbler 應確保該節點被引導到預配置的作業系統而不是PXE。Cobbler 包含 命令列客戶端和 Web 客戶端。

Cobbler 使用 Python 語言編寫。許可:GNU General Public License。

2.2 Ironic

Ironic 是一個OpenStack專案,它使用PXE配置裸機伺服器和 IPMI以開啟/關閉機器。Ironic 包含 Ansible Playbooks(bifrost專案),以獨立模式安裝和執行 Ironic,無需其它 OpenStack 元件。Ironic 還包含命令列客戶端和 Web 客戶端。

Ironic 使用 Python 語言編寫。License:GNU Affero General Public License。

3. 編排工具(Orchestration tools)

編排作為配置工具的元級。

使用方案:初始化部署和配置私有云,自動擴充套件。

3.1 MCollective

MCollective 是構建伺服器編排和並行工作執行系統的框架,而不是一個工具。MCollective 支援分散庫存和自動發現。

MCollective 服務端 應安裝在 被管理節點/虛擬機器,而 MCollective 客戶端應安裝在控制機上。MCollective 使用代理外掛來擴充套件其功能。

MCollective 伺服器和客戶端不直接通訊,而是在釋出/訂閱模式中使用中介軟體系統(通常是RabbitMQ)。這允許 MCollective 客戶端向 MCollective 伺服器傳送廣播請求,也支援直接請求/回覆。

MCollective 使用Ruby語言編寫. 許可:Apache License。

3.2 Juju

Juju 允許你將複雜的應用程式部署到多個雲平臺和裸機伺服器上。Juju 使用 charms 來定義代理的行為,charm hooks 是要執行的實際任務(如:安裝軟體,啟動或停止服務等)。

Charms 還定義了與其它 charms 的關係。Charm hooks 可以用任何語言來實現。還有配置管理工具,如Ansible,Chef,Puppet 可以在 hook 裡面做伺服器配置管理。

Charm bundle 允許你將一組 charms,它們的屬性和關係匯出到 YAML 檔案中。然後,這個  bundle 可以匯入到另一個 Juju 環境中,以準確的部署已部署的應用程式。Juju 包含 命令列客戶端和web客戶端。

Juju 使用 Go 語言編寫。許可:GNU Affero General Public License, GNU Lesser General Public License

3.3 Apache Brooklyn

Apache Brooklyn 允許你使用基於策略的自動化來建模,監控和管理應用程式。對於建模,Apache Brooklyn 使用藍圖(blueprint)的概念,它根據元件、配置、關係和部署場景來定義應用程式。藍圖使用 YAML 檔案編寫。

Apache Brooklyn 支援許多應用程式,開箱即用。並具有 Web UI 來部署,監視和管理應用程式。此外,Apache Brooklyn 支援許多位置部署,包括雲平臺和現有節點。

相同的藍圖可以用於將應用程式部署到不同的位置。Policies 根據應用程式感測器的讀數定義對應用程式的無人值守更改。

Apache Brooklyn 使用 Java, Javascript, Groovy 語言編寫。許可: Apache License.

3.4 Cloudify

Cloudify 允許你在 YAML 檔案中定義應用程式配置、服務和依賴關係。這樣的檔案稱為藍圖。Cloudify 採用藍圖作為輸入,可以部署和管理應用程式。

Cloudify 支援多種雲端計算平臺和虛擬化環境。藍圖還定義了應用程式的生命週期。對於應用程式部署階段,Cloudify 支援配置管理工具,如Chef和Puppet。

Cloudify 使用 Python 語言編寫。許可:Apache License。

3.5 Docker Machine

Docker Machine 是一個工具,它允許你在提供的節點上安裝 Docker(見下文),之後可以遠端的管理這樣的節點。

Docker Machine 使用Go語言編寫。許可:Apache License。

4. 持續整合工具 (Continuous integration tools)

使用案例:從開發到生產,在內部雲開發、安裝和應用程式執行的統一平臺 。

4.1 Jenkins

Jenkins 是一個具有許多外掛的自動化伺服器。用於構建,測試和自動化部署應用程式。通常Jenkins用作軟體開發的 CI/CD 工具。Jenkins 的作業(構建)可以由各種觸發器啟動。例如提交程式碼到版本控制系統,按計劃事件,通過訪問特定 URL 構建或者在完成其它構建之後進行觸發。

Jenkins 使用 Java 語言編寫. 許可:MIT License.

4.2 Docker

Docker 允許你將具有所有依賴關係的應用程式軟體打包到容器中,這可以很輕鬆的部署在基於 Linux 的平臺上。在非 Linux 平臺上 Docker 使用一個虛擬機器來執行容器。

Docker 使用 Go 語言編寫。 許可:Apache License 2.0。

5. 監控和日誌記錄(Monitoring and logging)

使用案例:從私有云服務和應用程式整合日誌,監控分散式服務和應用程式。

5.1 Zabbix

Zabbix 是一個為應用服務,網路服務和硬體監控提供的解決方案。Zabbix 將收集的資料儲存在關聯式資料庫中,如 MySQL,PostgreSQL 等。Zabbix 允許你監控簡單的服務,如 HTTP 服務。

Zabbix agent 端可以安裝在 Windows 和 類 Unix 伺服器上,用來檢視系統引數,如 CPU 負載,記憶體和磁碟利用率等。

另外,agent 可用於監視標準服務和自定義應用程式。Zabbix 也支援通過 SNMP、SSH 等方式,無需在要監視的伺服器上安裝代理。

Zabbix 使用 C, PHP,Java 語言編寫。許可: GNU General Public License version 2。

5.2 Elasticsearch, Logstash, Kibana (ELK)

ELK 是 Elasticsearch,Logstash,Kibana 軟體的組合,它是用於記錄,日誌分析,日誌搜尋和視覺化的完整工具。Elasticsearch 是基於 Apache Lucene 的搜尋工具。Logstash 是用於收集,解析和儲存日誌的工具,可以通過 Elasticsearch 對其進行索引。

Logstash 支援許多資料來源,解析器和過濾器。Logstash 通常與 Lumberjack(一種工具)結合使用。該工具提供其 syslog 實現,並可將本地日誌事件轉發到 Logstash 中。

當通過網路傳送日誌時,Lumberjack 使用 SSL 對日誌進行加密。Logstash 和 Elastcsearch 都支援 HA 配置,沒有單點故障,以確保所有日誌都儲存在遠端。Kibana 是 Elasticsearch 的視覺化外掛。

Elasticsearch,Logstash 使用 Java 編寫。Kibana 使用 JavaScript 編寫。Lumberjack 使用C語言編寫。License:Apache License 2.0。

DevOps 是一個不斷增長的文化,許多組織企業正在採取。將傳統IT和開發人員緊密結合在一起,為企業提供敏捷,快速響應的環境。由於許多工具來支援這些努力,以 Devops 為 IT 中心的轉變,正變得更不復雜和更有益。

相關文章