將Dubbo微服務(wù)遷移到k8s集群環(huán)境中前的思考與落地-創(chuàng)新互聯(lián)

將Dubbo微服務(wù)遷移到k8s中的思考與落地

成都創(chuàng)新互聯(lián)云計(jì)算的互聯(lián)網(wǎng)服務(wù)提供商,擁有超過13年的服務(wù)器租用、服務(wù)器托管德陽(yáng)、云服務(wù)器、網(wǎng)站空間、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn),已先后獲得國(guó)家工業(yè)和信息化部頒發(fā)的互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務(wù)許可證。專業(yè)提供云主機(jī)、網(wǎng)站空間、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。

說到容器化,不得不提kubernetes這個(gè)集群編排系統(tǒng),它是一個(gè)開源系統(tǒng),用于容器化應(yīng)用的自動(dòng)部署、擴(kuò)縮和管理。

Kubernetes 將構(gòu)成應(yīng)用的容器按邏輯單位進(jìn)行分組以便于管理和發(fā)現(xiàn)。 Kubernetes 基于自己公司的生產(chǎn)負(fù)載上的 15 年經(jīng)驗(yàn) 打造,并融合了來自社區(qū)的最佳建議與實(shí)踐。在2016年的時(shí)候,國(guó)外公司亞馬遜,IBM這種大型公司,以及國(guó)內(nèi)的阿里巴巴也都在自己原生對(duì)k8s進(jìn)行了支持,近幾年來,微服務(wù)也是非常的火熱,說到微服務(wù)用的比較多的像spring cloud,spring boot,以及阿里開源的微服務(wù)框架dubbo,很多我們國(guó)內(nèi)的公司也都是采用這種微服務(wù)的架構(gòu)風(fēng)格,也是由于傳統(tǒng)的單體架構(gòu)帶來的一些問題,比如也有的項(xiàng)目有幾十萬行代碼,各個(gè)模塊之間區(qū)別比較模糊,邏輯比較混亂,代碼越多復(fù)雜性越高,越難解決遇到的問題。

相信也不是單單這幾種問題,選擇微服務(wù),也是這種趨勢(shì),確實(shí)給我們的架構(gòu)更清晰化,更好去管理更多的服務(wù)模塊。

說說微服務(wù)為什么更適合容器化?
Netflix 云架構(gòu)總監(jiān)說微服務(wù)和 Docker 的結(jié)合是一種顛覆。Docker可以為微服務(wù)提供一個(gè)完美的運(yùn)行環(huán)境。而kubernetes提供了這個(gè)集群編排系統(tǒng),而容器可以輕松實(shí)現(xiàn)微服務(wù)化后的 DevOps。后面聊dubbo的時(shí)候再聊聊為什么微服務(wù)和k8s的關(guān)系,為什么dubbo更適合部署到k8s中。

說說Dubbo是什么?
Dubbo是阿里巴巴SOA服務(wù)化治理方案的核心框架,每天2000+個(gè)服務(wù)提供30億+次訪問量的支持,并廣泛應(yīng)用于阿里巴巴集團(tuán)的個(gè)成員站點(diǎn)。也就是一個(gè)軟件架構(gòu),也就是有很多互聯(lián)網(wǎng)公司都在用這個(gè)Dubbo微服務(wù),是一個(gè)非常好的微服務(wù)治理框架,

Dubbo是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案。

簡(jiǎn)單的說,dubbo就是一個(gè)服務(wù)框架,如果沒有分布式的需求,其實(shí)是不需要用的, 只有在分布式的時(shí)候,才有dubbo這樣的分布式服務(wù)框架的需求,并且本質(zhì)上是 個(gè)服務(wù)調(diào)用的東西,說白了就是個(gè)遠(yuǎn)程服務(wù)調(diào)用的分布式框架 ,而且dubbo和我們的k8s關(guān)系是非常緊密的,好像就是專門為k8s為生的,因?yàn)閗8s也是一個(gè)分布式的基礎(chǔ)服務(wù)框架,所以我們把dubbo微服務(wù)交付到k8s里是非常合適的

Dubbo能做什么
? 透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡(jiǎn)單配置,沒有任何API侵入。說白了就是dubbo是由消費(fèi)者和提供者,消費(fèi)者去消費(fèi)提供者的方法,就好像調(diào)用本地方法一樣,配置簡(jiǎn)單

