中國五礦和阿里巴巴聯(lián)手打造的鋼鐵服務專業(yè)平臺五阿哥,通過集結(jié)阿里巴巴在大數(shù)據(jù)、電商平臺和互聯(lián)網(wǎng)產(chǎn)品技術上的優(yōu)勢,為終端用戶帶來一站式采購體驗。本文是五阿哥運維技術團隊針對Docker容器技術在如何在持續(xù)交付過程中探索和實踐,目前已經(jīng)將發(fā)布部署權(quán)限開放給應用開發(fā)的owner,實現(xiàn)7*24小時“一站式”的持續(xù)交付,整體提高了公司研發(fā)過程的交付能力。
前言
作為創(chuàng)業(yè)公司和推行DevOps工程師們來說,都遇到過這樣的問題:
硬件資源利用率的問題,造成部分成本的浪費
在網(wǎng)站功能中不同的業(yè)務場景有計算型的、有IO讀寫型的、有網(wǎng)絡型、有內(nèi)存型的,集中部署應用就會導致資源利用率不合理的問題。比如,一個機器上部署的服務都是內(nèi)存密集型,那么CPU資源就都很容易浪費了。
單物理機多應用無法對無法進行有效的隔離,導致應用對資源的搶占和相互影響
一個物理機器跑多個應用,無法進行所使用的CPU、內(nèi)存、進程進行限制,如果一個應用出現(xiàn)對資源的搶占問題,就會引起連鎖反應,最終導致網(wǎng)站部分功能不可用。
環(huán)境、版本管理復雜,上線部署流程缺乏,增加問題排查的復雜度
由于內(nèi)部開發(fā)流程的不規(guī)范,代碼在測試或者上線過程中,對一些配置項和系統(tǒng)參數(shù)進行隨意的調(diào)整,在發(fā)布時進行增量發(fā)布,一旦出現(xiàn)問題,就會導致測試的代碼和線上運行的代碼是不一致的,增加了服務上線的風險,也增加了線上服務故障排查的難度。
環(huán)境不穩(wěn)定,遷移成本高,增加上線風險
在開發(fā)過程中存在多個項目并行開發(fā)和服務的依賴問題,由于環(huán)境和版本的復雜性很高,不能快速搭建和遷移一個環(huán)境,導致無法在測試環(huán)境中無法模擬出線上的流程進行測試,很多同學在線上環(huán)境進行測試,這里有很高的潛在風險,同時導致開發(fā)效率降低。
傳統(tǒng)虛擬機和物理機占用空間大,啟動慢,管理復雜等問題
傳統(tǒng)虛擬機和物理機在啟動過程進行加載內(nèi)核,執(zhí)行內(nèi)核和init進行,導致在啟動過程占用很長時間,而且在管理過程中會遇到各種各樣的管理問題。
基于Docker容器技術,運維技術團隊開發(fā)了五阿哥網(wǎng)站的容器云平臺。通過容器云平臺95%的應用服務已經(jīng)實現(xiàn)容器化部署。這些應用支持業(yè)務按需拓展,秒級伸縮,提供與用戶友好的交互過程,規(guī)范了測試和生產(chǎn)的發(fā)布流程,讓開發(fā)和測試同學從基礎的環(huán)境配置和發(fā)布解放出來,使其更聚焦自己的項目開發(fā)和測試。
圖1 五阿哥容器云整體架構(gòu)
結(jié)合五阿哥容器云平臺和Docker容器技術的實踐,本文先介紹如何實現(xiàn)7*24小時“一站式”的持續(xù)交付,實現(xiàn)產(chǎn)品的上線。關于容器云平臺的介紹,請關注:https://zhuanlan.zhihu.com/idevops
Docker鏡像標準化
眾所周知,Docker的鏡像是分層的。對鏡像分層進行約定:
第一層是操作系統(tǒng)層,由CentOS/Alpine等基礎鏡像構(gòu)成,安裝一些通用的基礎組件; 第二層是中間件層,根據(jù)不同的應用程序,安裝它們運行時需要使用到的各種中間件和依賴軟件包,如,nginx、tomcat等; 第三層是應用層,新加坡云主機 香港云主機,這層僅包含已經(jīng)打好包的各應用程序代碼。
圖2:Docker鏡像分層約定
經(jīng)驗總結(jié):如何讓自己的鏡像變的更小,PUSH的更快?
圖3 優(yōu)化前后對比
dockerfile構(gòu)建應用鏡像,在中間件層遇到一些需要安裝的軟件包時,盡可能的使用包管理工具(如yum)或以git clone方式下載源碼包進行安裝,目的是將軟件包的copy和安裝控制在同一層,軟件部署成功后清除一些無用的rpm包或源碼包,讓基礎鏡像的尺寸更小。 Java應用鏡像中并沒有將jdk軟件包打入鏡像,將jdk部署在每臺宿主上,在運行鏡像時,通過掛載目錄的方式將宿主機上的java家目錄掛載至容器指定目錄下。因為它會把基礎鏡像撐得非常大; 在構(gòu)建應用鏡像時,docker會對這兩層進行緩存并直接使用,僅會重新創(chuàng)建代碼出現(xiàn)變動的應用層,這樣就提高了應用鏡像的構(gòu)建速度和構(gòu)建成功后向鏡像倉庫推送的速度,從整體流程上提升了應用的部署效率。
容器的編排管理編排工具的選型:
圖4:編排工具選型對比