自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

云計算
實現(xiàn)docker的網(wǎng)絡(luò)有很多方式。本文作者基于對Docker的使用體驗,和在此過程中對于技術(shù)的理解,和大家分享Docker網(wǎng)絡(luò)方面的知識。

【編者的話】本文系SDN實戰(zhàn)團微信群(團主張宇峰@brocade)組織的線上技術(shù)分享整理而成,由九州云(99Cloud)培訓(xùn)經(jīng)理梁博將他對于Docker網(wǎng)絡(luò)使用體驗和一些技術(shù)方面的理解進行了分享。

分享嘉賓

梁博,浙江九州云信息科技有限公司首席架構(gòu)師兼培訓(xùn)業(yè)務(wù)負責(zé)人,從2012年開始OpenStack研究工作,加入九州云后聯(lián)合創(chuàng)建了 trystack.cn測試床項目,以及深入OpenStack SDN領(lǐng)域,多次參加各種云計算活動和培訓(xùn)工作,梁老師在九州云擔(dān)任OpenStack奇?zhèn)b之天命判官之前也曾在微軟研發(fā)任職及多次跨界創(chuàng)業(yè)。

我今天和大家分享一下Docker的網(wǎng)絡(luò),主要是基于我的使用體驗和對這里面的一些技術(shù)的理解,也順便聽取一下大家的建議。我是做培訓(xùn)的,大多數(shù)時候和理論的東西打交道, 順便做一些實驗,為了講課的時候不那么虛。所以,要是問,在多大規(guī)模下會是什么樣的,那我就只能說,我不知道了。

講之前,問大家個問題,大家知道docker0是什么嗎?實現(xiàn)docker的網(wǎng)絡(luò),有很多方式。

 SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

這張圖, 是我們在用docker的時候,可以用的網(wǎng)絡(luò)連接方式,可以看出,默認的docker對網(wǎng)絡(luò)的管理,使用的linux bridge,這個bridge的名字就叫docker0。

容器里面有一個veth連接在這個bridge上,如果是single host,容器和容器之間的通信會通過docker0,在multi host上, 我們可以把物理的網(wǎng)卡bridge到docker0上,那么容器就可以實現(xiàn)跨主機的訪問。我主要用docker來做我自己的工具(應(yīng)用), 所以對網(wǎng)絡(luò)的要求并不復(fù)雜,但是我也考慮過,如果在比較復(fù)雜的環(huán)境,例如你是做云的,或者你的應(yīng)用灰常牛逼,需要幾萬個容器的,那么對網(wǎng)絡(luò)的要求就會比較高,在這種場景下,我們就不能單單用docker0了。

我們從應(yīng)用的角度來看待這個問題,如果我是做web application的,那么就涉及到web midlleware database or other backend的架構(gòu),他們并不在一個容器里面,甚至不在一臺物理主機里面。那么我們在發(fā)布多種這樣的應(yīng)用的時候,就會需要編排,網(wǎng)絡(luò)的管理。

例如backend通常是在private網(wǎng)絡(luò),而web server是在可以被外網(wǎng)訪問到的網(wǎng)絡(luò)里面,那么docker的生態(tài)里面,會有一些專有的工具來管理網(wǎng)絡(luò)。這些都做過一些實驗,真正敢說自己能在生產(chǎn)環(huán)境用的就只有docker + weave了。不過我個人認為,所謂的生產(chǎn)環(huán)境,就是被虐了很多遍的POC而已,都是慢慢演進來的。

特別是面對例如OpenStack,Docker這種新的東西的時候,可能群里大多比較關(guān)注SDN技術(shù),所以今天就聊聊Docker + OVS吧。docker0比較簡單,你裝好docker就可以用了。但是ovs需要其他的配置。比如如果我們用k8s,可以使用ovs來封裝數(shù)據(jù)包,也就是說用gre或者vxlan來打通所有的物理節(jié)點。好吧,概念是一樣的,但是也不一樣。