? 軟負(fù)載均衡及容錯(cuò)機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本,減少單點(diǎn)。 也就是dubbo提供負(fù)載均衡機(jī)制,比如一個(gè)提供者自己?jiǎn)?dòng)之后是自動(dòng)注冊(cè)的,它是由注冊(cè)中心幫你調(diào)度,按照調(diào)度算法幫你調(diào)度給后端的提供者,無論你起了多少副本,不用關(guān)心是不是在負(fù)載均衡器上起的那些副本加上,它自己會(huì)加,他會(huì)提供這個(gè)負(fù)載均衡機(jī)制,而k8s呢也是這種思路,k8s定義一個(gè)service,后端的pod反正都是從這個(gè)service這個(gè)入口進(jìn)去,dubbo和k8s設(shè)計(jì)的方法是不謀而合的。

? 服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊(cè)中心基于接口名 查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。 這個(gè)就非常重要了,無論是服務(wù)的提供者還是消費(fèi)者,我們都需要注冊(cè)中心,你現(xiàn)注冊(cè)上,然后向外提供服務(wù),找我的時(shí)候通過注冊(cè)中心去找的

小結(jié):三個(gè)最典型的特點(diǎn)
第一個(gè)就是完全透明的本地化調(diào)用
第二點(diǎn)就是負(fù)載均衡機(jī)制
第三點(diǎn)就是服務(wù)的自動(dòng)注冊(cè)與發(fā)現(xiàn)

然后看一下Dubbo的架構(gòu)圖
將Dubbo微服務(wù)遷移到k8s集群環(huán)境中前的思考與落地![]

Provider:暴露服務(wù)的服務(wù)提供方。 實(shí)際上提供者提供了一些過程調(diào)用的服務(wù),是基于rpc機(jī)制調(diào)用方式的,Remote Procedure Call,比如提供一些計(jì)算服務(wù),存儲(chǔ)服務(wù)或者是一些跟數(shù)據(jù)庫(kù)連接的一些服務(wù),
Consumer: 調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。 主要是提供一些web接口,web頁(yè)面主要提供一些ui層的一些服務(wù),把后端重的一些服務(wù)都放在提供方去,然后調(diào)用的話,就是消費(fèi)者去調(diào)用提供方,就好像調(diào)用本地方法一樣,
Registry:服務(wù)注冊(cè)與發(fā)現(xiàn)的注冊(cè)中心。
Monitor: 統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用 時(shí)間的監(jiān)控中心。
Container: 服務(wù)運(yùn)行容器。

下面說說具體的架構(gòu)方案以及實(shí)現(xiàn)的方式
首先k8s環(huán)境集群這是首先齊要,一般這個(gè)肯定是自己要部署好的,另外就是你需要將你的k8s集群做成一個(gè)高可用的一個(gè)集群,這樣的話,后續(xù)你去擴(kuò)容還有你的環(huán)境比如master節(jié)點(diǎn)還有一個(gè)主控節(jié)點(diǎn)幫你去工作,這是首當(dāng)其要,這里想必很多人也知道,另外要說就是你的pod的持久化,本身你的pod的生命周期就是非常短暫的,你的pod重啟或者由于一些特殊的情況的話,那么你的pod的ip那么就會(huì)變了,所以這里在這個(gè)環(huán)境當(dāng)中大家想必是要去考慮它本身的一個(gè)持久話的問題,比如你的jenkins這個(gè)要是在k8s中運(yùn)行的話,那么就需要考慮它的一個(gè)工作目錄,jenkins_home這個(gè)工作目錄,也就是jenkins生成的文件,還有你的去拉代碼的時(shí)候所產(chǎn)生的工作目錄都會(huì)實(shí)地落到你的這個(gè)工作目錄下的,這個(gè)目錄你要是在k8s中去部署jenkins,我們就需要將這個(gè)工作目錄采用這種持久化的這個(gè)功能將它共享掛載在我們的其他服務(wù)器中的一個(gè)目錄當(dāng)中,如果不去做持久化的話,你的工作目錄當(dāng)你的pod重啟就會(huì)丟失,當(dāng)然你的容器可能會(huì)用到一些維護(hù)的相關(guān)的命令,要是pod重啟你的命令也是會(huì)丟失的,或者你想對(duì)這個(gè)容器做免登錄的話,你是需要在你容器中去生成這個(gè)ssh-keygen的,這樣的話,你容器重啟這個(gè)目錄也是會(huì)丟失的,將jenkins部署到k8s中也是可以,但是維護(hù)這個(gè)容器起來,還是相對(duì)來講,比較麻煩的。

