如何利用Docker構建基於DevOps的全自動CI

來自用戶的DevOps實踐分享,分享從開發代碼到生產環境部署的一條龍操做的實踐及經驗, 包含工具技術的選型及考量、私有代碼庫與私有鏡像庫的應用等。java

(一)容器服務的Rancher選型

一、爲何說是下一代核心技術

從互聯網的屢次變革提及,早期的C/S架構,到後來的B/S架構,一直到如今最廣泛的M/S架構,他們的背後都是技術不斷的優化改進,以適應、促進IT技術的發展整。體而言在過去10年間,互聯網技術能夠說是以手工製造的方式爲主,相似於傳統銷售、設計、製做、而後打包銷售。每一個環節都須要大量的人員來操做,也須要不斷有人接班學習來延續對應的環節。而將來10年將會是以流水線的方式爲主 ,其主要緣由是互聯網雲計算技術的高速發展及可持續快速交付的業務需求。其對應的DevOps方式將完美契合。開發運維一體化確切的說是一種方式,而這種方式須要全新的技術來支撐才行執行下去,咱們將之稱爲下一代核心技術。mysql

二、傳統技術與下一代核心技術區別

傳統的技術主要問題是高耦合,其耦合存在於服務器、硬件存儲、內外網之間(網絡通信),存在於應用程序之間、代碼之間、業務模塊之間。雖然通過近幾年的發展,在不斷的去耦合化大趨勢下,已經儘量的將這幾大塊之間進行低耦合處理,可是因爲傳統技術的限制,沒法從根本上解決這些問題。好比最經常使用的程序鏈接數據庫。傳統的方式多將數據庫鏈接字符串寫到程序的配置文件裏,致使其鏈接數據庫IP不能變,多節點部署程序須要一一手動修改數據庫鏈接字符串,很是麻煩。隨着技術的發展優化,有經驗的研發人員會將數據庫鏈接放到JNDI裏面(如Tomcat),由中間件管理,這樣將程序和數據庫之間進行解耦。這也是傳統技術架構經常使用的作法。可是對於多節點的部署變動,須要改變多個節點Tomcat的JNDI配置,仍是存在易用性、可維護性、可靠性方面的問題。固然也有高級別的中間件來集中解決這些問題,如WebSphere的集羣管理。但這都屬於爲了解決問題而解決問題,受限於傳統技術,沒法從根因上解決各個組件、軟硬件之間的耦合問題。並且須要商業付費,很是的貴。linux

下一代核心技術,受益於雲計算、微服務、容器服務的高速發展,採起DevOps的模式進行整合,實現硬件服務器、存儲、網絡、軟件程序、代碼之間的全低耦合甚至0耦合,這將大大提升交付能力,下降運維成本,實現互聯網產品的快速迭代。nginx

三、容器服務的Rancher選型

我以前的文章已經對微服務作了基本分析,本章節及後續章節會陸續對雲計算的分析應用和容器服務的分析應用作逐一的講解。微服務主要是對軟件代碼層面進行解耦,雲計算主要從硬件支撐層進行解耦,而容器服務主要從應用層面進行解耦。容器服務的飛速發展,主要是Docker的巨大功勞,將傳統的虛擬化技術帶到一個全新的層面。Docker的優點在此不作多講,主要是其原生的管理基於命令行,對於簡單應用較爲方便。可是在DevOps模式下就須要有一整套的規範接口來統一管理整個流水線。對於Docker容器的管理系統目前比較流行的有幾個: K8S、Rancher、Shipyard等,其餘還有一些不是頗有名的在此很少作列舉了,你們能夠自行研究學習。git

圖片描述

通過對比試用選型,在容器管理考慮到易用性包括跨主機通信的管理、DevOps的支持力度等方面,Rancher以各方面優先勝出。Rancher目前在開源社區很是火爆,支持衆多的編排引擎,當前最新版本爲 1.6.12 ,你們能夠下載試用。github

