溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的

發(fā)布時間:2021-12-06 14:13:55 來源:億速云 閱讀:146 作者:柒染 欄目:云計算

本篇文章給大家分享的是有關(guān)Mesos容器網(wǎng)絡(luò)解決方案是怎樣的,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

Mesos是數(shù)人云的主要的技術(shù)棧之一,并且我們很早就開始在實踐Mesos應(yīng)用。從數(shù)人云的角度,我們希望容器的快速分發(fā)能夠幫助客戶實現(xiàn)快速交付?,F(xiàn)在Mesos社區(qū)的發(fā)展非???,Mesos有一個重要的特性Unified Container,讓Mesos可以交付容器。而接下來有一個更熱的話題—— 一容器一IP,在當(dāng)前容器圈用網(wǎng)絡(luò)方案如何解決這個問題,大家各顯神通,但是真正能把網(wǎng)絡(luò)和容器說清楚的并不是特別多,結(jié)合數(shù)人云長時間的積累和實踐,在這里我想跟大家一起探討容器的網(wǎng)絡(luò)以及Mesos的解決方案,為大家提供一個參考。

##Mesos的網(wǎng)絡(luò)問題

Mesos 1.0其實已經(jīng)有了一個完整的容器Interface的規(guī)范, CNCF(Cloud Native Computing Foundation)提供了Container Network Interface的接口,希望在Mesos社區(qū)里規(guī)范網(wǎng)絡(luò)的使用,讓大家有一個接口能夠復(fù)用網(wǎng)絡(luò)。剛剛發(fā)布的Mesos 1.0會遇到一些問題。最常見的就是我們無法逾越的一容器一IP,對于這個問題大家都有各自的看法,但是Mesos的過程里面是sandbox,是沒有IP的概念的,所以要思考如何用容器的方式獲得IP。

第二,有了IP接著會出現(xiàn)服務(wù)發(fā)現(xiàn)的問題,什么是服務(wù)發(fā)現(xiàn)?最簡單的是DNS,一個名字對多個IP。第三,有了網(wǎng)絡(luò)之后,所有的數(shù)據(jù)之間有了聯(lián)系,它們之間如何隔離是一個問題。例如,有一個數(shù)據(jù)庫專門為業(yè)務(wù)A使用,另外一個數(shù)據(jù)庫供業(yè)務(wù)B使用,就有兩個Wordpress,這兩個多租戶之間沒有任何的聯(lián)系,我們希望它們之間的網(wǎng)絡(luò)是隔離的, Mesos有一個可以讓大家立即使用的解決方案是Calico這個項目,雖然也有商業(yè)的公司在做這個項目,但是它的源碼和思想是可以被復(fù)用的,所以我這次主要是與大家分享一容器一IP實現(xiàn)的方式。