我們是將我們的jenkins部署到我們的單獨(dú)一臺(tái)服務(wù)器上。另外我們對(duì)jenkins使用的slave架構(gòu)的方式可以用一臺(tái)jenkins可以發(fā)布測(cè)試以及線上的環(huán)境。

部署到單獨(dú)一臺(tái)服務(wù)器的話,這里我是以這種war包的形式去啟動(dòng)的,這里我為了將我們的jenkins的工作目錄進(jìn)行修改,本身它這個(gè)工作目錄是放在.jenkins下這個(gè)工作目錄下的,所以我進(jìn)行對(duì)它這個(gè)目錄tomcat.catalina.sh的這個(gè)目錄進(jìn)行修改添加了export JENKINS_HOME=/opt/k8s/project這個(gè)共享目錄下,并在你的環(huán)境變量中生效,啟動(dòng)你的war包這樣的話,你的文件都會(huì)落地到這個(gè)共享存儲(chǔ)中,這是我是使用的這個(gè)nfs,這個(gè)共享存儲(chǔ)去做的這個(gè)。
其他這個(gè)共享存儲(chǔ)也有很多,像這種的話,比如還有g(shù)lusterFS,ceph,等等這些都是可以去做的。

然后接下來就是部署我們的coredns,這個(gè)主要也是來完成我們k8s的service的一個(gè)域進(jìn)行解析的,比如我們?nèi)グ惭b一個(gè)busybox的一個(gè)測(cè)試工具,可以去測(cè)試一下我們集群中的kubernetes.default,一般你的coredns還有你的網(wǎng)絡(luò)CNI插件沒問題的話,是可以正常去解析的,后面就是部署這個(gè)elk這個(gè)日志文件系統(tǒng),這個(gè)的話,我是將它部署在k8s中的,也是為了方便管理,當(dāng)然部署在外面也是可以的,我這里是使用的elasticsearch,filebeat,kibana,進(jìn)行對(duì)我們微服務(wù)dubbo的項(xiàng)目進(jìn)行對(duì)日志的收集的。

這里的話,這種pod類型也就是這種親密性pod,也就是在一個(gè)pod中去部署兩個(gè)容器。

然后通過這個(gè)filebeat在我們的容器中去部署,通過這個(gè)采集器去收集我們的日志,然后輸出到es中,然后交給kibana來進(jìn)行對(duì)我們dubbo微服務(wù)的日志進(jìn)行輸出,這是這一塊。

另外就是我們對(duì)于我們的restful接口的一個(gè)對(duì)外的統(tǒng)一入口,這里我們是通過k8s中的cluster IP 進(jìn)行發(fā)布,通過nginx做反向代理給我們的slb服務(wù)均衡器,提供一個(gè)公網(wǎng)地址對(duì)外統(tǒng)一入口。

然后就是使用jenkins去將我們的項(xiàng)目發(fā)布出去,部署到我們的k8s中,我們這里目前是使用的Jenkins配置自由式發(fā)布,每個(gè)項(xiàng)目的需求都不一樣,我們使用寫的腳本去發(fā)布的,或者你使用這種pipeline去發(fā)布這個(gè)也是可以的,因?yàn)槲覀兪莋itlab的形式去托管代碼的,所以我們通過jenkins需要將對(duì)gitlab進(jìn)行免交互登陸,第一在jenkins中ssh-keygen,生成id_rsa id_rsa.pub,一個(gè)是私鑰一個(gè)是公鑰,將這個(gè)私鑰存放著jenkins上的key中,將pub這個(gè)公鑰放到gitlab中的托管處就可以了, 配置git 執(zhí)行參數(shù)化構(gòu)建,選擇maven,提前將所以的配置都部署好,jdk環(huán)境以及maven,放在/etc/profile下并執(zhí)行好,然后構(gòu)建執(zhí)行后,在你項(xiàng)目下的target下面會(huì)有這個(gè)jar包,或者就是應(yīng)用程序,我們這里是應(yīng)用程序,我們將這個(gè)應(yīng)用程序通過寫dockerfile的形式將它封裝成容器,然后給他一個(gè)jre環(huán)鏡將這個(gè)服務(wù)部署進(jìn)去,然后上傳到我們的harbor倉(cāng)庫(kù)上,再通過k8s的yaml進(jìn)行去執(zhí)行,將我們的服務(wù)發(fā)布出去。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)站欄目:將Dubbo微服務(wù)遷移到k8s集群環(huán)境中前的思考與落地-創(chuàng)新互聯(lián)
標(biāo)題來源:http://bm7419.com/article16/gijdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站收錄自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、全網(wǎng)營(yíng)銷推廣

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)