摘要:數(shù)人云容器助力產(chǎn)品迭代力沙龍干貨分享實(shí)錄持續(xù)上新,今天是來自人人貸高級運(yùn)維工程師杜天鵬的分享,與我們細(xì)數(shù)了人人貸容器化實(shí)踐過程中遇到的問題以及解決方法。
數(shù)人云“容器助力產(chǎn)品迭代力MAX”沙龍干貨分享實(shí)錄持續(xù)上新,今天是來自人人貸高級運(yùn)維工程師杜天鵬的分享,與我們細(xì)數(shù)了人人貸容器化實(shí)踐過程中遇到的問題以及解決方法。
很高興站在這里和大家一起交流容器技術(shù),我叫杜天鵬,是人人貸的運(yùn)維工程師。人人貸是一家做P2P的互聯(lián)網(wǎng)公司,現(xiàn)在業(yè)務(wù)量上升比較快,業(yè)務(wù)組件也比較多,這個過程給運(yùn)維增加了很大的壓力,所以人人貸考慮了容器化技術(shù)。
為什么使用容器技術(shù)
Docker官網(wǎng)有一句話:build once,run anywhere,容器一次構(gòu)建,在其他服務(wù)器上就可以運(yùn)行。第二,容器使用的是Unionfs,在傳輸?shù)倪^程中,實(shí)際上傳遞的是變更的部分,而不需要拉取完整的image。第三,容器為人人貸提供了一個隔離的環(huán)境,在測試的過程中,一臺機(jī)器可能運(yùn)行了很多服務(wù),一旦測試或者開發(fā)人員更改服務(wù)器環(huán)境或者其他參數(shù),會導(dǎo)致其他的測試環(huán)境運(yùn)行不起來。容器帶來了環(huán)境的隔離性,一個容器只需運(yùn)行一個Docker,可以避免很多問題。第四,容器能夠結(jié)合Jenkins以及如Hudson、Teamcity這些持續(xù)交付軟件來進(jìn)行持續(xù)交付、持續(xù)集成、持續(xù)部署。第五,容器可以結(jié)合如K8S、Mesos、Swarm等調(diào)度器然后進(jìn)行橫向擴(kuò)展。
這是人人貸的傳統(tǒng)上線流程。首先開發(fā)人員推送他們的代碼到Git倉庫,人人貸使用的是Stash,測試人員在測試的時間輸入倉庫名稱和版本號,來進(jìn)行使用Jenkins構(gòu)建。在測試環(huán)境中,測試完成之后會重新構(gòu)建一次,然后推送代碼到類生產(chǎn)環(huán)境。這個類生產(chǎn)環(huán)境實(shí)際上使用的是生產(chǎn)環(huán)境的配置,只不過再做一次校驗(yàn),防止出現(xiàn)問題。最后運(yùn)維人員使用Ansible推送代碼到生產(chǎn)環(huán)境,在這個過程中會產(chǎn)生很多問題。
比如剛才說的環(huán)境不統(tǒng)一,或者是無意中修改了環(huán)境,或者有臨時的需求上線的時間,需要準(zhǔn)備新的虛擬機(jī)。這個臨時的需求或許非常著急,但是從運(yùn)維的角度來看,創(chuàng)建服務(wù)器,修改配置,初始化操作都需要一個過程,因此會影響整體的工作進(jìn)展。Docker解決了這個問題,因?yàn)榭梢允褂锰崆皽?zhǔn)備好的Docker鏡像進(jìn)行所有的初始化操作,讓運(yùn)維可以從容應(yīng)對突發(fā)的情況。
還有資源浪費(fèi)的問題。在開發(fā)或者測試環(huán)境,人人貸運(yùn)維人員為開發(fā)創(chuàng)建了很多測試虛擬機(jī),假如不做定期巡檢的話,就無法得知這個虛擬機(jī)是否正在被開發(fā)或者測試人員使用,導(dǎo)致了資源的浪費(fèi)。使用了Docker技術(shù)后,運(yùn)維就可以隨時為開發(fā)或者測試同事部署一套環(huán)境,并且做定期的清理。對于大規(guī)模的部署過程,可以實(shí)現(xiàn)靈活調(diào)度,因?yàn)槿巳速J的業(yè)務(wù)峰值是不一樣的。比如白天交易系統(tǒng)比較繁忙,可以調(diào)整交易系統(tǒng)節(jié)點(diǎn)數(shù)量;晚上要做計算和統(tǒng)計,計算資源則會多跑一些任務(wù)。
為什么選擇Mesos人人貸在使用Docker時,考慮了三種容器技術(shù),分別是Mesos,Kubernetes以及Swarm。最終選擇Mesos主要基于三點(diǎn)考慮:最主要的是學(xué)習(xí)成本,對于Kubernetes,它的功能很多也很強(qiáng)大,但是它更新迭代非???,里面很多功能現(xiàn)在仍處于Beta版本,但是官方并沒有明確其使用環(huán)境。第二,成熟度的問題,Mesos推出時間早,實(shí)踐的公司也比較廣泛,成熟度高于其他兩個技術(shù)。第三,Mesos有很多調(diào)度器例如Marathon,在界面上可以有一個直觀的展示。而Kubernetes和Swarm之前是沒有界面的,現(xiàn)在Kubernetes有一個Dashboard,但是功能尚不完整。
遷移到虛擬機(jī)的種種問題
人人貸從物理機(jī)遷移到虛擬機(jī)過程中遇到很多問題,一個完整的技術(shù)就是一個成熟的技術(shù)在應(yīng)用到生產(chǎn)環(huán)境中,這個過程中的問題并不是技術(shù)引起的,而是落地的過程中沒有標(biāo)準(zhǔn),所以人人貸需要有一個標(biāo)準(zhǔn)化來面對需求。
首先,配置不可見。運(yùn)行在Docker內(nèi)部的程序,并不不推薦進(jìn)入容器,因?yàn)镈ocker就是一個容器,需要連接到里面來看配置項。在Marathon上面就可以看到配置項,具體配置項是通過ENV傳入的。
第二,項目無法相互調(diào)用。人人貸的業(yè)務(wù)比較多,所有的項目需要相互調(diào)用,包括交易所、 P2P以及基金,它們之間需要進(jìn)行資源交互。但是由于人力精力有限,Docker技術(shù)在整套系統(tǒng)的實(shí)現(xiàn)尚需要一個過程。
第三,無法通過SSH連接Docker。比如在測試環(huán)境中測試或開發(fā)進(jìn)行一些debug操作,需要通過SSH連接上去,了解Docker現(xiàn)在的配置。
第四,容器IP不可見。
如何解決這些問題接下來我會通過運(yùn)用的技術(shù)來為大家解釋人人貸是如何解決這些問題的,Docker落地過程中主要有七點(diǎn)需要關(guān)注。
第一,編排。Marathon是使用json文件進(jìn)行部署的,里面會寫到具體的資源配置,鏡像名稱以及掛載目錄。首先進(jìn)行配置文件模板化,在人人貸,運(yùn)維人員分別負(fù)責(zé)不同業(yè)務(wù)部門的運(yùn)維工作,所以運(yùn)維并不清楚其他部門是如何配置的,模板化之后只需要讓開發(fā)人員按照規(guī)則來表述,就可以清晰地傳遞和表達(dá)。
例如上圖中兩個配置,這是exchange(人人貸的一個項目名)環(huán)境里面的MySQL以及服務(wù)。開發(fā)只要按照這個標(biāo)準(zhǔn)往里面寫配置,運(yùn)維就可以明白項目和配置項。然后進(jìn)行配置項ENV化,配置都是通過ENV傳入,通過命令進(jìn)行渲染,當(dāng)然也可以使用shell命令或者其他的程序進(jìn)行配置渲染。之后修改上線json,因?yàn)槊恳淮蝚son文件并不是一成不變的,需要更改文本配置。
第二,網(wǎng)絡(luò)。人人貸使用的是Calico,它本身可以劃分網(wǎng)段,來指定范圍。我們在路由器上面添加了路由,讓開發(fā)環(huán)境可以直接訪容器內(nèi)部的網(wǎng)絡(luò)。Calico本身可以支持Docker1.10版本后,可以通過 - 指定 --IP。人人貸使用的是CNM模式,Calico是支持CNI與CNM的,人人貸使用的是calico-containers,因此可以使用Docker命令,并且指定驅(qū)動為Calico,非常便于管理。指定路由后,可以直接訪問,不再需要使用例如Marathonlb這些指定端口,也不需要維護(hù)端口列表。Calico使用BGP協(xié)議,不需要封包。對于Mesos來說,我比較推薦使用Calico。
第三,服務(wù)發(fā)現(xiàn)。人人貸使用Calico可以固定IP地址,雖然并不推薦把容器作為一個虛擬機(jī)來使用,但是對于固定IP地址這種情況可能仍需要一個容器。當(dāng)其他服務(wù)需要靈活調(diào)度時,則需要IP動態(tài)劃分。人人貸使用Mesos-DNS來獲取動態(tài)分配的IP,所有的組件配置域名相互調(diào)用,測試環(huán)境同樣使用的配置域名化,即服務(wù)調(diào)度之間都是使用域名來調(diào)用的。因此Mesos-DNS只需要轉(zhuǎn)發(fā)現(xiàn)有域名服務(wù)器的域名解析,就可以直接調(diào)用原有的服務(wù),在里面寫域名,而不需要知道其IP地址,亦不需要配置。
第四,存儲。對于一些需要持久化的數(shù)據(jù),人人貸使用的是本地化持久卷,這個綁定在host上,當(dāng)這個容器掛掉之后,它會在物理機(jī)上重新起一個容器。Docker通常運(yùn)行的都是無狀態(tài)應(yīng)用,所以如果MySQL里面的數(shù)據(jù)非常重要,我還是更推薦使用物理機(jī)或者虛擬機(jī)進(jìn)行部署。對于分布式如MongoDB或者其他具有高可用性的數(shù)據(jù)庫,部署在Docker里面也還是可以的。
第五,監(jiān)控。人人貸使用的就是Cadvisor+Influxdb+Grafana這套開源方案,Cadvisor是谷歌的一個開源產(chǎn)品,Influxdb是一個時序數(shù)據(jù)庫,Grafana是一個漂亮的界面展示。對于Zabbix,人人貸用過一個叫Zabbix-Grafana的插件,可以在Grafana里面顯示Zabbix的數(shù)據(jù)。Cadvisor主要起到作用就是收集容器里面的資源使用情況,例如內(nèi)存,CPU以及磁盤IO,然后存入到Influxdb中。當(dāng)然監(jiān)控的同時,也可以使用Dockerstats等實(shí)現(xiàn)一些數(shù)據(jù)采集。
第六,日志收集。人人貸現(xiàn)在主要使用的是ELK的數(shù)據(jù)方案。為了實(shí)現(xiàn)SSH登錄容器內(nèi)部, Docker是需要一個前臺進(jìn)程來保持Docker程序不退出的,因此人人貸所有的容器都是使用SSHD守護(hù)進(jìn)程,來保持Docker一直運(yùn)行下去。
人人貸有一個start的腳本,例如Tomcat,我們會在這個SSHD進(jìn)程啟動之前來啟動它。所以日志通過Docker logs是看不到的,只能在容器里面部署一個Logstash agent,但是會加重容器的負(fù)擔(dān)。對于沒有接入容器內(nèi)部需求的同學(xué),可以直接接入運(yùn)行進(jìn)程,將日志打入到Docker控制臺,通過Docker logs進(jìn)行日志收集,在Docker的宿主機(jī)上面指定Docker日志的產(chǎn)出目錄實(shí)現(xiàn)收集,而不再需要在Docker里面部署agent。
第七,鏡像倉庫。Docker官方的鏡像倉庫本身是沒有認(rèn)證功能的,但是在真實(shí)生產(chǎn)環(huán)境中,需要有鏡像的權(quán)限劃分?,F(xiàn)在Registry用的比較多就是Apphouse以及Habor,據(jù)我之前了解,Habor的BUG比較多一點(diǎn),所以人人貸使用了Apphouse。但是現(xiàn)在我了解到Habor支持分布式以及主從關(guān)系進(jìn)行主從復(fù)制,所以將來人人貸可能會棄用Apphouse,使用Habor來做私有倉庫。Habor是一個開源產(chǎn)品,可以看到它內(nèi)部的實(shí)現(xiàn)原理,Apphouse雖然免費(fèi),但是它是閉源的。
最終流程及總結(jié)
最終人人貸落地實(shí)現(xiàn)了這個過程,由開發(fā)人員提交代碼到Stash,輸入版本號以及分支名通過Jenkins進(jìn)行構(gòu)建,推送到image。在發(fā)布的時間通過調(diào)用Marathon的API進(jìn)行發(fā)布,拉取image,最終運(yùn)行在Mesos Slave節(jié)點(diǎn)上。
接下來人人貸希望實(shí)現(xiàn)部署多套環(huán)境,對于項目名稱進(jìn)行模板化處理,并且通過Jenkins實(shí)現(xiàn)完全自動化。個人認(rèn)為落地的過程中,主要問題就在于配置管理。謝謝大家。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/26702.html
摘要:正在走遠(yuǎn),新年之初,小數(shù)精選過去一年閱讀量居高的技術(shù)干貨,從容器到微服務(wù)云原生,匯集成篇精華集錦,充分反映了這一年的技術(shù)熱點(diǎn)走向。此文值得收藏,方便隨時搜索和查看。,小數(shù)將繼續(xù)陪伴大家,為朋友們奉獻(xiàn)更有逼格的技術(shù)內(nèi)容。 2017正在走遠(yuǎn),新年之初,小數(shù)精選過去一年閱讀量居高的技術(shù)干貨,從容器、K8S 到微服務(wù)、云原生、Service Mesh,匯集成52篇精華集錦,充分反映了這一年的技...
摘要:容器跟虛擬化是解決不同問題的,從這一點(diǎn)來看與有相似之處,我認(rèn)為虛擬化解決的一個重大問題是隔離和安全的問題,而容器則解決的是快速交付的問題。同時也可以應(yīng)用一些虛擬化比較成熟的技術(shù),包括容器的容器的熱遷移,現(xiàn)在也都具備一些初步的方案。 5月26日,數(shù)人云產(chǎn)品戰(zhàn)略發(fā)布會在北京萬達(dá)索菲特酒店舉行,發(fā)布會最后一個環(huán)節(jié)圓桌論壇可謂大咖云集,小數(shù)為大家在第一時間帶來了實(shí)錄分享,快來感受下容器生態(tài)圈的...
摘要:分享實(shí)錄云計算技術(shù)源于互聯(lián)網(wǎng)公司,現(xiàn)在云計算已經(jīng)是下一代企業(yè)級的發(fā)展趨勢。如何做云計算一直是云計算技術(shù)的領(lǐng)導(dǎo)者。互聯(lián)網(wǎng)公司的快速發(fā)展,已經(jīng)印證了云計算技術(shù)和云原生應(yīng)用相比傳統(tǒng)構(gòu)架的巨大優(yōu)勢。 今天小數(shù)又給大家?guī)硪黄韶洕M滿的分享——來自KVM社區(qū)線上群分享的實(shí)錄,分享嘉賓是數(shù)人云CEO王璞,題目是《云計算與 Cloud Native》。這是數(shù)人云在KVM社區(qū)群分享的第一彈,之后還有數(shù)...
摘要:近日,愛分析在京舉辦了愛分析中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業(yè)的發(fā)展趨勢。演講實(shí)錄黃啟功大家好首先做一下自我介紹,我是時速云黃啟功,感謝愛分析的邀請,我今天分享的主題叫云原生應(yīng)用實(shí)踐與未來趨勢。 近日,愛分析在京舉辦了 2018 愛分析·中國云計算高峰論壇,本次論壇以云化萬物,智動未來為主題,探討云計算行業(yè)的發(fā)展趨勢。愛分析邀請了云計算領(lǐng)域標(biāo)桿公司時...
閱讀 1915·2021-11-24 09:39
閱讀 2142·2021-09-22 15:50
閱讀 2018·2021-09-22 14:57
閱讀 707·2021-07-28 00:13
閱讀 1072·2019-08-30 15:54
閱讀 2365·2019-08-30 15:52
閱讀 2690·2019-08-30 13:07
閱讀 3793·2019-08-30 11:27