1、安装etcd

yum install etcdsystemctl stop etcd
systemctl start etcd
systemctl status etcd

查看etcd是否启动成功,etcd默认端口为2379
$ lsof -i:2379

测试etcd可用性
$ etcd --version
$ etcdctl mkdir /test
$ etcdctl ls /

2、安装flannel
$ wget https://github.com/coreos/flannel/releases/download/v0.5.5/flannel-0.5.5-linux-amd64.tar.gz
$ tar xvf flannel-0.5.5-linux-amd64.tar.gz
$ cd flannel-0.5.5
$ mv flanneld /usr/bin
$ mv mk-docker-opts.sh /usr/bin

启动flannel方法一:
$ flanneld &

查看flannel是否启动
$ ps -ef|grep flannel

启动flannel方法二(推荐):添加到systemd服务中
a、创建配置/etc/flannel/flanneld.conf
$ mkdir -p /etc/flannel/
$ vim /etc/flannel/flanneld.conf

# Flanneld configuration options# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="-etcd-endpoints=http://localhost:2379"
# etcd集群配置FLANNEL_ETCD_ENDPOINTS="-etcd-endpoints=http://172.16.0.6:2379,http://172.16.0.7:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
FLANNEL_ETCD_PREFIX="-etcd-prefix=/coreos.com/network"# Any additional options that you want to pass
#FLANNEL_OPTIONS=""

创建flanneld服务文件/usr/lib/systemd/system/flanneld.service

$ vim /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service[Service]
Type=notify
EnvironmentFile=-/etc/flannel/flanneld.conf
ExecStart=/usr/bin/flanneld $FLANNEL_ETCD_ENDPOINTS $FLANNEL_ETCD_PREFIX $FLANNEL_OPTIONS
Restart=on-failure[Install]
WantedBy=multi-user.target
RequiredBy=docker.service

启动flanneld
$ systemctl daemon-reload
$ systemctl start flanneld
$ systemctl restart flanneld

查看启动日志:
$ systemctl status flanneld -l
发现报错了:Couldn't fetch network config: 100: Key not found

想起来etcd里还没写入网络配置信息呢;

flanneld网络配置
docker默认用172.17.0.0/16这个网段,我想换个网段,以明确知道是在使用flanneld提供的网络,于是就用了172.10.0.0/16。

$ etcdctl mk /coreos.com/network/config '{"Network":"172.10.0.0/16", "SubnetLen": 24, "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0", "Backend": {"Type": "vxlan"}}'
$ etcdctl get /coreos.com/network/config{"Network":"172.10.0.0/16", "SubnetLen": 24, "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0", "Backend": {"Type": "vxlan"}}

因为flannel一直在尝试从etcd读配置信息,所以不需要重启flanneld,再看启动日志,flanneld已经获取到想要的子网地址了;

此时,在/run/flannel/subnet.env位置会生成这个host所分配到的子网信息:

FLANNEL_NETWORK=172.10.0.0/16
FLANNEL_SUBNET=172.10.60.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=false

正常情况下,执行ifconfig或ip a可以看到flannel0桥接网卡了,etcd上执行etcdctl ls /coreos.com/network/subnets也能够看到flannel申请的网段。

而这个文件正是mk-docker-opts.sh脚本的输入文件:
$ /usr/bin/mk-docker-opts.sh -c
$ cat /run/docker_opts.env
DOCKER_OPTS=" --bip=172.10.60.1/24 --ip-masq=true --mtu=1450 "

这时看一下etcd,多了一条信息:
$ etcdctl get /coreos.com/network/subnets/172.10.60.0-24
{"PublicIP":"172.16.92.255","BackendType":"vxlan","BackendData":{"VtepMAC":"1e:36:0a:72:6b:c7"}}

看一下主机网卡
$ ip a |grep flannel
2036: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
inet 172.10.60.0/16 scope global flannel.1

看一下网卡详情
$ ip -d link show dev flannel.1
2036: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default
link/ether 1e:36:0a:72:6b:c7 brd ff:ff:ff:ff:ff:ff promiscuity 0
vxlan id 1 local 172.16.92.255 dev eth0 srcport 0 0 dstport 8472 nolearning ageing 300 noudpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535

3、Docker使用flannel网络

再重新生成一次docker_opts.env:

# /usr/bin/mk-docker-opts.sh -c
# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=172.10.60.1/24 --ip-masq=true --mtu=1450 "

修改vim /lib/systemd/system/docker.service:

EnvironmentFile=/run/docker_opts.env # 在ExecStart参数之前新增这句话
ExecStart=/usr/bin/dockerd $DOCKER_OPTS #在ExecStart末尾添加$DOCKER_OPTS,$DOCKER_OPTS添加网桥的参数

重启docker服务:
# systemctl daemon-reload
# systemctl restart docker

查看bridge网络的信息:
# docker network ls |grep bridge
8d4e33066eb0 bridge bridge local
db61b72ccaa7 metabase_default bridge local

# docker network inspect 8d4e33066eb0 | grep Subnet
"Subnet": "172.18.0.0/16"
这就已经是在flannel提供的网段内了;

测试
然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过。

docker run -itd --name mycentos  docker.io/centos  /bin/bash

4、flannel生成的vxlan设备的删除方法

停止flanneld服务并确认
# systemctl stop flanneld
# status flanneld

使用ifconfig将设备停止
# ip addr s flannel.1
# ifconfig flannel.1 down

使用ip link del删除vxlan设备
# ip link del flannel.1
# ip addr s flannel.1

