來自用戶的DevOps實踐分享,分享從開發代碼到生產環境部署的一條龍操做的實踐及經驗, 包含工具技術的選型及考量、私有代碼庫與私有鏡像庫的應用等。java
從互聯網的屢次變革提及,早期的C/S架構,到後來的B/S架構,一直到如今最廣泛的M/S架構,他們的背後都是技術不斷的優化改進,以適應、促進IT技術的發展整。體而言在過去10年間,互聯網技術能夠說是以手工製造的方式爲主,相似於傳統銷售、設計、製做、而後打包銷售。每一個環節都須要大量的人員來操做,也須要不斷有人接班學習來延續對應的環節。而將來10年將會是以流水線的方式爲主 ,其主要緣由是互聯網雲計算技術的高速發展及可持續快速交付的業務需求。其對應的DevOps方式將完美契合。開發運維一體化確切的說是一種方式,而這種方式須要全新的技術來支撐才行執行下去,咱們將之稱爲下一代核心技術。mysql
傳統的技術主要問題是高耦合,其耦合存在於服務器、硬件存儲、內外網之間(網絡通信),存在於應用程序之間、代碼之間、業務模塊之間。雖然通過近幾年的發展,在不斷的去耦合化大趨勢下,已經儘量的將這幾大塊之間進行低耦合處理,可是因爲傳統技術的限制,沒法從根本上解決這些問題。好比最經常使用的程序鏈接數據庫。傳統的方式多將數據庫鏈接字符串寫到程序的配置文件裏,致使其鏈接數據庫IP不能變,多節點部署程序須要一一手動修改數據庫鏈接字符串,很是麻煩。隨着技術的發展優化,有經驗的研發人員會將數據庫鏈接放到JNDI裏面(如Tomcat),由中間件管理,這樣將程序和數據庫之間進行解耦。這也是傳統技術架構經常使用的作法。可是對於多節點的部署變動,須要改變多個節點Tomcat的JNDI配置,仍是存在易用性、可維護性、可靠性方面的問題。固然也有高級別的中間件來集中解決這些問題,如WebSphere的集羣管理。但這都屬於爲了解決問題而解決問題,受限於傳統技術,沒法從根因上解決各個組件、軟硬件之間的耦合問題。並且須要商業付費,很是的貴。linux
下一代核心技術,受益於雲計算、微服務、容器服務的高速發展,採起DevOps的模式進行整合,實現硬件服務器、存儲、網絡、軟件程序、代碼之間的全低耦合甚至0耦合,這將大大提升交付能力,下降運維成本,實現互聯網產品的快速迭代。nginx
我以前的文章已經對微服務作了基本分析,本章節及後續章節會陸續對雲計算的分析應用和容器服務的分析應用作逐一的講解。微服務主要是對軟件代碼層面進行解耦,雲計算主要從硬件支撐層進行解耦,而容器服務主要從應用層面進行解耦。容器服務的飛速發展,主要是Docker的巨大功勞,將傳統的虛擬化技術帶到一個全新的層面。Docker的優點在此不作多講,主要是其原生的管理基於命令行,對於簡單應用較爲方便。可是在DevOps模式下就須要有一整套的規範接口來統一管理整個流水線。對於Docker容器的管理系統目前比較流行的有幾個: K8S、Rancher、Shipyard等,其餘還有一些不是頗有名的在此很少作列舉了,你們能夠自行研究學習。git
通過對比試用選型,在容器管理考慮到易用性包括跨主機通信的管理、DevOps的支持力度等方面,Rancher以各方面優先勝出。Rancher目前在開源社區很是火爆,支持衆多的編排引擎,當前最新版本爲 1.6.12 ,你們能夠下載試用。github
安裝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
root執行docker
curl https://releases.rancher.com/install-docker/17.06.sh | sh
配置加速器數據庫
重啓Docker服務
sudo systemctl daemon-reload sudo systemctl restart docker
登錄服務器Mgr01
運行完後,就能夠經過IP:8888來訪問Rancher的管理臺了,接下來咱們就能夠點擊 「添加主機」 來添加各個宿主機了
依次登錄各個宿主機,執行5裏面的腳本便可。
若是須要把mgr01加爲宿主機,那麼須要在4裏面填寫mgr01和ws之間互通的內網IP地址,建議不要添加mgr爲宿主機,方便後續作mgr集羣高可用。
Rancher有不少好玩的、強大的功能,後續咱們會逐一去發現講解。對於DevOps來說,原來能夠這麼簡單。
使用DevOps確定離不開和代碼的集成。因此要想跑通整套流程,代碼庫的選型也是很是重要的。不然沒法實現持續集成。目前比較經常使用的代碼管理有SVN和Git,若是還使用SVN的,建議儘早遷移到Git上面,否則很費勁的。尤爲是webhook,不少svn軟件都不支持。
能夠採用公網的GitHub,這是用的最多的,可是免費帳號仍是缺乏不少功能,收費版功能更全的,但須要考慮公司的預算。
免費版須要自行架設,Gitlab CE和Bitbucket均可以。固然這又少不了一部分維護人員、設備,從而致使增長成本。
那麼既然不肯意花錢,又想要好用的,咱們就只能選型國內一些公司的Git服務了。本着代碼可靠性,服務器穩定性,功能擴展性綜合對比,咱們選擇使用阿里雲的Git庫。
優勢:速度快速度快,不限空間,不限項目數。能夠和阿里的相關產品無縫集成。
打開 連接 自行註冊便可。使用方法就不說了,和GitHub如出一轍。性能,穩定性,都比較好。最重要的是在國內,速度很是快
經過開發IDE工具,把應用代碼放到Git庫裏面。好比我這裏有個config的項目
這時候看到Git服務端已經能夠作代碼管理了
打開 連接 便可,有阿里雲帳號能夠直接登錄使用
登錄本身的Rancher服務器mgr和ws節點,依次執行下列配置,把本身的docker加速器配置上。
可使用docker標準的pull、push等進行鏡像推拉操做。
DevOps的核心魅力是快速的持續集成交付,下降研發和實施運維之間的交互,使得傳統的各類扯皮現象通通消失。最重要的是下降成本保障產品交付可靠性。
使用Rancher做爲持續集成的關鍵環節,統一結連微服務和雲計算,使得產品從研發到上線流水線操做,提升生產效率,此處我寫的是微服務而不是傳統的程序,是由於微服務(架構的產品)和容器服務、雲計算是完美結合的三大核心模塊,也是互聯網下一代核心技術DevOps的3個核心支柱。而傳統程序,因爲在微服務架構方面轉型較慢或者生態鏈較弱,沒法完美進行DevOps。
本例集成代碼採用java微服務項目,可拋棄第三方集成組件如Jenkins,簡單高效。
實現提交代碼,即生產發佈的全自動流程 (Code->Git repository->Docker repository->Rancher->Server)
登錄阿里雲鏡像庫
選擇鏡像區域,如華南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。
爲何要使用集中存儲?使用集中存儲有個很大的優點是數據安全和統一管理,和集羣完美配合。產品集成存儲經歷
過幾個階段:
其中雲計算用的最多的是 三、4,主要適應於網絡架構的分佈式設計和基本雲計算存儲,如多機房、多地存儲。使用集中存儲給運維帶來的最大優點就是核心數據保存,不怕應用崩潰,各類docker容器均可以隨時拋棄、重建而不用擔憂數據問題。
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上
注意: