DevOps優(yōu)秀實踐和工具在本地環(huán)境中的概述
最近,我進行了一次網上搜索,以尋找DevOps的概述,盡管有大量的DevOps工具和實踐,但我無法找到一個綜合的概述。因此,我開始了對DevOps生態(tài)系統(tǒng)和最佳實踐的梳理,以創(chuàng)建一個整體視圖,方便后續(xù)研究實踐。
CI(持續(xù)集成)
這個圖表的CI部分包括以下組件:
- 代碼倉庫:在圖表中,我使用了GitLab作為源代碼控制和代碼倉庫,因為它在倉庫管理方面具有用戶友好的界面。它允許以分層方式創(chuàng)建組和子組,有效地控制團隊結構。
- 構建工具:圖表中也使用了GitLab作為構建工具。它提供了廣泛的功能,用于編寫代碼管道,并支持模板化。
- 自動化測試:雖然有許多端到端測試框架可用,但目前在社區(qū)中最流行的是Cypress。對于自動化安全測試,您還可以使用GitLab,它提供了全面的工具集,供您使用。
- 構件庫:為了存儲Docker鏡像或Helm圖表,我集成了Harbor作為構建庫。盡管有基于云的選項,但在空隙環(huán)境中使用諸如Harbor之類的工具是必需的。
我將CD存儲庫與源代碼存儲庫分開,因為需要多個環(huán)境來為多個客戶提供服務。然而,如果您的每個產品沒有多個環(huán)境,您可以將它們合并到一個存儲庫中。
- 基礎設施即代碼:為了創(chuàng)建基礎設施(VM)和平臺(Kubernetes),使用像Terraform這樣的工具是必不可少的,它可以輕松創(chuàng)建。雖然還有其他選擇,比如Ansible或Puppet,但這些工具不支持聲明性格式。我強烈建議使用Terraform和GitLab來存儲您的IAC狀態(tài)。
- 部署服務:我將GitLab作為部署服務,用于存儲每個應用程序的環(huán)境配置文件。您可以在GitLab內創(chuàng)建一個Git存儲庫,存儲您的配置文件,并定義一個管道,以將Helm圖表部署到Kubernetes集群。雖然還有其他選擇,比如Spinnaker,但我發(fā)現它相當復雜,具有許多可能對您的用例不必要的功能。
CM(持續(xù)監(jiān)控)
CM(持續(xù)監(jiān)控)部分包括以下組件和關系:
度量服務器:在圖表中,我使用Prometheus作為度量服務器,用于收集和存儲來自應用程序、平臺和基礎設施的度量。
日志服務器:我使用了社區(qū)中廣受歡迎的ELK堆棧(Elasticsearch + Logstash + Kibana)來收集和存儲日志。它提供了廣泛的功能,可以根據收集的日志增強分析儀表板。
跟蹤服務器:對于跟蹤服務器,我選擇了Jaeger。雖然還有另一個選項Zipkin,但我個人推薦Jaeger,因為它是一個較新的項目,擁有更大的社區(qū)。如果您想了解如何從應用程序發(fā)送跟蹤到Jaeger,可以查看我關于這個主題的另一篇文章:
基礎設施監(jiān)控:有許多可用于基礎設施監(jiān)控的工具,每個工具都有其自己的優(yōu)缺點。然而,我選擇了Zabbix,因為它是一個具有全面監(jiān)控能力的開源項目。它是一個基于代理的工具,雖然還有一些無代理的替代方案。一些公司選擇使用SolarWinds作為替代方案。
自動縮放器:Keda項目專門設計用于基于Kubernetes中不同指標的Pod自動縮放。它支持各種類型的應用程序,并從中收集指標以便于自動縮放。此外,還有其他工具可用于根據Prometheus收集的指標自動縮放基礎設施和平臺資源(如VM數量或Kubernetes工作節(jié)點)。
警報管理器:警報管理器工具應能夠從不同系統(tǒng)收集和去重警報。Alertmanager是Prometheus開源團隊開發(fā)的一個工具,可以接收來自各種監(jiān)控工具(如Prometheus、Zabbix和Elasticsearch)的警報。它能夠根據預定義的規(guī)則和配置對這些警報進行分組、去重和過濾。此外,它還支持各種通知機制,可以將警報發(fā)送給支持團隊,包括電子郵件、PagerDuty、Slack和其他自定義集成。
結論
總體而言,如下所示:
這些系統(tǒng)共同工作,以確保生產環(huán)境的可靠性和彈性。CI + CD + CM的組合促進了不同團隊之間更好的協(xié)作。如果您正在遵循敏捷方法,開發(fā)團隊可以處理CI部分,運維團隊可以處理CD部分,監(jiān)控團隊可以處理CM部分。這些團隊合作,以確保服務的可靠性。