(二)Rancher的應用及優勢簡介

一、環境選擇

安裝Rancher環境,必定要在乾淨的linux主機上進行,避免出現因配置致使的莫名其妙的問題。服務器操做系統建議CentOS7.4(內核3.10以上),低於這個版本的系統 如7.3 7.2會報一個小bug,不過倒不影響使用,再低內核的版本就不要用了,不少都不支持。web

圖片描述

生產環境建議採用阿里雲 Rancher(1C 2G以上的配置,若要保證運行穩定,建議配置至少2C 4G),宿主機(1C 2G以上的配置)、彈性公網EIP+ 專有網絡測試,私有環境建議採用Rancher(1C 2G以上的配置),宿主機(1C 2G以上的配置)、 虛擬機(Hyper-V、VMware)+ 同一內網可通信Rancher 1.6.12 ,調度引擎選擇Cattle。Rancher2.0調度引擎默認使用K8s,當前仍是測試版,官方不建議在生產環境使用。sql

二、環境配置

圖片描述

三、安裝Docker

root執行docker

curl https://releases.rancher.com/install-docker/17.06.sh | sh

配置加速器數據庫

圖片描述

重啓Docker服務

sudo systemctl daemon-reload
        sudo systemctl restart docker

四、安裝Rancher管理端

登錄服務器Mgr01

圖片描述

運行完後,就能夠經過IP:8888來訪問Rancher的管理臺了,接下來咱們就能夠點擊 「添加主機」 來添加各個宿主機了

圖片描述

五、加入宿主機

圖片描述

依次登錄各個宿主機,執行5裏面的腳本便可。

若是須要把mgr01加爲宿主機,那麼須要在4裏面填寫mgr01和ws之間互通的內網IP地址,建議不要添加mgr爲宿主機,方便後續作mgr集羣高可用。

六、添加好的界面

圖片描述

Rancher有不少好玩的、強大的功能,後續咱們會逐一去發現講解。對於DevOps來說,原來能夠這麼簡單。

(三)私有代碼庫阿里雲Git使用

一、引言

使用DevOps確定離不開和代碼的集成。因此要想跑通整套流程,代碼庫的選型也是很是重要的。不然沒法實現持續集成。目前比較經常使用的代碼管理有SVN和Git,若是還使用SVN的,建議儘早遷移到Git上面,否則很費勁的。尤爲是webhook,不少svn軟件都不支持。

二、Git選型

能夠採用公網的GitHub,這是用的最多的,可是免費帳號仍是缺乏不少功能,收費版功能更全的,但須要考慮公司的預算。

免費版須要自行架設,Gitlab CE和Bitbucket均可以。固然這又少不了一部分維護人員、設備,從而致使增長成本。

那麼既然不肯意花錢,又想要好用的,咱們就只能選型國內一些公司的Git服務了。本着代碼可靠性,服務器穩定性,功能擴展性綜合對比,咱們選擇使用阿里雲的Git庫。

優勢:速度快速度快,不限空間,不限項目數。能夠和阿里的相關產品無縫集成。

三、註冊使用

打開 連接 自行註冊便可。使用方法就不說了,和GitHub如出一轍。性能,穩定性,都比較好。最重要的是在國內,速度很是快

圖片描述

四、代碼管理

經過開發IDE工具,把應用代碼放到Git庫裏面。好比我這裏有個config的項目

圖片描述

五、代碼庫管理

這時候看到Git服務端已經能夠作代碼管理了

圖片描述

(四)私有鏡像庫阿里雲Docker服務使用

一、使用阿里雲鏡像庫有不少優勢

  • 穩定可靠,阿里技術,放心使用。
  • 國內cdn多節點加速,下載速度很是快
  • 能夠和阿里雲Git代碼集成,不須要第三方CI工具
  • 國內專屬加速器,一我的的專屬通道,國外須要FQ下載的鏡像,在這裏通通能夠搞定
  • 阿里雲端構建,不須要佔用本地資源,全球網絡直達
  • 免費,不限空間