很多人都會比較,docker和openstack哪個好,我覺得本身他們不是相互取代的,而是共同配合來完成復(fù)雜的應(yīng)用部署。單個應(yīng)用無所謂你用什么,對吧。我說的概念是一樣的,在網(wǎng)絡(luò)層面,他們都是通過port連接到bridge上面,只不過ovs的bridge高級一點。但是有一點不一樣,我們通常在跑虛擬化環(huán)境的時候,會心里有個數(shù)字,就是一臺物理機上跑多少虛機。跑20個,50個或者100個,這個是根據(jù)應(yīng)用,在部署之前心里就會知道個大概。但是docker管理的是容器,它沒有虛擬機里面OS的那層開銷或者說很小,所以,一臺物理機跑1000個容器也是有可能的,估計群里有的朋友試過。這就對網(wǎng)絡(luò)本身提出了很大的挑戰(zhàn)

本來我家里的無線路由器只要和我的電腦打交道,結(jié)果這哥們帶了一堆設(shè)備回來,現(xiàn)在連個手表都要IP地址,那么端口一下多了,網(wǎng)絡(luò)就瓶頸了。那么在一臺物理機跑很多容器的情況下,我們實際上不一定需要為每個容器都分配一個ip地址。docker可以讓我們?nèi)萜髦g共享網(wǎng)絡(luò)。也就是一個veth被N個容器來使用。

如果docker之下還有其他的cloud環(huán)境,例如AWS,GCE或者OpenStack的話,我們可以把docker的節(jié)點限定為一個應(yīng)用,這個應(yīng)用的stack,可以共用一個網(wǎng)絡(luò)環(huán)境。我們可以docker run --net=xxx或者docker run --net=host來指定容器的網(wǎng)絡(luò)環(huán)境,這樣用來減輕ovs管理多個網(wǎng)絡(luò)的鴨梨。這個是從單個host的視角來看的。

那么如果還是覺得這樣比較麻煩。那么就把這個事情交給它上面的管理系統(tǒng)去做。比如說k8s,它把你的應(yīng)用做成pod,然后通過service去發(fā)布,這個我不細說了。丟個圖:

 SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

可以在一個pod里面共享一些基礎(chǔ)資源,例如網(wǎng)絡(luò)和存儲,service的話,就是讓多個pod來做fail over或者LB了。

 SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

使用OVS的話,就是:

 SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

#p#

所以,因為容器比較輕量級,而且對系統(tǒng)的依賴不強,所以到是比虛擬機更加靈活一點。我們做網(wǎng)絡(luò)管理的時候,如果是跟虛擬機打交道,我們得考慮它的管理平臺是什么,這就是OpenStack Neutron給我們帶來的一些困擾。它很靈活,但是我們得遵守它的規(guī)則來玩。我們選擇好了一個Cloud Platform,才對網(wǎng)絡(luò)做針對的設(shè)計和部署。而Docker的話,我們可以先設(shè)計好網(wǎng)絡(luò),比如我們就是用ODL這些OF Controller來管理了一堆設(shè)備,然后把這些設(shè)備下連接的X86 Server里面的OVS打通,然后隨便里面跑哪些業(yè)務(wù),這些業(yè)務(wù)也可以很方便的去做數(shù)據(jù)路徑的管理。甚至做好可視化。因為docker相對來說,還是比較透明的,不像Neutron里面的tenant network。

在Docker里面,不管使用bridge還是ovs,主要還是通過namespace在進程里面附加到網(wǎng)絡(luò)上。docker0比較簡單,就是通過 L2/MAC地址學(xué)習(xí)來進行數(shù)據(jù)包的交換,其實就是在kernel里面做數(shù)據(jù)包轉(zhuǎn)發(fā)。那么docker用了很多l(xiāng)inux本身的東西來進行更上一層的管理。比如使用iptable,它為每個容器分配了一個172.xxxx的地址,然后把這段地址里面的轉(zhuǎn)發(fā)都做了masquerade,所以,容器不需要做網(wǎng)絡(luò)的配置,直接可以訪問到外部網(wǎng)絡(luò)。所以docker里面的ip地址的翻譯完全是通過iptable中的SNAT,DNAT來實現(xiàn)。

