真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker

本篇內(nèi)容主要講解“如何利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“如何利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker”吧!

成都創(chuàng)新互聯(lián)是少有的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型企業(yè)網(wǎng)站、微信小程序開(kāi)發(fā)、手機(jī)APP,開(kāi)發(fā)、制作、設(shè)計(jì)、外鏈、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,于2013年成立,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)

安裝
docker

無(wú)需多言,遵循提供的指南就行。稍后我們將深入其配置,以便運(yùn)行于服務(wù)器上的不同docker服務(wù)可相互協(xié)作。
openvswitch

糟糕的是,默認(rèn)倉(cāng)庫(kù)里openvswitch安裝包不可用(或過(guò)期了),我們需要自己構(gòu)建.deb文件(一次),然后分發(fā)給不同主機(jī)。為了保持生產(chǎn)機(jī)的整潔,可另外找臺(tái)小主機(jī)來(lái)安裝開(kāi)發(fā)包,并構(gòu)建安裝包。

執(zhí)行下列命令來(lái)構(gòu)建安裝包(新版請(qǐng)按要求修改):

#獲取最新存檔
wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gz
tar xzvf openvswitch-2.3.1.tar.gz
cd openvswitch-2.3.1

#安裝依賴(lài)
sudo apt-get install -y build-essential fakeroot debhelper \
          autoconf automake bzip2 libssl-dev \
          openssl graphviz python-all procps \
          python-qt4 python-zopeinterface \
          python-twisted-conch libtool

# 構(gòu)建(不使用并行檢查)
deb_build_options='parallel=8 nocheck' fakeroot debian/rules binary

# 得到最新deb文件并復(fù)制到某處
cd ..
ls -al *deb


現(xiàn)在你有了新的.deb安裝包,接下來(lái)將其推送并安裝到所有主機(jī)上。

# 復(fù)制包到各主機(jī)并ssh登錄
scp -r *deb user@remote_host:~/.
ssh user@remote_host

# 安裝一些依賴(lài)(后面需要)并安裝包
sudo apt-get install -y bridge-utils
sudo dpkg -i openvswitch-common_2.3.1-1_amd64.deb \
     openvswitch-switch_2.3.1-1_amd64.deb

 
配置
網(wǎng)絡(luò)

你可以使用openvswitch提供的不同命令行工具來(lái)構(gòu)建網(wǎng)狀網(wǎng)絡(luò)(比如ovs-vsctl),不過(guò)ubuntu提供了一個(gè)輔助工具讓你可以通過(guò)/etc/network/interfaces文件定義網(wǎng)絡(luò)。

假定三臺(tái)主機(jī):1.1.1.1、2.2.2.2和3.3.3.3,可以通過(guò)上述ip相互ping通,它們是在公網(wǎng)或內(nèi)網(wǎng)上并不重要。host1的/etc/network/interfaces大概如下。

...
# eth0、eth1和lo配置
...

# auto:為了有效地在主機(jī)啟動(dòng)時(shí)啟動(dòng)它
# br0=br0:防止在`ifquery --list`時(shí)被找到
auto br0=br0
allow-ovs br0
iface br0 inet manual
ovs_type ovsbridge
ovs_ports gre1 gre2
ovs_extra set bridge ${iface} stp_enable=true
mtu 1462

# 沒(méi)有auto,這是ovs的一個(gè)額外配置
# 兩臺(tái)主機(jī)的gre名字必須相符
allow-br0 gre1
iface gre1 inet manual
ovs_type ovsport
ovs_bridge br0
ovs_extra set interface ${iface} type=gre options:remote_ip=2.2.2.2

allow-br0 gre2
iface gre2 inet manual
ovs_type ovsport
ovs_bridge br0
ovs_extra set interface ${iface} type=gre options:remote_ip=3.3.3.3

# auto:?jiǎn)?dòng)時(shí)創(chuàng)建
# 定義docker要使用的docker0,并(在可用時(shí))連接到到openvswitch創(chuàng)建的br0網(wǎng)橋上
# 每臺(tái)主機(jī)需要使用不同的ip地址(不要相互沖突?。?
auto docker0=docker0
iface docker0 inet static
address 172.17.42.1
network 172.17.0.0
netmask 255.255.0.0
bridge_ports br0
mtu 1462


