北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>
                企业空间 推销商城 存储论坛
                北京快三开奖全闪存阵列 IBM云盘算 Acronis 安克诺斯 安腾普 腾保数据
                首页 > 技能园地 > Docker > 注释

                应用OpenVSwitch构建多主机Docker网络

                2015-03-30 00:00泉源:DockerOne
                导读:在你实验种种方案时无妨先看看该篇文章,大概就会恍然大悟,发明原来也不庞大.嗯,是的,该篇文章用到了OpenVSwitch.

                当你在一台主机上乐成运转Docker容器后,决心满满地计划将其扩展到多台主机时,却发明后面的实验只相称于写了个Hello World的入门顺序,多主机的网络设置成了下一道门槛。在你实验种种方案时无妨先看看该篇文章,大概就会恍然大悟,发明原来也不庞大。嗯,是的,该篇文章用到了OpenVSwitch。

                运转Docker曾经不是什么新颖事,网上有许多入门教程来协助你在一台主机上运转容器。这台主机可以是Linux效劳器,也可以是Mac(借助相似boot2docker的项目)。

                在多台主机上运转倒是别的一回事……

                可选方案:

                • 辨别在每台主机上运转Docker,在公网或内网网卡上表露端口以便容器间互相通讯。这能够比拟费事,并且会引发平安题目。
                • 运转相似Weave的两头层方案来完全地笼统网络。这个项现在景不错,不外还太年老,尚未与compose(之前的fig)或maestro-ng这类编排东西整合。
                • 运转相似Deis或Flynn的Docker多主机一站式方案。这能够不在你的思索范畴内。
                • 在主机间的网状网络中创立一个共享网桥,让Docker效劳在那运转容器。这听起来有点庞大,不外……该篇文章中我们将看到这可以十分容易地完成!
                应用OpenVSwitch构建多主机Docker网络

                概述

                根本上,我们将实行以下步调:

                • 在每台效劳器上装置Docker;
                • 在每台效劳器上装置OpenVSwitch;
                • 自界说网络设置用以主动在主机间创立网桥/隧道(在每台效劳器的/etc/network/interfaces里);
                • 自界说每个Docker效劳设置装备摆设,只处置docker0 IP范畴的一小局部,避免新容器的IP地点发作堆叠。

                便是如许。重启效劳或重启效劳器后,你将取得一个具有衔接冗余(link redundancy)的全网状网络,Docker效劳可以在公用的IP范畴(不会堆叠)上运转容器,而且不需求在公网或内网网卡上表露一切端口就能互联。很棒,对么?

                技能

                复杂列一下我们用到的技能:

                • Docker:嗯……这是篇关于Docker与网络的文章,以是……
                • OpenVSwitch:十分棒的假造网络交流机项目,伸缩性十分好,依据本指南,你可以运转“恣意”范围的网络。

                我们将假定效劳器运转的是Ubuntu Server 14.04.02 LTS x64,关于别的零碎,你能够需求修正上面提供的各项设置装备摆设。

                装置

                Docker

                无需多言,遵照官网提供的指南就行。稍后我们将深化其设置装备摆设,以便运转于效劳器上的差别Docker效劳可互相协作。

                OpenVSwitch

                蹩脚的是,默许堆栈里OpenVSwitch装置包不行用(或过时了),我们需求本人构建.deb文件(一次),然后分发给差别主机。为了坚持消费机的整齐,可别的找台小主机来装置开辟包,并构建装置包。

                OpenVSwitch GitHub上有细致的构建手册。

                实行下列下令来构建装置包(新版请按要求修正):

                Shell
                123456789101112131415161718 #获取最新存档wget http://openvswitch.org/releases/openvswitch-2.3.1.tar.gztar xzvf openvswitch-2.3.1.tar.gzcd openvswitch-2.3.1 #装置依赖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 # 构建(不运用并行反省)DEB_BUILD_OPTIONS='parallel=8 nocheck' fakeroot debian/rules binary # 失掉最新deb文件并复制到某处cd ..ls -al *deb

                如今你有了新的.deb装置包,接上去将其推送并装置到一切主机上。

                Shell
                12345678 # 复制包到各主机并ssh登录scp -r *deb user@remote_host:~/.ssh user@remote_host # 装置一些依赖(前面需求)并装置包sudo apt-get install -y bridge-utilssudo dpkg -i openvswitch-common_2.3.1-1_amd64.deb \openvswitch-switch_2.3.1-1_amd64.deb

                设置装备摆设

                网络

                你可以运用OpenVSwitch提供的差别下令行东西来构建网状网络(比方ovs-vsctl),不外Ubuntu提供了一个辅佐东西让你可以经过/etc/network/interfaces文件界说网络。

                假定三台主机:1.1.1.1、2.2.2.2和3.3.3.3,可以经过上述IP互相ping通,它们是在公网或内网上并不紧张。host1的/etc/network/interfaces大约如下。

                Shell
                12345678910111213141516171819202122232425262728293031323334353637 ...# eth0、eth1和lo设置装备摆设...# auto:为了无效地在主机启动时启动它# br0=br0:避免在`ifquery --list`时被找到auto br0=br0allow-ovs br0iface br0 inet manualovs_type OVSBridgeovs_ports gre1 gre2ovs_extra set bridge ${IFACE} stp_enable=truemtu 1462 # 没有auto,这是ovs的一个额定设置装备摆设# 两台主机的gre名字必需符合allow-br0 gre1iface gre1 inet manualovs_type OVSPortovs_bridge br0ovs_extra set interface ${IFACE} type=gre options:remote_ip=2.2.2.2 allow-br0 gre2iface gre2 inet manualovs_type OVSPortovs_bridge br0ovs_extra set interface ${IFACE} type=gre options:remote_ip=3.3.3.3 # auto:启动时创立# 界说docker要运用的docker0,并(在可用时)衔接到到OpenVSwitch创立的br0网桥上# 每台主机需求运用差别的IP地点(不要互相抵触!)auto docker0=docker0iface docker0 inet staticaddress 172.17.42.1network 172.17.0.0netmask 255.255.0.0bridge_ports br0mtu 1462

                在别的主机上要对这个设置装备摆设上做些调解:remote_ip的IP地点要互相配对。

                应用OpenVSwitch构建多主机Docker网络

                几点阐明:
                1. 天生树协议(Spanning Tree Protocol):假如使用该设置装备摆设,将在3台效劳器中创立一个网络回路,这可不可。给br0网桥添加stp_enable=true将确保一些gre隧道被堵截。同时确保网状网络的冗余,容许网络在此中一台主机下线时规复。

                2. MTU:这是一项要害设定!没有这项,你能够取得一些不测“惊喜”:网络看起来任务正常(比方可以ping),但无法支持大数据包(比方BW测试中的iperf、大数据量恳求或复杂的文件复制)。留意,GRE隧道需求封装多种协议:

                • 以太网:14字节——我们说的是网桥间的第2层;
                • IPv4:20字节——容器/主机间通讯;
                • GRE:4字节——由于,嗯,这是个GRE隧道;
                • 也便是物理网卡MTU减去38字节,后果是1462(基于惯例的1500 MTU网卡)。

                3. 在auto界说中运用“=”:关于具有牢固IP的效劳器这不是必须的,但有些云效劳商(这里就不说是谁了……Digital Ocean(译者:软广再次乱入))运用了一个依托ifquery --list --allow auto的init效劳(/etc/init/cloud-init-container.conf)。不加上“=”号将包括OpenVSwitch网卡,并耽误整个启动进程直到init剧本失败并超时。

                4. docker0网桥:每台效劳器都需求本人的IP地点(比方172.17.42.1、172.17.42.2)。由于docker0网桥处在br0网桥之上,它们将(也应该!)可以互相衔接。想象一下,要处理IP抵触会有多乱……这也是为什么我们要在启动时界说它,而不依赖docker效劳来为我们创立这个网桥。

                5. GRE隧道:你可以从gre0(而不是gre1)开端,它能完满任务。但由于某种缘由,在输出ifconfig时你可以看到gre0,却看不到其他隧道。这能够是gre0作为假造网卡的一个反作用。从gre1开端将让一切的gre隧道对ifconfig“隐身”(好过于只能瞥见一个)。别焦急,你照旧可以运用ovs-vsctl下令表现隧道/网桥。

                6. 3台以上主机:你可以遵照相反的逻辑,而且:

                • 添加额定的隧道(iface greX)来衔接新主机。
                • 在br0网桥界说中更新ovs_ports以包括interfaces文件中界说的一切gre隧道。
                • 智慧点……不要将每台效劳器跟其他主机逐个链接……STP收敛(convergence)将需求更长的工夫,而且无法提供任何除了多重额定链路冗余之外的有效代价。

                假如如今重启效劳器,你将拥有一个具有冗余的网状网络,你可以运转以下下令来测试:

                • 从host1上ping 172.17.42.2或其他IP;
                • 在主机上运转iperf,经过ifconfig检查运用中的链接;
                • 在ping第三台主机时中止“两头”那台,检查网络收敛(经过STP)时ping中缀了几秒钟。
                应用OpenVSwitch构建多主机Docker网络

                Docker

                我们如今有了一个美满的网络,每个Docker效劳都可以将它们的容器挂接到docker0网桥上。让Docker主动完成这步不是很棒么?答案在于Docker有才能分派一个最小的IP地点池!

                关于该示例,我们假定:

                • 每台主机(1.1.1.1、2.2.2.2、3.3.3.3)挂接到后面创立的docker0网桥上,其各自的IP地点是172.17.42.1、172.17.42.2、172.17.42.3;
                • 给docker0网卡指定了一个/16的IP范畴;
                • 给每台主机指定了一小块docker0的IP范畴,以/18 fixed-cidr的方式保管在它们的docker效劳设置装备摆设中。辨别是172.17.64.0/18、172.17.128.0/18、172.17.192.0/18。

                假如你的主机多于3台,你需求细分一个每个范畴,或依据构造需求对整个网络拓扑构造停止重新思索。

                应用OpenVSwitch构建多主机Docker网络

                host1的设置装备摆设文件(/etc/default/docker)是如许的:

                Shell
                123456789101112131415161718 BRIDGE=docker0CIDR=172.17.64.0/18 wait_ip() {address=$(ip add show $BRIDGE | grep 'inet ' | awk '{print $2}')[ -z "$address" ] && sleep $1 || :} wait_ip 5wait_ip 15 DOCKER_OPTS="-H unix:///var/run/docker.sock-H tcp://0.0.0.0:2375--fixed-cidr=$CIDR--bridge $BRIDGE--mtu 1462"

                你可以依据需求修正DOCKER_OPTS设置装备摆设,添加镜像、不平安的registry、DNS等等。

                阐明:

                • wait_ip:由于docker0网桥最初被创立,获取IP地点能够需求花点工夫。运用wait_ip“功用”,你可以在前往docker init剧本前平安地等候几秒钟。该设置装备摆设文件是被真正的init剧本(/etc/init/docker.conf)所援用。
                • mtu:与后面相反缘由,只是一个防备步伐,用于确保每个网卡被创立时会被指定准确的MTU。
                • -H tcp://……:假如你不想经过0.0.0.0将其“地下”(或绑定到效劳器“真实”网卡之一),你也可以将它平安地绑定到……该主机的docker0 IP地点(比方172.17.42.2)!如许,你可以从任何一台主机拜访到公有网状网络里的任何一个docker效劳。

                结语

                重启一下(至多包管启动时一切工具都市主动上线)。

                你可以尝尝以下下令看看统统能否正常。

                Shell
                1234567891011121314151617181920 # 拜访host1ssh user@host1 # 运转一个新容器docker run -ti ubuntu bash # 反省IP(在容器内运转)ip add | grep eth0 ## 在其他窗口中## 拜访另一台主机(host2或3)ssh user@host2 # 运转一个新容器docker run -ti ubuntu bash # Ping其他的容器!ping $IP

                这不是一份指点怎样在多主机上设置Docker的威望指南,欢送各人提出批判(译者注:译稿也一样,请各人多多指正)。许多想法是在全体装置时发生的,该篇文章尽能够细致地阐明了为何选择这个或谁人选项。

                假如将分级网桥、VLAN等包罗出去,事变将更庞大,不外那凌驾了该篇文章的范畴。;)

                显然,更完好的网络是有需求的,并且看起来这个曾经在开辟中。

                参考内容

                • http://goldmann.pl/blog/2014/ ... osts/
                • http://networkstatic.net/open- ... tion/
                • http://networkstatic.net/confi ... itch/
                • http://fbevmware.blogspot.com. ... .html
                • http://openvswitch.org/support ... .html
                • http://access.redhat.com/docu ... .html
                • http://communities.vmware.com ... ation
                • http://www.microhowto.info/tro ... .html
                • http://blog.scottlowe.org/2013 ... itch/
                • http://blog.scottlowe.org/2013 ... itch/
                • http://github.com/openvswitch ... an.md
                • http://baturin.org/tools/encapcalc/


                转载自:DockerOne

                持续阅读
                要害词 :
                Docker SDN容器网络
                中国存储网声明:此文观念不代表本站态度,若有版权疑问请联络我们。
                相干阅读
                产物引荐

                头条阅读
                栏目热门

                Copyright @ 2006-2019 ChinaStor.COM 版权一切 京ICP备14047533号

                中国存储网

                存储第一站,存储流派,存储在线交换平台