天天看點

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

12月9日,在雲栖計算之旅線下沙龍上,阿裡雲容器服務團隊的進階研發工程師秦妤嘉分享了《基于容器技術的devops探索》。首先介紹了devops和cd,接着分析了docker如何打破傳統cd壁壘,最後講解了怎樣從零開始搭建一個持續傳遞系統。

<a href="https://yq.aliyun.com/edu/lesson/play/493?spm=5176.100239.blogcont66187.23.m3mlo2">視訊回顧</a>

devops與continuous delivery

<b>devops</b>

在一個較成熟的軟體和服務傳遞的團隊裡,就技術層面來說主要分為三個組成部分:開發、測試和運維。開發測試團隊比較關注的是代碼能否運作,而運維比較關注的是系統能否在上線後穩定運作,于是隔閡就産生了。devops的出現就是為了解決這一問題。devops的作用就是将這三個部分緊密的連接配接起來,提供一條從軟體開發到品質保障到技術營運的自動化流水線,加強不同角色之間的溝通和協作,進而減少資源浪費、提高品質,并将産品快速推向市場,快速有效的把一個想法變成價值傳遞到客戶手中。

<b>cd</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

怎樣實作devops?我們定義了cd(持續內建),cd是一個方法。cd有三個重要的點:自動化、持續和有效的回報。圖中從左到右是代碼到傳遞的過程。

cd過程中可能遇到幾個問題,概括有三方面:環境一緻性問題,開發人員之間環境也會産生不一緻;版本管理問題;快速響應(釋出、復原)問題。

那麼,問題的根源是什麼呢?是因為developer傳遞的隻有代碼,以及代碼的依賴,而keep site running需要除了代碼之外的運作環境,以及運作環境之間的依賴。

docker如何打破傳統cd壁壘?

docker是實作devops最合适的工具之一,甚至變革了軟體傳遞方式,可以有效解決持續傳遞過程中遇到的問題。

<b>阿裡雲容器服務</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

阿裡雲容器服務在資源層面有叢集、節點,在内容層面有compose模闆、鏡像,在應用層面有應用、服務和容器。

<b>完整的容器化持續傳遞流程</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

傳統的開發過程開發者的代碼裡有邏輯、應用以及代碼依賴包,而我們的代碼中會更多的加入docker file、docker compose,用來制作集裝箱和搬運集裝箱,代碼送出成功後代碼伺服器會通知ci

server,ci server會拉取代碼進行代碼打包,打包後進行單元測試,如果單元測試沒有通過,有效的回報就會馬上告訴開發者。如果通過,認為應用包括有應用,我們會根據代碼給予的docker file制作鏡像,server會有配置的使用權限,會把鏡像推送到阿裡雲容器,代碼可傳遞的東西已經産生。

部署階段,如果進行內建測試或回歸測試,走測試環境,部署時compose模闆就是用來描述如何部署的,通過jenkins來豐富功能,通過各種插件将鏡像拉取下來部署在應用環境上,進而實作代碼送出變更到整個部署過程。

<b>jenkins2.0</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

jenkins 2.0版本中包含了一個新的管道(pipline)建構傳遞系統,管道的設計理念是基于groovy dsl,實作一套靈活、可擴充的持續釋出(cd)工作流,将原本獨立運作于單個或多個節點的任務連接配接起來,實作複雜釋出流程。并且,jenkins支援從代碼庫直接讀取腳本。

從零開始搭建一個持續傳遞系統

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

stage是對整個持續傳遞流程的清晰定義,是由自己寫出來,單元測試結果也可以完美的展示,每一個階段的耗時等可以直接讀取日志檢視,也可以在本地存儲軟體打包的結果。

<b>持續傳遞流程設計</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

通過插件實作動态生成slave,執行job最後銷毀的過程,我們也支援共享存儲oss,上傳war包,用鏡像的方式存儲要傳遞的東西,部署是由阿裡雲自主開發的插件,調用容器服務的api。

<b>jenkins master and agent</b>

Docker在雲平台上的最佳實踐:基于容器技術的DevOps探索

docker in docker方式是指,agent會用到docker進行鏡像打包,如果有十個項目在jenkins上執行時,就會涉及到在所有項目中安裝agent非常消耗資源,是以我們采用父子結構,通過透傳的方式,可以使用主控端上docker的agent伺服器執行鏡像建構和打包,做到自動化流程内的隔離。

<b>釋出政策</b>

容器服務現在支援兩種釋出方式:

一是rolling update,依次停止老容器,啟動新容器,整個過程自動化,無需使用者手動操作,适合測試場景,适合于多副本的應用釋出;一是藍綠釋出(熱部署):不會停止老容器,為新服務啟動新容器,需要使用者設定路由權重,實作不同版本應用的上線、下線,适合于版本的快速釋出,不會停機影響使用者。

未來還會支援金絲雀釋出(灰階):不會停止老容器,為新服務啟動新容器,需要使用者設定路由權重,實作不同版本應用的共存,支援a/b測試,适合多方案選擇。

雲栖技術之旅,是由阿裡雲雲栖社群主辦,整合了阿裡集團内部多個領域頂級技術專家與技術資源,通過線下技術教育訓練的方式,為熱愛技術的朋友提供一個交流&amp;分享技術觀點、碰撞精彩火花的平台。

阿裡雲容器服務(container service)提供了高性能可伸縮的容器應用管理服務,支援在一組雲伺服器上通過docker容器來進行應用生命周期管理。容器服務極大簡化了使用者對容器管理叢集的搭建工作,無縫整合了阿裡雲虛拟化、存儲、網絡和安全能力,打造docker雲端最優化的運作環境。容器服務提供了多種應用釋出方式和流水線般的持續傳遞能力,原生支援微服務架構,助力使用者無縫上雲和跨雲管理。