你原來如果用的docker0,那么部署weave的話,可以直接來用。剛才說到docker本身的網(wǎng)絡(luò),那么就是基于這個基礎(chǔ)上面, 我們可以做進一步的延伸,不能每次都手動的--net是吧。所以現(xiàn)在有很多docker的編排系統(tǒng),例如k8s,messos這些。這些工具里面可以有多個網(wǎng)絡(luò)管理的選擇。特別提一下的是libnetwork,這個東西是docker搞出來的,所以直接集成到docker cli里面了。類似neutron一樣,通過命令,直接來管理租戶網(wǎng)絡(luò)。除了這個,還有剛才提到的weave, flannel, socketplane等等。當(dāng)然,你也可以把容器直接連到ovs上,讓上面的controller來管理,這就是說docker的網(wǎng)絡(luò)其實還是比較靈活的,部署的方案會比較多,我也沒有一一試過,用的幾本上就是k8s + flannel,要么就是在openstack上面讓neutron去管理網(wǎng)絡(luò),docker作為計算節(jié)點,或者更近一步的,大師兄研究過,使用 openstack的magnum來管理像k8s這樣的編排工具。那會比較復(fù)雜,我比較喜歡weave是因為我的應(yīng)用沒那么復(fù)雜,所以docker0足夠了。因為我也沒錢去做一個公有云,讓很多人來用。這點我倒是覺得daocloud做的挺好,因為管理應(yīng)用,做CICD比較簡單和方便。

說說用docker遇到的問題吧,docker目前遇到的網(wǎng)絡(luò)問題真不是特別多,因為大家很多還是拿docker來做開發(fā)測試平臺。

更多的是layered fs的問題。不過既然docker0更簡單,它是不是應(yīng)該性能更好?更多的是layered fs的問題。不過既然docker0更簡單,它是不是應(yīng)該性能更好?

 SDN實戰(zhàn)分享:Docker網(wǎng)絡(luò)使用體驗

如果我們使用的是docker run -P 8080:8080 ,會在iptable里面生成一條規(guī)則。從這個report的chart來看,它實際上延時比kvm的還高。

Report地址:http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf

這是IBM的一個報告,關(guān)心docker performance的朋友可以用來做一個參考,實際上,我現(xiàn)在試驗性的把openstack里面的一些服務(wù)跑在容器里,就是用—net=host這種方式來跑的,這其實比較適合一個docker host跑一個app stack,在管理應(yīng)用的時候盡量把app stack部署在一個host上。然后多部署幾臺主機用LB的方式來發(fā)布。如果用docker0的話,還可以讓容器跑在privileged模式下。然后通過lso, lro來做offload。

今天就主要從網(wǎng)絡(luò)的角度來分享一下docker的使用心得。接下來可以自由發(fā)揮。我能力有限,在線回答不了的話,可以線下討論,我也可以順著大家的問題,多做些研究,下次分享。

Q&A

--------------------------------------------------------------------------------------------------

朱堅

Q1:現(xiàn)在Docker一般是直接部署在物理server上還是虛擬機上?如果是在虛機上部署Docker是不是又更復(fù)雜一些了?

A1:在物理機和虛擬機部署上面, 區(qū)別不大。

詼諧童子

Q2:針對IBM的report,在實際做網(wǎng)絡(luò)壓力測試的時候, docker的docker0其時沒有表現(xiàn)出它應(yīng)該有的能力,這個能力是指capacity還是performance?

A2:Performance

Q3:就是說docker0使用的時候performance不是最佳的對么?

A3:也不能這么說,只是說,它沒有我們認為的樣子好。它會對網(wǎng)絡(luò)的延時帶來一點影響,從剛才那個report的chart來看,它實際上延時比kvm的還高。

HongLiang

Q4:測試報告70多us是跨物理機,還是單機內(nèi)部?

A4:用的是2個機器,測試使用的是Mellanox ConnectX-2

肖何

