中小團隊基於Docker的devops實踐
作者:SRE724 來源:微信公眾號(運維咖啡吧)
原文連結:https://mp.weixin.qq.com/s/GATfwNETo_aGsJHZdV5Yz Q
筆者所在的技術團隊負責了數十個專案的開發和維護工作,每個專案都至少有dev、qa、hidden、product四個環境,數百臺機器,在各個系統之間疲於奔命,解決各種瑣碎的問題,如何從這些瑣碎的事情中解放出來?devops成了我們不二的選擇。
文章是基於目前的環境和團隊規模做的devops實踐總結,方案簡單易懂,容易落地且效果顯著。
實現方法
先來看下流程圖:
工程師本地開發,開發完成後提交程式碼到程式碼倉庫,[自動]觸發jenkins進行持續整合與部署,部署完成會收到結果郵件。專案執行過程中可透過日誌系統檢視程式日誌,有異常會觸發監控系統傳送報警。從編碼到上線後結果反饋都可以工程師自主完成,形成完整閉環,運維則負責提供完整流程的工具鏈及協助異常情況的處理,工作量減少了,效率卻高了。
自動觸發jenkins部署透過svn和git的hooks來實現,是否自動觸發根據專案內部溝通決定,我們目前沒有自動觸發,原因是QA在測試的過程中不希望被自動觸發的部署打斷,不過也可以方便的在jenkins上手動觸發執行
jenkins從svn拉程式碼 --> 編譯 --> JS/CSS合併壓縮 --> 其他初始化操作 --> 生成最終線上執行的程式碼包,透過Dockerfile打包成映象上傳到docker hub,然後觸發kubernetes滾動更新
映象包含了基礎映象+專案程式碼,基礎映象就是根據專案運營環境打包的一個最小化的執行環境(不包含專案程式碼),根據專案依賴的技術棧不同我們打包了很多不通型別的基礎映象,例如包含nginx服務的基礎映象,包含jdk+tomcat的基礎映象
如果發現程式上線出錯或有bug短時間內無法解決,可透過jenkins快速回滾到上一映象版本,十分方便
如果發現流量突然增高,可以透過kubernetes快速調整容器副本數量
軟體和工具
程式碼管理: svn,git
持續整合: jenkins,shell,python
Docker化: docker,harbor,kubernetes
監控報警: zabbix,prometheus
日誌系統: filebeat,kafka,logstash,elasticsearch,kibana
程式碼管理
大部分專案還是透過svn來管理的,這裡以svn為例說明,每個專案有3條程式碼線,dev、trunk、releases
dev: 本地開發,開發好一個功能或task就可以提交到dev分支,同時可部署到dev環境進行自測
trunk: 當一個大的功能開發完成計劃上線前合併程式碼到trunk分支,QA部署到trunk環境進行詳細測試
releases: QA測試透過,專案即將上線,則將程式碼合併到releases分支,部署hidden環境(模擬環境,所有配置、程式碼等與線上保持一致)再次迴歸,迴歸透過,則上線product正式環境
有些專案是基於版本釋出的,那麼在程式碼合併到releases之後會透過branch/tag打個tag部署到hidden測試
持續整合
這一步主要工作是按照需求把原始碼打包為最終線上跑的專案工程,大部分工作都有shell、python編寫的指令碼來完成,例如去svn拉程式碼、編譯原始碼、對靜態資原始檔合併壓縮等等操作。利用jenkins將我們這麼多分散的步驟串成一個完整的流程,運維對這一部分應該很熟悉了,不過多介紹
Docker化
Docker是我們整個方案中很重要的一塊,可以方便的進行部署,所有環境使用同一Docker映象也保證了環境的統一,大大減少了開發環境執行正常,線上執行報錯的情況出現,同時可根據專案負載情況實時調整資源佔用,節約成本。
Dockerfile: 透過編寫dockerfile來打包映象
harbor: 充當docker hub映象倉庫的作用,有web介面和api介面,方便整合
kubernetes: kubernetes(k8s)將一個一個的Docker例項給整合成了叢集,方便映象下發、升級、回滾、增加或刪除副本數量,同時也提供了ingress外網訪問方式,這一塊比較重,不過我們也沒有用到太高階的功能,只是上邊提到的一些基礎功能,無需對k8s進行二次開發或定製,只是部署好了使用,對運維來說技術難度不大。
監控報警
監控報警在整個運維過程中非常重要,能未雨綢繆,減少故障的發生,加快故障的解決。這一塊也是運維的基礎不過多介紹了
zabbix: 宿主機統一透過zabbix進行監控報警
prometheus: Docker容器的執行情況透過prometheus進行監控報警(目前還未完成)
日誌系統
elk日誌系統真是運維的福音,用了都說好,從此再也不用聽開發給你說“xx,幫我拉下線上的日誌”。我們使用的架構為filebeat/rsyslog --> kafka --> logstash --> elasticsearch --> kibana
f ilebeat/rsyslog: client端透過filebeat或者rsyslog來收集日誌,filebeat是一個go開發的程式,部署起來非常方便,跟Docker簡直絕配,我們Docker基礎映象裡都預設起了一個filebeat服務初始化了配置檔案,後邊整合專案程式碼的時候不需要額外配置;使用rsyslog的好處是大部分系統自帶了rsyslog服務,不需要額外安裝一個程式來收集日誌,但是rsyslog要傳資料到kafka需要用到omkafka模組,omkafka對rsyslog版本有要求,大部分系統需要升級rsyslog版本很麻煩,就放棄了
kafka: kafka就是為處理日誌類資料而生,我們採用3臺機器做kafka叢集,同時1個topic對應多個group,避免單點
logstash: 作為為從kafka取資料,過濾之後寫入elasticsearch。還在想為啥介紹kafka的時候說明1個topic對應多個group?主要是為了一個group對應一個logstash index,解決掉logstash這裡的單點
elasticsearch: 儲存過濾之後的資料,同樣採用了3個節點的叢集,避免單點
kibana: 視覺化工具,方便的來搜尋想要的資料,同事也做各種報表,一目瞭然
總結
-
支援: 要獲得各方的支援,專案已經成功了一半,沒有啥事一頓燒烤解決不了的,如果有就兩頓
-
規範: 眾多的專案,龐大的系統,必須要有規範,規範是自動化的基礎
-
文件: 實施的詳細過程、如何使用、怎麼維護要保留有詳細文件
-
培訓: 對於jenkins、elk非運維使用的工具要對使用者有相應的培訓分享,當然運維內部也要分享專案的種種細節
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31473948/viewspace-2169001/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基於Github Actions + Docker + Git 的DevOps方案實踐教程GithubDockerdev
- 基於DevOps的容器安全實踐dev
- 活動乾貨|基於Docker的DevOps實現Dockerdev
- DevOps 團隊之殤dev
- Facebook團隊關於網頁快取的再實踐網頁快取
- CSS團隊精神:CSS最佳實踐團隊開發CSS
- DevOps 團隊的漏洞管理指南dev
- CI Weekly #3 | 關於微服務、Docker 實踐與 DevOps 指南微服務Dockerdev
- 聊聊SwiftLint在團隊的實踐Swift
- 測試團隊的組建實踐
- 盤點:電商中小團隊最好用的5款團隊協作工具
- 中小團隊落地配置中心詳解
- CSS最佳實踐團隊開發CSS
- eBPF Cilium實戰(1) - 基於團隊的網路隔離eBPF
- 微信後團隊分享:微信後臺基於Ray的分散式AI計算技術實踐分散式AI
- 基於OpenStack+Docker設計與實現CI/CD——基於Docker技術的CI&CD實踐Docker
- 藏書館App基於Rainbond實現雲原生DevOps的實踐APPAIdev
- 中小團隊的技術負責人如何做好技術團隊建設
- 58 趕集基於 Docker 的自動化部署實踐Docker
- 基於團隊模式開發中介模組模式
- DevOPS實戰:從0到1搭建基於Docker的Gitlab CI/CDdevDockerGitlab
- SharePointFramework基於團隊的開發(四)Framework
- DevOps基礎的認識與工具實踐dev
- 銀行基於雲原生架構的 DevOps 建設實踐經驗架構dev
- Code Review 在丁香醫生前端團隊的實踐View前端
- 最佳實踐採購團隊的8個要點
- CSM敏捷實踐|如何讓團隊的迭代效率更高?敏捷
- 基於Docker搭建Jumpserver堡壘機操作實踐DockerServer
- SharePoint Framework 基於團隊的開發(三)Framework
- SharePoint Framework 基於團隊的開發(二)Framework
- SharePoint Framework 基於團隊的開發(一)Framework
- SharePoint Framework 基於團隊的開發(五)Framework
- 初探團隊基於session的探索性測試Session
- SharePoint Framework 基於團隊的開發(四)Framework
- DevOps 團隊如何防禦 API 攻擊devAPI
- 不同技術團隊的配合問題及DevOpsdev
- DevOps實踐dev
- 鬥魚大佬分享!基於圖的團伙挖掘演算法實踐演算法