zoukankan      html  css  js  c++  java
  • docker使用flannel网络

    基础环境我们使用了两台centos 7系统

    基础配置为:

    两台机器IP为

    172.17.3.10

    172.17.3.62

    hosts文件配置为

    172.17.3.10 node1

    172.17.3.62 node2

    两台均配置为这样

    开启内核ipv4转发功能

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

    sysctl -p

    清除iptables底层默认规则,并开启允许转发功能

    iptables -P INPUT ACCEPT

    iptables -P FORWARD ACCEPT

    iptables -F

    iptables -L -n

    最后关闭selinux,更改机器主机名,等等,完毕后重启下机器,至此我们前期准备工作已完毕。

    需要安装的组件为:

    1,etcd

    2,flannel

    3,docker

    安装步骤:

    安装etcd,我们采用了yum方式安装

    yum install -y epel-release

    yum make cache fast

    yum  install etcd -y

    至此我们的etcd安装完成。

    安装flannel

    yum install flannel -y

    最后我们再安装docker

    yum install -y yum-utils.noarch  ###安装yum的扩张工具集

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ####添加docker-ce的扩展源

    yum install -y --setopt=obsoletes=0 docker-ce-17.03.3.ce-1.el7 ####安装docker-ce

    最后docker-ce安装完成,我们一定要注意安装顺序,先安装etcd和flannel最后安装docker.

    下面我们来配置这3个组件

    首先配置etcd集群

    更改两台机器的上的etcd配置文件

    vim /etc/etcd/etcd.conf

    ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ####数据存放位置
    ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380" ####监听其他etcd实列地址
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001" ####监听客户端地址
    ETCD_NAME="node1" ####节点名称
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node1:2380"  ####通知其他成员的etcd地址
    ETCD_ADVERTISE_CLIENT_URLS="http://node1:2379,http://node1:4001"  ### #通知客户端地址
    ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380" ###初始化集群内节点地址
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"  ##初始化集群的token
    ETCD_INITIAL_CLUSTER_STATE="new"  ##初始化集群状态,new表示新建

    以上是etcd集群的配置上面是node1的配置,node2配置和node1一样,只是需要把node1改为node2

    ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
    ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
    ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
    ETCD_NAME="node2"
    ETCD_INITIAL_ADVERTISE_PEER_URLS="http://node2:2380"
    ETCD_ADVERTISE_CLIENT_URLS="http://node2:2379,http://node2:4001"
    ETCD_INITIAL_CLUSTER="node1=http://node1:2380,node2=http://node2:2380"
    ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
    ETCD_INITIAL_CLUSTER_STATE="new"

    最后我们启动etcd,并查看其集群状态

    systemctl start etcd

    设置为开机启动

    systemctl enable etcd

    查看启动状态

    systemctl status etcd

    需要注意的是,必须两台机器的etcd实列都起来集群才能正常建立,这点务必要注意

    查看下etcd集群的状态

    etcdctl member list

    我们的etcd集群目前可以使用了,暂时到这里

    接下来我们配置flannel

    两台配置一致

    编辑flannel的配置文件,内容如下

    vim /etc/sysconfig/flanneld

    # Flanneld configuration options  
    
    # etcd url location.  Point this to the server where etcd runs
    FLANNEL_ETCD_ENDPOINTS="http://172.17.3.10:2379,http://172.17.3.62:2379"  #####etcd集群的地址,包括各个成员
    
    # etcd config key.  This is the configuration key that flannel queries
    # For address range assignment
    FLANNEL_ETCD_PREFIX="/atomic.io/network"  ####自定义的子网目录,一定要和添加到etcd的子网目录一致
    
    # Any additional options that you want to pass
    #FLANNEL_OPTIONS=""
    FLANNEL_OPTIONS="--logtostderr=false --log_dir=/var/log/ --etcd-endpoints=http://172.17.3.10:2379,http://172.17.3.62:2379 --iface=ens32"  ####定义了日志级别,路径,以及etcd集群地址和绑定的屋里网卡信息

    再启动flannel之前需要向etcd内写入子网信息

    etcdctl  mk /atomic.io/network/config '{"Network":"10.10.0.0/16", "SubnetMin": "10.10.1.0", "SubnetMax": "10.10.254.0"}'

    上面的2处红色字体部分必须一致,可以自定义但是必须一致

    子网范围为 10.10.0.0/16,最小子网开始为10.10.1.0 最大子网结束为10.10.254.0,至此自定义子网信息我们已经写入完毕。

    接下来,我们来启动flannel,并设置为开机启动

    systemctl start flanneld

    systemctl enable flanneld

    systemctl status flanneld

    两台都启动后我们来配置docker

    可以发现的是在我们先安装flannel和etcd后最后安装docker后我们使用 sysetmctl show docker 将会发现 在安装flannel后自动生成配置

    DropInPaths=/usr/lib/systemd/system/docker.service.d/flannel.conf

    故在docker的systemd文件中应用对应变量 DOCKER_NETWORK_OPTIONS 即可

    vim /usr/lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd 
              $DOCKER_NETWORK_OPTIONS

    添加上述红色部分即可,引用了flannel的网络

    重载配置systemctl daemon-reload

    启动docker

    systemctl start docker

    然后我们来看两台物理机的网卡IP信息

    首先看node1的

    可以看到docker 0 的网桥已经使用flannel的网络段了

    node2也是如此

    目前两台物理机的docker 0 网络处于同一子网下面的都是使用的flannel的子网,是可以相互ping通的

    在node1上,ping node2的docker 0 网桥ip

    在node2上,ping node1的docker 0网桥ip

    是可以相互ping通的,那么两台物理机上容器也是可以互通的,我们分别在两台物理机上创建容器来测试下

    在node1创建一个容器,名字叫test,进入容器内部并查看ip

    我们来在容器内部ping下node2的docker 0网桥 IP

    是可以ping通的,没问题

    我们去node2上来ping node1上的容器的ip

    也是可以的

    我们node2上创建一个容器

    在容器内部去ping node1的docker 0 网桥IP

    是没有问题的

    来ping下node1上的容器的ip

    也是可以的,没有问题

    至此,docker使用flannel网络并实现互联互通完成。

    需要注意的几点要点:

    1,向etcd集群写入子网信息时候务必要注意建立的子网文件夹要和flannel的配置文件内一直。

    2,flannel的配置,etcd集群地址写正确,子网文件夹信息要和etcd写入一致

    3,系统iptables默认规则一定要清除,并开启允许转发

    4,确定下docker的网络是否被flannel接管,我们查看下docker的进程要确认下

    如果有类似如上信息就表示被接管成功。

  • 相关阅读:
    用css画三角形(提示框三角形)
    SpringMVC(2)之表单(非表单)参数绑定
    mvn jetty:run--编码GBK的不可映射字符
    Git命令及常见问题
    eclipse整合ssh框架基础
    css基础一(权重与position)
    sublime Text3下sass环境配置(windows)
    sublime Text3 设置多个浏览器预览
    初识iOS NSTimer 循环引用不释放问题
    ARC MARC 文件支持
  • 原文地址:https://www.cnblogs.com/hh2737/p/10168579.html
Copyright © 2011-2022 走看看