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