##實現(xiàn)一容器一IP為什么選擇Calico?

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的}" title=""> 一臺機器有自己的MAC地址,常規(guī)的主機上有自己的IP,MAC地址跟IP之間是有關(guān)聯(lián)的,也有三層的概念在里邊,但是這是主機的網(wǎng)絡(luò),容器起來以后也是有MAC地址的,但是它是一個虛擬的MAC地址,如何獲得一個真實的IP或者想要給它分配的IP,就引出了一個概念——L3的虛擬網(wǎng)絡(luò),可以在沒有真實MAC地址或者MAC地址是一樣的情況下能給它分配不同的IP。Linux的Kernel有Filter的概念,可以對數(shù)據(jù)流進行轉(zhuǎn)換,在前面可以打包頭,我們就可以在Linux完整的基礎(chǔ)之上在路由的規(guī)則上做判斷, Linux Bridge模式的話是可以造IP的, Calico項目源碼的基礎(chǔ)就是Linux的這個能力。之所以每個容器之間有隔離的作用,是因為它可以對每一個容器分不同的網(wǎng)段,網(wǎng)段之間是隔離的,本來兩個網(wǎng)段之間就沒有路由規(guī)則,無法相通。

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 Mesos有一個CNI的支持為什么非常重要?之前使用Mesos和Doker的時候,我們有很多方式可以獲得IP,但這些方式對于Mesos生態(tài)圈里面來說很難有規(guī)范, Mesos發(fā)展到如今已經(jīng)把Doker去掉,對于網(wǎng)絡(luò)這部分它需要一個規(guī)范,這個規(guī)范就是CNI規(guī)范。CNI規(guī)范是一個Json,這個Json非常簡單是一個很好的語義,而且它可以支持IPV4,以及之后的IPV6。一個配置文件能夠描述整個網(wǎng)絡(luò)結(jié)構(gòu)已經(jīng)足夠,有了CNI之后有很多種實現(xiàn),Calico只是其中一種,大家會看到有硬件的、有Contive、有Weave,有Vxlan的模式等等,它們內(nèi)部其實都有Overlay的模式。

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 Mesos本身是為數(shù)據(jù)中心設(shè)計的一套集群,需要了解數(shù)據(jù)中心的網(wǎng)絡(luò)結(jié)構(gòu)有兩個非常關(guān)鍵的指標(biāo)——南北的數(shù)據(jù)流和東西的數(shù)據(jù)流,南北的數(shù)據(jù)流就是從數(shù)據(jù)中心外面到數(shù)據(jù)中心內(nèi)部的數(shù)據(jù)流。網(wǎng)絡(luò)結(jié)構(gòu)可能有路由器,網(wǎng)關(guān),下面可能有LoadBalance,但它跟容器相關(guān)的網(wǎng)絡(luò)是沒有關(guān)系的。我們通過容器的方式,類似于是想水平擴展的,基于這個網(wǎng)絡(luò)的概念,我們提出想要一個比較復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu)。

互聯(lián)網(wǎng)公司普遍是內(nèi)存比較小但機器比較多,常常一兩千臺機器;但有的傳統(tǒng)企業(yè)用的是大型機或者用的機器都比較大,他們的機器四五臺機就能組成一個網(wǎng)絡(luò),內(nèi)存比較多,一臺機器可以跑兩三百個容器,四五臺機器能跑幾千個容器,這就是Clico和一些第三方的解決方案要解決的問題——管理IP的網(wǎng)段,因為IP地址是有限的,并且真實的網(wǎng)段是一套,而所有的這些分的IP的網(wǎng)段也是真實的,要去管理它的沖突?,F(xiàn)在大家想到的是自己搞一個IP的管理界面,對IP進行管理把它固定住,但當(dāng)容器越來越多的時候,就會有很多問題。

針對數(shù)據(jù)中心東西向的解決方案,Calico提出的一種方法是基于BGP協(xié)議。BGP協(xié)議是對路由規(guī)則進行控制,也就是說在沒有MAC地址的情況下,路由有路由表,路由表多了以后有兩件事,第一是要廣播,第二是這個路由表大了,軟件模擬的方式會有性能瓶頸,并且還要做精細化的訪問控制。因為兩個網(wǎng)段之間用的虛擬網(wǎng)段,有可能會沖突,一兩個網(wǎng)段的時候可能沒有問題,當(dāng)幾十個APP之間隔離的時候兩個虛擬網(wǎng)段用的可能是同樣的IP地址,要保證它們兩個不通,如果通的話還要保證兩個IP不能沖突。那么有沒有更好的方式?有,就是MAC Vlan——用主機的方式管理虛機。

這與Host的模式(不用自己的虛擬網(wǎng)絡(luò),用原生的主機模式網(wǎng)絡(luò))相比,只是加了一層MAC地址的管理。但是它有一個比較大的問題是對硬件有依賴,因為MAC是要轉(zhuǎn)IP的,而IP地址一定是有限的,MAC地址也是有限的,如果有沖突都是靠硬件來控制的,它并不能很輕易地上云,云端MAC地址不受控制,基本上是在私有云的基礎(chǔ)上用MAC Vlan的方法去做。對于Mesos的解決方案我們希望的是通用型的,有一個網(wǎng)絡(luò)標(biāo)準(zhǔn)CNI, Calico是比較靈活的而有保障的。這是今天推薦這樣一個方案的原由。

