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