容器的編排管理編排工具的選型:
圖4:編排工具選型對(duì)比
Rancher圖形化管理界面,部署簡(jiǎn)單、方便, 可以與AD、LDAP、GITHUB集成,基于用戶或用戶組進(jìn)行訪問控制,快速將系統(tǒng)的編排工具升級(jí)至Kubernetes或者Swarm,同時(shí)有專業(yè)的技術(shù)團(tuán)隊(duì)進(jìn)行支持,降低容器技術(shù)入門的難度。
圖5: Rancher架構(gòu)圖
基于以上優(yōu)點(diǎn)我們選擇Rancher作為我們?nèi)萜髟破脚_(tái)的編排工具,在對(duì)應(yīng)用的容器實(shí)例進(jìn)行統(tǒng)一的編排調(diào)度時(shí),配合Docker-Compose組件,可以在同一時(shí)間對(duì)多臺(tái)宿主機(jī)執(zhí)行調(diào)度操作。同時(shí),在服務(wù)訪問出現(xiàn)峰值和低谷時(shí),利用特有的rancher-compose.yml文件調(diào)用“SCALE”特性,對(duì)應(yīng)用集群執(zhí)行動(dòng)態(tài)擴(kuò)容和縮容,讓應(yīng)用按需求處理不同的請(qǐng)求。https:/zhuanlan.zhihu.com/p/29093407
容器網(wǎng)絡(luò)模型選型:
圖6: 容器網(wǎng)絡(luò)模型選型
由于后端開發(fā)基于阿里的HSF框架,生產(chǎn)者和消費(fèi)者之間需要網(wǎng)絡(luò)可達(dá),對(duì)網(wǎng)絡(luò)要求比較高,需要以真實(shí)IP地址進(jìn)行注冊(cè)和拉取服務(wù)。所以在選擇容器網(wǎng)絡(luò)時(shí),我們使用了Host模式,在容器啟動(dòng)過程中會(huì)執(zhí)行腳本檢查宿主機(jī)并分配給容器一個(gè)獨(dú)立的端口,來避免沖突的問題。
持續(xù)集成與持續(xù)部署
持續(xù)集成, 監(jiān)測(cè)代碼提交狀態(tài),對(duì)代碼進(jìn)行持續(xù)集成,在集成過程中執(zhí)行單元測(cè)試,代碼Sonar和安全工具進(jìn)行靜態(tài)掃描,將結(jié)果通知給開發(fā)同學(xué)同時(shí)部署集成環(huán)境,部署成功后觸發(fā)自動(dòng)化測(cè)試(自動(dòng)化測(cè)試部分后續(xù)會(huì)更新https://zhuanlan.zhihu.com/idevops)。
圖7:持續(xù)集成示意圖
靜態(tài)掃描結(jié)果:
圖8: 持續(xù)集成結(jié)果示意圖
持續(xù)部署,是一種能力,這種能力非常重要,把一個(gè)包快速部署在你想要的地方。平臺(tái)采用分布式構(gòu)建、部署,master管理多個(gè)slave節(jié)點(diǎn),每個(gè)slave節(jié)點(diǎn)分屬不同的環(huán)境。在master上安裝并更新插件、創(chuàng)建job、管理各開發(fā)團(tuán)隊(duì)權(quán)限。slave用于執(zhí)行job。
圖9: 持續(xù)部署架構(gòu)圖
基于上述圖9架構(gòu),我們定義了持續(xù)部署規(guī)范的流程:
(1)開發(fā)同學(xué)向gitlab提交代碼;
(2)拉取項(xiàng)目代碼和配置項(xiàng)文件,執(zhí)行編譯任務(wù);
(3)拉取基礎(chǔ)鏡像,將編譯好的應(yīng)用包打入生成最新的應(yīng)用鏡像,推送到鏡像倉(cāng)庫(kù);
(4)根據(jù)當(dāng)前應(yīng)用及所屬環(huán)境定制化生成docker-compose.yml文件,基于這個(gè)文件執(zhí)行rancher-compose命令,將應(yīng)用鏡像部署到預(yù)發(fā)環(huán)境(發(fā)布生產(chǎn)前的測(cè)試環(huán)境,相關(guān)配置、服務(wù)依賴關(guān)系和生產(chǎn)環(huán)境一致)。
(6)預(yù)發(fā)環(huán)境測(cè)試通過后將應(yīng)用鏡像部署至線上環(huán)境,測(cè)試結(jié)果通知后端測(cè)試同學(xué)。
容器的運(yùn)行管理
應(yīng)用容器現(xiàn)在已經(jīng)部署到線上環(huán)境,那么在整個(gè)容器的生命周期中,還需要解決下面兩個(gè)問題:
(1) 如何保存應(yīng)用程序產(chǎn)生的運(yùn)行日志和其它業(yè)務(wù)日志;
(2) 如何在后端服務(wù)出現(xiàn)變化后nginx能夠自動(dòng)發(fā)現(xiàn)并完成配置更新。
日志管理
容器在運(yùn)行時(shí)會(huì)在只讀層之上創(chuàng)建讀寫層,所有對(duì)應(yīng)用程序的寫操作都在這層進(jìn)行。當(dāng)容器重啟后,讀寫層中的數(shù)據(jù)(包含日志)也會(huì)一并被清除。雖然可以通過將容器中日志目錄掛載到宿主機(jī)解決此類問題,但當(dāng)容器在多個(gè)宿主機(jī)間頻繁漂移時(shí),每個(gè)宿主機(jī)上都會(huì)有留存應(yīng)用名的部分日志,增加了開發(fā)同學(xué)查看、排查問題的難度。