当前位置: 首页 » 综合知识 » it知识 » 正文

如何利用OpenVSwitch在多台主机上部署Docker

发布时间:2023-07-22 以下文章来源于网友投稿,内容仅供参考!

安装
docker

无需多言,遵循提供的指南就行。稍后我们将深入其配置,以便运行于服务器上的不同docker服务可相互协作。
openvswitch

糟糕的是,默认仓库里openvswitch安装包不可用(或过期了),我们需要自己构建.deb文件(一次),然后分发给不同主机。为了保持生产机的整洁,可另外找台小主机来安装开发包,并构建安装包。

执行下列命令来构建安装包(新版请按要求修改):

#获取最新存档
wget openvswitch.org/releases/openvswitch-2.3.1.tar.gz
tar xzvf openvswitch-2.3.1.tar.gz
cd 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安装包,接下来将其推送并安装到所有主机上。

# 复制包到各主机并ssh登录
scp -r *deb user@remote_host:~/.
ssh user@remote_host

# 安装一些依赖(后面需要)并安装包
sudo apt-get install -y bridge-utils
sudo dpkg -i openvswitchmon_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大概如下。

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

# auto:为了有效地在主机启动时启动它
# br0=br0:防止在`ifquery --list`时被找到
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

# 没有auto,这是ovs的一个额外配置
# 两台主机的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:启动时创建
# 定义docker要使用的docker0,并(在可用时)连接到到openvswitch创建的br0网桥上
# 每台主机需要使用不同的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


在其它主机上要对这个配置上做些调整:remote_ip的ip地址要相互配对。

几点说明:


如果现在重启服务器,你将拥有一个具备冗余的网状网络,你可以运行以下命令来测试:

docker

我们现在有了一个完善的网络,每个docker服务都可以将它们的容器挂接到docker0网桥上。让docker自动完成这步不是很棒么?答案在于docker有能力分配一个最小的ip地址池!

对于该示例,我们假定:


如果你的主机多于3台,你需要细分一个每个范围,或根据组织需要对整个网络拓扑结构进行重新考虑。

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
"


你可以根据需要修改docker_opts配置,添加镜像、不安全的registry、dns等等。

说明:

结语

重启一下(至少保证启动时所有东西都会自动上线)。

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

# 访问host1
ssh 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
  • • Linux Ecdsa密钥长度选择有何依据

    在Linux

  • • Linux Khook在内核监控中的应用如何

    Linux

  • • Linux Gsoap是否支持异步通信

    GSOAP是

  • • Linux Coremail如何提升用户体验

    提升Linu

  • • Linux Ecdsa算法有哪些局限性

    ECDSA

  • 哎呀音乐钢琴键盘学习《 钢琴主人训练营》 西瓜学琴
    郭蝈 陪练钢琴 30节课时 考级刚需 让孩子每一次练琴都是高质量的
    30天轻松学会五线谱 流行钢琴自学初级教程 牙牙学琴
    流行爵士钢琴实战技巧VIP课 - 继伟 哎呀音乐
    【海上钢琴师】原版 MT1990钢琴谱
    百首经典流行钢琴实战曲集 - 继伟
    雷费尔德电钢琴重锤88键专业考级儿童初学者数码电子钢琴家用
    小练咖 真人钢琴陪练 1v1服务 2999随时退 1课时50分钟 考级刚需
    雅马哈电钢琴88键重锤CLP735智能数码电子钢琴家用专业初学者考级
    【原装进口】Yamaha/雅马哈钢琴 b121 SC2原声静音钢琴
  • 珠海专业调钢琴
  • 天津宝坻区调钢琴
  • 天津静海区钢琴调音
  • 成都简阳市钢琴调律
  • 大连瓦房店市钢琴调音
  • 眉山调钢琴联系方式
  • 惠州大亚湾钢琴调琴师
  • 长治调琴师
  • 厦门湖里区钢琴调音师
  • 上海普陀区钢琴调音师