二、註冊使用

打開 連接 便可,有阿里雲帳號能夠直接登錄使用

圖片描述

三、配置加速器

登錄本身的Rancher服務器mgr和ws節點,依次執行下列配置,把本身的docker加速器配置上。

圖片描述

四、這時候你就有了本身的私有鏡像庫

可使用docker標準的pull、push等進行鏡像推拉操做。

(五)微服務CI與Rancher持續集成

一、引言

DevOps的核心魅力是快速的持續集成交付,下降研發和實施運維之間的交互,使得傳統的各類扯皮現象通通消失。最重要的是下降成本保障產品交付可靠性。

使用Rancher做爲持續集成的關鍵環節,統一結連微服務和雲計算,使得產品從研發到上線流水線操做,提升生產效率,此處我寫的是微服務而不是傳統的程序,是由於微服務(架構的產品)和容器服務、雲計算是完美結合的三大核心模塊,也是互聯網下一代核心技術DevOps的3個核心支柱。而傳統程序,因爲在微服務架構方面轉型較慢或者生態鏈較弱,沒法完美進行DevOps。

二、集成說明

本例集成代碼採用java微服務項目,可拋棄第三方集成組件如Jenkins,簡單高效。

實現提交代碼,即生產發佈的全自動流程 (Code->Git repository->Docker repository->Rancher->Server)

三、配置自動CI

登錄阿里雲鏡像庫

選擇鏡像區域,如華南1.點擊「建立鏡像倉庫」

圖片描述

建立:命名空間,
倉庫名稱:你的項目名稱
源代碼選擇:阿里雲Code或者其餘的Git源
勾選:代碼變動時自動構建鏡像
路徑:/或者你代碼裏Dockerfile文件的全路徑
標籤:latest或者自定義版本號
而後點擊:建立鏡像倉庫

只要提交代碼上來,服務器就會自動根據構建image鏡像

圖片描述

四、配置鏡像自動構建

點擊剛建立的:server-config庫,管理,記錄下鏡像庫的地址,由於須要在接下來的Rancher中進行配置。

圖片描述

進入Rancher管理後臺-基礎架構-鏡像庫 -添加

添加成功後,Rancher就能夠下載部署你的私有鏡像

圖片描述

接下來進入Rancher管理後臺 -API-WebHooks 添加一條接收器

名稱:隨意好記
類型:升級服務
參數格式:阿里雲
標籤:latest
選擇器標籤:update=server-config
而後點擊:建立
複製保存:觸發地址

圖片描述

再次進入阿里雲Docker管理服務後臺,能夠看到構建裏面的鏡像已經構建完畢。

圖片描述

咱們點擊webhook,新增一條記錄

名稱:隨意
URL:剛纔Rancher裏面配置的觸發地址
標籤:latest

圖片描述

登錄Rancher管理後臺,開始部署咱們的應用

新建服務

鏡像:剛創建的鏡像名稱
標籤:update=server-config
完成後,Rancher自動拉取鏡像庫的鏡像並部署

圖片描述

五、自動集成,升級

提交代碼。查看鏡像自動構建過程。完成後,查看Rancher的服務server-config自動升級。

至此,基於DevOps的全自動CI/DI發佈已經實現。且不用配置Jenkins等複雜的集成組件。最重要的是:不須要本身的服務器,所有FREE。

  1. 這種集成適合於團隊內部進行了相關測試,最終交付的代碼已是穩定可靠版、直接上生產的狀況。其實這也是大多數中小型公司使用的方式,屬於半自動化,方便,靈活可控,可隨時中斷某個環節。
  2. 另一種方式,是所有使用全自動化集成測試,同時包括自動化團隊溝通、同時多鏡像庫發佈、自定義動做等。這個對公司IT能力水平要求較高,使用Pipeline Jenkins流水線發佈。這個我會在隨後的博文裏面給你們講。