在其它主機(jī)上要對(duì)這個(gè)配置上做些調(diào)整:remote_ip的ip地址要相互配對(duì)。

幾點(diǎn)說(shuō)明:

  •     生成樹(shù)協(xié)議(spanning tree protocol):如果應(yīng)用該配置,將在3臺(tái)服務(wù)器中創(chuàng)建一個(gè)網(wǎng)絡(luò)回路,這可不行。給br0網(wǎng)橋添加stp_enable=true將確保一些gre隧道被切斷。同時(shí)確保網(wǎng)狀網(wǎng)絡(luò)的冗余,允許網(wǎng)絡(luò)在其中一臺(tái)主機(jī)下線時(shí)恢復(fù)。

  •     mtu:這是一項(xiàng)關(guān)鍵設(shè)定!沒(méi)有這項(xiàng),你可能獲得一些意外“驚喜”:網(wǎng)絡(luò)看起來(lái)工作正常(比如可以ping),但無(wú)法支持大數(shù)據(jù)包(比如bw測(cè)試中的iperf、大數(shù)據(jù)量請(qǐng)求或簡(jiǎn)單的文件復(fù)制)。注意,gre隧道需要封裝多種協(xié)議:

  •         以太網(wǎng):14字節(jié)——我們說(shuō)的是網(wǎng)橋間的第2層;

  •         ipv4:20字節(jié)——容器/主機(jī)間通訊;

  •         gre:4字節(jié)——因?yàn)椋?,這是個(gè)gre隧道;

  •         也就是物理網(wǎng)卡mtu減去38字節(jié),結(jié)果是1462(基于常規(guī)的1500 mtu網(wǎng)卡)。

  •     在auto定義中使用“=”:對(duì)于具有固定ip的服務(wù)器這不是必需的,但有些云服務(wù)商(這里就不說(shuō)是誰(shuí)了……digital ocean(譯者:軟廣再次亂入))使用了一個(gè)依靠ifquery --list --allow auto的init服務(wù)(/etc/init/cloud-init-container.conf)。不加上“=”號(hào)將包含openvswitch網(wǎng)卡,并延遲整個(gè)啟動(dòng)過(guò)程直到init腳本失敗并超時(shí)。

  •     docker0網(wǎng)橋:每臺(tái)服務(wù)器都需要自己的ip地址(比如172.17.42.1、172.17.42.2)。由于docker0網(wǎng)橋處在br0網(wǎng)橋之上,它們將(也應(yīng)該?。┛梢韵嗷ミB接。想象一下,要解決ip沖突會(huì)有多亂……這也是為什么我們要在啟動(dòng)時(shí)定義它,而不依賴(lài)docker服務(wù)來(lái)為我們創(chuàng)建這個(gè)網(wǎng)橋。

  •     gre隧道:你可以從gre0(而不是gre1)開(kāi)始,它能完美工作。但由于某種原因,在輸入ifconfig時(shí)你可以看到gre0,卻看不到其他隧道。這可能是gre0作為的一個(gè)副作用。從gre1開(kāi)始將讓所有的gre隧道對(duì)ifconfig“隱身”(好過(guò)于只能看見(jiàn)一個(gè))。別著急,你還是可以使用ovs-vsctl命令顯示隧道/網(wǎng)橋。

  •     3臺(tái)以上主機(jī):你可以遵循相同的邏輯,并且:

  •         添加額外的隧道(iface grex)來(lái)連接新主機(jī)。

  •         在br0網(wǎng)橋定義中更新ovs_ports以包含interfaces文件中定義的所有g(shù)re隧道。

  •         聰明點(diǎn)……不要將每臺(tái)服務(wù)器跟其他主機(jī)一一鏈接……stp收斂(convergence)將需要更長(zhǎng)的時(shí)間,并且無(wú)法提供任何除了多重額外鏈路冗余之外的有用價(jià)值。


如果現(xiàn)在重啟服務(wù)器,你將擁有一個(gè)具備冗余的網(wǎng)狀網(wǎng)絡(luò),你可以運(yùn)行以下命令來(lái)測(cè)試:

  •     從host1上ping 172.17.42.2或其他ip;

  •     在主機(jī)上運(yùn)行iperf,通過(guò)ifconfig查看使用中的鏈接;

  •     在ping第三臺(tái)主機(jī)時(shí)停止“中間”那臺(tái),查看網(wǎng)絡(luò)收斂(通過(guò)stp)時(shí)ping中斷了幾秒鐘。

docker

我們現(xiàn)在有了一個(gè)完善的網(wǎng)絡(luò),每個(gè)docker服務(wù)都可以將它們的容器掛接到docker0網(wǎng)橋上。讓docker自動(dòng)完成這步不是很棒么?答案在于docker有能力分配一個(gè)最小的ip地址池!

對(duì)于該示例,我們假定:

  •     每臺(tái)主機(jī)(1.1.1.1、2.2.2.2、3.3.3.3)掛接到前面創(chuàng)建的docker0網(wǎng)橋上,其各自的ip地址是172.17.42.1、172.17.42.2、172.17.42.3;

  •     給docker0網(wǎng)卡指定了一個(gè)/16的ip范圍;

  •     給每臺(tái)主機(jī)指定了一小塊docker0的ip范圍,以/18 fixed-cidr的形式保存在它們的docker服務(wù)配置中。分別是172.17.64.0/18、172.17.128.0/18、172.17.192.0/18。


如果你的主機(jī)多于3臺(tái),你需要細(xì)分一個(gè)每個(gè)范圍,或根據(jù)組織需要對(duì)整個(gè)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)進(jìn)行重新考慮。