##網(wǎng)絡(luò)很復(fù)雜,講講基本功 Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 在學(xué)習(xí)網(wǎng)絡(luò)的過程中,有幾個知識比較重要。首先,什么是三層網(wǎng)絡(luò)?其實就是二層交換,三層路由。當(dāng)前的路由器已經(jīng)非常先進, Overlay最大的一個特點就是利用了路由這樣一個基本的知識點。大家會看到從S0這一塊進來以后一定是一個路由表,路由表之后會制定一些policy,然后到每一個網(wǎng)卡上再去劫持,去做一個路由表和一些規(guī)則,到機器上以后這個Brige有了一個新的網(wǎng)卡,是不依賴于MAC地址的,它的好處在于可以連接一個非常大的網(wǎng),容器可以隨意的起,起幾百個容器都能連起來,我們只需把網(wǎng)配好就可以了。 Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 但是傳統(tǒng)Overlay因為功能太強、太先進,一定要打無數(shù)個包頭才能從最遠端到里邊。Vxlan以最新代表的SDN的網(wǎng)絡(luò)非常先進,但是軟件模擬這種網(wǎng)絡(luò)是非常脆弱的,規(guī)模越大效率越低,因為最簡單的問題就要解包、拆包,拆到最后拆到MAC地址和IP。網(wǎng)絡(luò)數(shù)據(jù)包有拆包、解包的過程,只有讓它少一點拆包解包的能力,這樣速率才會高。通俗地說,當(dāng)前所有用Doker網(wǎng)絡(luò)的解決方案都是有損耗的,除非不使用或者使用Vxlan,Vxlan也沒有用虛擬網(wǎng)絡(luò),所有的虛擬網(wǎng)絡(luò)都是有損耗的,所以目前無損耗的方式是不可能做到的。

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 這個包頭或者路由表在規(guī)則少、規(guī)模小的時候,效率還是很高的。上圖兩行紅字,第一個是Overlay對Overlay的,這是純的Vxlan的網(wǎng)絡(luò),像Docker的Swarm就用這種原生的網(wǎng)絡(luò)創(chuàng)建,它的問題就在于它是虛擬的去轉(zhuǎn)換,所以整個網(wǎng)絡(luò)非常弱,損耗只能到40%,60%都損耗掉了。并不是說網(wǎng)絡(luò)不先進,瓶頸在于它實現(xiàn)的是一個參考,如果用硬件或第三方的結(jié)構(gòu),用Docker Swarm解決不了,那么網(wǎng)絡(luò)基本上是不可用的。第二個是Calico的Overlay,損耗差不多也是百分之十幾,是目前為止我們看到的一個最好的方式。這個基礎(chǔ)數(shù)據(jù)來自Percona這個公司,它做的MySQL發(fā)行版,在Master和Slave之間做同步,數(shù)據(jù)量增大這個瓶頸才能壓測出來,從而得到這個基礎(chǔ)數(shù)據(jù)報告。

Doker非常好用,但是Doker內(nèi)置Swarm的特性,Doker Swarm就是兩行命令就能創(chuàng)建的網(wǎng)絡(luò),非常簡單。這個網(wǎng)絡(luò)非常適合在測試環(huán)境和在單機的模式下調(diào)試網(wǎng)絡(luò),它有自己的DNS、名字、網(wǎng)絡(luò)IP,也可以自己管理,非常方便。但是到了生產(chǎn)級別用網(wǎng)絡(luò)Mesos容器方案的時候,Calico這個方案可以幫助大家更好地理解和解決這個問題。

##Calico是如何做的?

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 在上圖中,它的原理是IP Table,使用了Calico的組件,用BGP去做,其中一個關(guān)鍵點就是它要保存這個路由規(guī)則,還要刷每臺機器的路由。它首先要用etcd保存這些信息,因為本地?zé)o法存儲,要保證一致性。第二,它的路由表要刷給別的機器,每臺機器都要去傳,所以每臺機器都是跟etcd有關(guān)聯(lián)的,觸發(fā)BGP去刷。它是無中心的,每臺機器刷完以后,這邊路由表規(guī)則一變,Mesos所有機器的路由表就變了,看起來好像網(wǎng)是通了。因為每臺機器出來的時候走的是S0的IP,到那邊的時候也是S0,但是路由做了規(guī)則轉(zhuǎn)換,所以兩邊都是通的,能跨主機的IP實現(xiàn)了這樣的過程。