(六)Rancher集中存儲及相關應用

一、前言

爲何要使用集中存儲?使用集中存儲有個很大的優點是數據安全和統一管理,和集羣完美配合。產品集成存儲經歷

過幾個階段:

  • 單機本機存儲。系統使用本地硬盤存儲
  • 單網絡集中存儲。局域網主機使用同一網絡內的磁盤陣列存儲單元
  • 分佈式集羣本地存儲。集羣節點使用本身本地硬盤存儲。
  • 分佈式集羣集中存儲。集羣節點使用集中存儲(其背後能夠是單一存儲也能夠是分佈式存儲,集中存儲至關於一個代理入口)

其中雲計算用的最多的是 三、4,主要適應於網絡架構的分佈式設計和基本雲計算存儲,如多機房、多地存儲。使用集中存儲給運維帶來的最大優點就是核心數據保存,不怕應用崩潰,各類docker容器均可以隨時拋棄、重建而不用擔憂數據問題。

二、Rancher中使用集中存儲NFS

Rancher對Docker集羣的管理已是很是方便,默認是沒有加載共享存儲的,咱們這裏使用Rancher NFS插件來實現一個統一的存儲,固然也能夠選擇其餘的插件,目前官方只有這一個,其餘非官方的如CephFS、FastDfs等請自行添加插件或自寫插件來實現,在此不作過多解讀。

點擊Rancher應用商店,搜索nfs,找到官方插件並添加

圖片描述

填寫主機地址:IP
目錄:建議不要填 / 而是指向NFS服務器存儲的一個目錄
ON_Remove: Purge: 刪除映射目錄時會刪除NFS遠程對應的數據 Retain:不刪除遠程數據

點「啓動」便可 ,Rancher會在各個宿主機上面添加NFS驅動

圖片描述

查看NFS驅動,每一個宿主機都已啓動完畢

圖片描述

使用NFS:
咱們在添加服務的時候,能夠配置下卷name:/容器對應目錄
填logs:/opt/logs會對應遠程NFS裏面新建的logs目錄
若是填/logs:/opt/logs則是經常使用的卷映射,會寫入宿主機本地的/logs目錄
驅動填寫默認的rancher-nfs
這樣,容器裏面讀寫的文件就直接操做遠程Nfs服務器了

圖片描述

查看效果:

啓動應用後,容器的日誌已經輸出到NFS裏面了。

圖片描述

用途及注意事項:
主要是針對日誌類的,能夠統一作日誌蒐集。

針對於數據持久化的,如MySQL數據能夠經過映射mysql/data:/var/lib/mysql把數據集中存儲到NFS上

注意:

  1. 集中存儲要考慮到同時讀寫的問題,即Lock。有的程序沒法同用一套數據,這時候要考慮到單獨讀寫或放到多個變量子目錄,如MySQL沒法同時起2個實例讀寫一套數據。
  2. NFS插件還有不完善的地方,如只能映射目錄,沒法映射文件,咱們經常使用的-v /nginx.conf:/nginx.conf就沒法使用了。
  3. 多NFS服務器配置,沒法從UI界面添加,只能從YML文件來處理。
  4. 集中存儲必定要考慮速度問題,畢竟網絡傳輸沒有本地傳輸速度快,儘可能選擇公有云/私有云網絡是走光纖通道的。儘可能不要跨地域傳輸,如深圳的使用上海的NFS服務器
  5. 儘量使用可靠性有保障的存儲,畢竟服務器、容器這些能夠丟棄,但數據是要絕對安全的。推薦阿里雲的NFS服務,能夠保障9個9的安全性。

做者簡介

鄭偉漪,深圳永達電子技術總監,負責公司互聯網產品架構和研發管理。對於微服務架構開發有豐富經驗,對互聯網技術的發展有獨到看法。曾服務神州數碼(中國)、華爲、銀聯商務等互聯網產品。本文版權歸做者全部,轉載請後臺留言。

相關文章
相關標籤/搜索