Q5:如果使用docker的大使模式效果如何?通過幾個docker共享其中一個docker veth連接到docker0做proxy轉(zhuǎn)發(fā)?

A5:可以這么做,減少iptable的規(guī)則數(shù)量也對性能提升有一定的幫助。

Q6:關(guān)于跨主機的docker通信,有成熟的OVS上gre支持跨主機的通信,現(xiàn)在docker 1.8后引入SDN功能,通過控制器也能做到跨主機的vxlan互通了,這個有考慮嗎?

A6:當(dāng)然,ovs也是個不錯的選擇。特別是ovs 2.4增加了對docker網(wǎng)絡(luò)的injection的能力??梢栽谶\行時改變?nèi)萜骼锏木W(wǎng)絡(luò)

Q7:順著openstack我胡亂說一點,我覺得docker-server和OpenStack neutron-server好像有點接近,比如NAT/iptables這些,但在node agent,或者說分布路由上的思路上差異比較大

A7:docker更多是在本機做路由。但是也不局限于此。它本身也是可以被其他的L2方案來接管的

Q8:docker沒有l(wèi)2/l3 agent類似的plugin實現(xiàn),它bri-int(veth)不能把tap流量map更復(fù)雜的轉(zhuǎn)發(fā)組件(bri-tun/bri-ext)上,屬于初級的聚合;而要做分布式路由,docker-server沒有OF流表下發(fā)這套,上了規(guī)模后,東西向流量處理可能也會是瓶頸。

A8:可以用docker + ovs來解決,但是需要類似ODL這樣的controller來管理,比如引流到某個設(shè)備

Q9:給docker 直接分ip這個想法如何?

A9:google就認為ip is cheap,盡量分ip給pod

Q10:dock支持ipv6不?

A10:docker 1.5開始支持IPV6

--------------------------------------------------------------------------------------------------

SDN實戰(zhàn)團微信群由Brocade中國區(qū)CTO張宇峰領(lǐng)銜組織創(chuàng)立,攜手SDN Lab及海內(nèi)外SDN/NFV/云計算產(chǎn)學(xué)研生態(tài)系統(tǒng)相關(guān)領(lǐng)域?qū)崙?zhàn)技術(shù)牛,每周都會組織定向的技術(shù)及業(yè)界動態(tài)分享,歡迎感興趣的同學(xué)加微信:eigenswing,進群參與,您有想聽的話題可以給我們留言。

責(zé)任編輯:Ophira 來源: SDNLab
相關(guān)推薦

2013-12-09 09:13:44

華為SDN融合

2014-12-03 09:41:13

SDNSDN安全SDN網(wǎng)絡(luò)

2013-10-21 10:24:38

SDN實踐科研

2013-10-08 14:04:51

SDN軟件定義網(wǎng)絡(luò)

2013-10-10 09:29:35

OpenFlowSDN

2015-08-03 09:49:24

2013-12-03 15:38:45

SDN疊加網(wǎng)絡(luò)Overlay

2012-08-15 14:11:21

2015-02-10 10:54:45

2015-08-21 17:35:26

2015-12-11 14:29:50

2016-05-11 10:31:33

SDN傳統(tǒng)網(wǎng)絡(luò)

2018-10-30 12:15:26

CDN網(wǎng)絡(luò)技巧

2013-03-19 12:45:31

SDN網(wǎng)絡(luò)架構(gòu)網(wǎng)絡(luò)虛擬化

2015-06-15 11:33:11

SDN網(wǎng)絡(luò)虛擬化

2015-08-17 13:14:52

SDN網(wǎng)絡(luò)加速虛擬化

2023-06-14 15:56:15

2014-03-05 10:08:11

SDN技術(shù)SDN軟件定義網(wǎng)絡(luò)

2017-03-16 16:06:19

SDNNFV網(wǎng)絡(luò)

2020-05-21 07:00:00

軟件定義網(wǎng)絡(luò)SDN網(wǎng)絡(luò)
點贊
收藏

51CTO技術(shù)棧公眾號