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