==========================================================================
温馨提示:
如上面操作后,发现各容器内分配的ip之间相互ping不通,基本就是由于防火墙问题引起的!
可是明明已经在前面部署的时候,通过"systemctl stop firewalld.service"关闭了防火墙,为什么还有防火墙问题??
这是因为linux还有底层的iptables,所以解决办法是在各节点上执行下面操作:

[root@node-1 ~]# iptables -P INPUT ACCEPT
[root@node-1 ~]# iptables -P FORWARD ACCEPT
[root@node-1 ~]# iptables -F

执行上面操作后,基本各容器间就能相互ping通了。

docker通过Flannel可以实现各容器间的相互通信,即宿主机和容器,容器和容器之间都能相互通信。

转载于:https://www.cnblogs.com/linjiqin/p/11549329.html

CentOS安装etcd和flannel实现Docker跨物理机通信相关推荐

  1. hadoop学习;安装jdk,workstation虚拟机v2v迁移;虚拟机之间和跨物理机之间ping网络通信;virtualbox的centos中关闭防火墙和检查服务启动...

    JDK 在Ubuntu下的安装 与 环境变量的配置 前期准备工作: 找到  JDK 和 配置TXT文件  并拷贝到桌面下  不是目录 而是文件拷贝到桌面下 以下的命令部分就直接复制粘贴就能够了 1.配 ...

  2. CentOS安装Etcd

    前言 最近在私有云部署一套自动化运维平台: 在安装k8s的时候需要用Etcd做为存储因此在CentOS安装Etcd 在此记录安装过程,以后安装时做为参考 安装过程 基本环境 CentOS版本 7.9. ...

  3. Docker学习:跨宿主机通信 | overlay和macvlay(理论+实战篇)

    前言 本讲是从Docker系列讲解课程,单独抽离出来的一个小节,带你一起 深入了解在编排工具出现前,跨宿主机通信的两大得力干将overlay.macvlay,这也会后期学好K8s做好基本功铺垫,打下一 ...

  4. Centos 安装rar、unrar、docker

    Centos安装成功后需要更换为阿里源: 1.备份原镜像文件,便于后期恢复(发现文件夹下没有要备份的文件直接执行第二部) sudo mv /etc/yum.repos.d/CentOS-Base.re ...

  5. Windows Nano Server安装配置详解06:在物理机中部署NanoServer

    在物理机中部署Nano Server的步骤和在虚拟机中加载VHD部署有类似之处,下面把不同的地方罗列出来. 1)在生成VHD文件的过程中,需要添加-OEMDrivers参数,意思是为大多数普通硬件安装 ...

  6. Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用

    dpar在同一台电脑上不能run 相同appid,这个在上篇说过,所以就用外部负载均衡nginx来对应,那在不同的host中跑同一服务,看看dapr内部的负载均衡是怎么实现的. 说说现有的服务,两个服 ...

  7. Docker 跨主机容器网络通信 -- Flannel 实现

    一.简介 Flannel 是一种基于 overlay 网络的跨主机容器网络解决方案,也就是将 TCP 数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 ...

  8. docker跨主机集群之flannel

    0. 环境说明 CentOS7 etcd-v3.4.3-linux-amd64.tar.gz flannel-v0.11.0-linux-amd64.tar.gz 官方文档:https://githu ...

  9. Docker Centos安装 Openssh

    Docker Centos安装Openssh 环境介绍: Docker版本:1.5.0 镜像:docker.io:centos latest 操作步骤: 1.启动镜像 docker run -ti c ...

最新文章

  1. 六年级计算机word处理,六年级上信息技术教案Word大变身用Word制作网页河大版
  2. stream测试内存_.net core百万设备连接服务和硬件需求测试
  3. 各厂商服务器存储设备默认密码大全
  4. icd植入是大手术吗_白内障手术为何要植入人工晶体?便宜的人工晶体会影响视力吗?...
  5. PWA(Progressive Web App)入门系列:Push
  6. mysql空间数据类型的使用_MYSQL 空间数据类型用法
  7. java并发包下的lock接口与syschronized关键字的区别
  8. 随笔 --- 深夜反思、重定向
  9. 如何学习帆软FineReport
  10. 多用户微信多级分销系统源码php,PHP微信多级三级分销体系源码 领取宝微信双领取_源码下载...
  11. cad与连接mySQL数据库,如何连接CAD与ACCESS数据库或excel表格?
  12. Linux虚拟机安装VMware Tools
  13. 8086cpu物理寻址
  14. c语言求余的方法,c语言求余的实现方法_后端开发
  15. python监听网络请求_Python实现一个服务器监听多个客户端请求
  16. 人工智能成功与冠状病毒抗争,但个人隐私令人担忧
  17. c语言指针存在哪,C语言指针你弄明白了吗
  18. 高老师架构设计思考短句集(2)
  19. 雨雨cms-YYCMS5.0新版影视网源码自动采集数据-玥雅CMS
  20. Jquery获取被选中的复选框的value值

热门文章

  1. ThinkPHP系的两个东东OneThink和ThinkCMF
  2. redis持久化之rdb
  3. C#调用存储过程详解
  4. 热点科普 | 自监督视觉特征学习
  5. 德国THI大学,招聘移动视觉和深度学习研究助理和研究员
  6. 推荐收藏!图深度学习发展历史、最新进展与应用
  7. 如何将学术经历整合为求职简历?
  8. CVPR 2020|打脸SOTA!不能忍,谷歌发起图像匹配挑战赛
  9. AI Hero 算法挑战赛,万元奖金等你来拿!
  10. Facebook AI 提出10亿级数据规模的半监督图像分类模型,ImageNet测试精度高达81.2%!...