host1的配置文件(/etc/default/docker)是這樣的:

bridge=docker0
cidr=172.17.64.0/18

wait_ip() {
address=$(ip add show $bridge | grep 'inet ' | awk '{print $2}')
[ -z "$address" ] && sleep $1 || :
}

wait_ip 5
wait_ip 15

docker_opts="
-h unix:///var/run/docker.sock
-h tcp://0.0.0.0:2375
--fixed-cidr=$cidr
--bridge $bridge
--mtu 1462
"


你可以根據(jù)需要修改docker_opts配置,添加鏡像、不安全的registry、DNS等等。

說(shuō)明:

  •     wait_ip:由于docker0網(wǎng)橋最后被創(chuàng)建,獲取ip地址可能需要花點(diǎn)時(shí)間。使用wait_ip“功能”,你可以在返回docker init腳本前安全地等待幾秒鐘。該配置文件是被真正的init腳本(/etc/init/docker.conf)所引用。

  •     mtu:與前面相同原因,只是一個(gè)預(yù)防措施,用于確保每個(gè)網(wǎng)卡被創(chuàng)建時(shí)會(huì)被指定正確的mtu。

  •     -h tcp://……:如果你不想通過(guò)0.0.0.0將其“公開(kāi)”(或綁定到服務(wù)器“真實(shí)”網(wǎng)卡之一),你也可以將它安全地綁定到……該主機(jī)的docker0 ip地址(比如172.17.42.2)!這樣,你可以從任何一臺(tái)主機(jī)訪問(wèn)到私有網(wǎng)狀網(wǎng)絡(luò)里的任何一個(gè)docker服務(wù)。

結(jié)語(yǔ)

重啟一下(至少保證啟動(dòng)時(shí)所有東西都會(huì)自動(dòng)上線)。

你可以試試以下命令看看一切是否正常。

# 訪問(wèn)host1
ssh user@host1

# 運(yùn)行一個(gè)新容器
docker run -ti ubuntu bash

# 檢查ip(在容器內(nèi)運(yùn)行)
ip add | grep eth0


#
# 在其他窗口中
#
# 訪問(wèn)另一臺(tái)主機(jī)(host2或3)
ssh user@host2

# 運(yùn)行一個(gè)新容器
docker run -ti ubuntu bash

# ping其他的容器!
ping $ip

到此,相信大家對(duì)“如何利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


本文名稱(chēng):如何利用OpenVSwitch在多臺(tái)主機(jī)上部署Docker
網(wǎng)頁(yè)網(wǎng)址:http://weahome.cn/article/jhhgjp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部