這里它做了一個小小的手術(shù),因為網(wǎng)絡(luò)結(jié)構(gòu)越復(fù)雜,要對封包做的越多,在這個網(wǎng)段里面跳一下的時候需要給消息包頭打個標(biāo)簽,IP要打不同的標(biāo)簽,才能到那個網(wǎng)絡(luò)里面。它做了一個權(quán)衡,認為網(wǎng)絡(luò)不要太多,可能就是一百臺機器的規(guī)模,因為有ARP廣播,廣播風(fēng)暴在網(wǎng)絡(luò)里面非常常見,Mesos本身又不管網(wǎng)絡(luò)。 Calico現(xiàn)在的做法就是在中間加了一個Route Reflector。BIRD也是第三方的,是Linux路由表的一個存儲,它利用第三方的存儲來存儲自己的路由規(guī)則,然后保證這個路由規(guī)則能夠被其它方主動去抓,這樣就從原來推的方式變成抓的方式,簡單地解決了這個問題。Mesosphere就是參考這個實現(xiàn)了一套類似于Calico的網(wǎng)絡(luò)方案,叫Minuteman,也是開源的,在open dcos上面有這樣一個方案,大家可以去參考。這個就是Calico具體的實現(xiàn)。

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 對于Mesos的網(wǎng)絡(luò)結(jié)構(gòu),要有Framework的概念,也要有Slave、Executer的概念。Launch Calico做了一個插件安裝在每臺機器上,之后Framework調(diào)用、起一個任務(wù)的時候會劫持和觸發(fā)IP規(guī)則的啟用,Calico自己有IP management,下發(fā)到Slave那有一個隔離模塊,做策略的隔離,獲得IP做一個Policy,然后做一個隔離。這一塊就是調(diào)用IP Table、IP Set去做,做完以后再去更新Master信息放到Zookeeper里面。然后獲得了一個Task的IP。尤其像現(xiàn)在沒有Doker的情況下,UnifiedContainerize 更是這種模型了。其實安裝的組件就是一個Calico的BGP Agent,以及一個Felix,Agent刷本地的,F(xiàn)elix去刷別人的。

Mesos容器網(wǎng)絡(luò)解決方案是怎樣的 最終,Mesos目前真實的IP網(wǎng)絡(luò)結(jié)構(gòu)就是這樣一個模型:每臺機器上面有一個小路由器,我把它定義為是一個路由器,其實就是路由規(guī)則,它保存完以后每臺機器里的容器的IP是可以不一樣的,也可以一樣的,但是左邊的這臺機器的IP跟右邊這臺機器的IP是不通的,路由表雖然刷了但是不通的。它可以通過廣播的方式告訴右邊的,右邊再刷一下自己的路由規(guī)則,這邊一訪問的時候,因為用IP Table把它的Package切了,就類似于Router把它改了,destination也改了,傳到另外一臺機器上,那邊也因為路由規(guī)則相應(yīng)的做了轉(zhuǎn)換,所以相應(yīng)的加了路由的包到里邊,容器知道這個數(shù)據(jù)包了就可以接通。Router這邊它是模擬的、虛擬的,機器越多,由于它要主動去推,其性能就會下降。Calico的方式就是在外面再架一個中央路由器,然后讓用戶刷,再從中央路由器去取,這樣就減少廣播的節(jié)點。

Mesosphere最新的做法,是用的Erlang的模型做了一個P2P的網(wǎng)絡(luò)結(jié)構(gòu)。好處在于可以點對點地刷路由,也就是說這兩臺機器的應(yīng)用之間有關(guān)聯(lián)才去刷,如果沒有關(guān)聯(lián),像Calico就刷一次,每個表都要刷,因為它不知道用戶會不會在下一秒去啟動新的容器,所以這種結(jié)構(gòu)是傳統(tǒng)的網(wǎng)絡(luò)結(jié)構(gòu)。但是Mesosphere的Minuteman做法就更先進一點,它的做法就是點對點地去刷,容器起來的時候去刷,局限性是只能在一個數(shù)據(jù)中心里面做這件事,因為它是一個實驗型的項目,我們尚不清楚它的性能和規(guī)模。

以上就是Mesos容器網(wǎng)絡(luò)解決方案是怎樣的,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI