008.Docker Flannel+Etcd分布式网络部署
一 环境准备
1.1 Flannel概述
1.2 原理说明
1.3 基础环境
名称
|
地址
|
主机名
|
备注
|
docker01
|
172.24.8.111
|
docker01.example.com
|
|
docker02
|
172.24.8.112
|
docker02.example.com
|
|
etcd1
|
172.24.8.113
|
etcd1.example.com
|
用于保存相关IP信息
|
docker01中容器网段
|
10.1.15.2/24
|
container01
|
网段10.1.15.0/24
|
docker02中容器网段
|
10.1.20.2/24
|
container03
|
网段10.1.20.0/24
|
- # hostnamectl set-hostname docker01.example.com
- # hostnamectl set-hostname docker02.example.com
- # hostnamectl set-hostname etcd1.example.com
1.4 架构示意图

- 容器直接使用目标容器的ip访问,默认通过容器内部的eth0发送出去。
- 报文通过veth pair被发送到vethXXX。
- vethXXX直接连接到虚拟交换机docker0的,报文通过虚拟bridge docker0发送出去。
- 查找路由表,外部容器ip的报文都会转发到flannel0虚拟网卡,这是一个P2P的虚拟网卡,然后报文就被转发到监听在另一端的flanneld。
- flanneld通过etcd维护了各个节点之间的路由表,把原来的报文UDP封装一层,通过配置的iface发送出去。
- 报文通过主机之间的网络找到目标主机。
- 报文继续往上,到传输层,交给监听在8285端口的flanneld程序处理。
- 数据被解包,然后发送给flannel0虚拟网卡。
- 查找路由表,发现对应容器的报文要交给docker0。
- docker0找到连到自己的容器,把报文发送过去。
1.5 相关顺序
二 etcd节点部署
2.1 单节点部署etcd
- root@etcd1:~# mkdir -p /var/log/etcd/ #建议创建etcd日志保存目录
- root@etcd1:~# mkdir -p /data/etcd #建议创建单独的etcd数据目录
- root@etcd1:~# ETCD_VER=v3.3.10
- root@etcd1:~# GITHUB_URL=https://github.com/etcd-io/etcd/releases/download
- root@etcd1:~# DOWNLOAD_URL=${GITHUB_URL}
- root@etcd1:~# curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
- root@etcd1:~# tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1
- root@etcd1:~# rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz
- root@etcd1:~# cp /tmp/etcd-download-test/etcd* /usr/local/bin/
- root@etcd1:~# etcd --version
2.2 采用systemd管理
- root@etcd1:~# vi /lib/systemd/system/etcd.service #创建用于systemd管理的文件
- [Unit]
- Description=etcd
- Documentation=https://github.com/coreos/etcd
- Conflicts=etcd.service
- [Service]
- Type=notify
- Restart=always
- RestartSec=5s
- LimitNOFILE=40000
- TimeoutStartSec=0
- ExecStart=/usr/local/bin/etcd --name etcd1 --data-dir /data/etcd \
- --listen-client-urls http://172.24.8.113:2379,http://127.0.0.1:2379 \
- --advertise-client-urls http://172.24.8.113:2379
- [Install]
- WantedBy=multi-user.target
2.4 Etcd中添加相应网段
- root@etcd1:~# etcdctl --endpoints http://172.24.8.113:2379 set /flannel/network/config '{"Network": "10.1.0.0/16", "SubnetLen": 24, "SubnetMin": "10.1.15.0","SubnetMax": "10.1.20.0", "Backend": {"Type": "vxlan"}}'
- Network(字符串):CIDR格式的IPv4网络,用于整个flannel网络。(这是唯一的强制密钥。)
- SubnetLen(整数):分配给每个主机的子网大小,除非Network小于24,否则默认为24(即/24)。
- SubnetMin(字符串):子网分配应从哪个IP范围开始,默认为第一个子网Network。
- SubnetMax(字符串):子网分配应结束的IP范围的结尾,默认为最后一个子网Network。
- Backend(后端):要使用的后端类型和该后端的特定配置。
- root@etcd1:~# etcdctl get /flannel/network/config
- {"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.1.15.0","SubnetMax": "10.1.20.0", "Backend": {"Type": "vxlan"}}
三 flannel节点部署
3.1 安装flannel
- root@etcd1:~# mkdir /tmp/flannel-download-test
- root@etcd1:~# FLANNEL_VER=v0.10.0
- root@etcd1:~# GITHUB_URL=https://github.com/coreos/flannel/releases/download
- root@etcd1:~# DOWNLOAD_URL=${GITHUB_URL}
- root@etcd1:~# curl -L ${DOWNLOAD_URL}/${FLANNEL_VER}/flannel-${FLANNEL_VER}-linux-amd64.tar.gz -o /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz
- root@etcd1:~# tar xzvf /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz -C /tmp/flannel-download-test
- root@etcd1:~# rm -f /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz
- root@etcd1:~# cp /tmp/flannel-download-test/flanneld /usr/local/bin/
- root@etcd1:~# cp /tmp/flannel-download-test/mk-docker-opts.sh /usr/local/bin/
3.2 采用systemd管理
- root@etcd1:~# vi /lib/systemd/system/flanneld.service #创建用于systemd管理的文件
- [Unit]
- Description=Flanneld overlay address etcd agent
- Documentation=https://github.com/coreos/flannel
- After=network.target
- After=network-online.target
- Wants=network-online.target
- After=etcd.service #指定flannel在etcd之后、docker之前启动
- Before=docker.service
- [Service]
- User=root
- Type=notify
- LimitNOFILE=65536
- EnvironmentFile=/etc/flannel/flanneld.conf #指定flannel配置文件
- ExecStart=/usr/local/bin/flanneld \
- -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS} \
- -etcd-prefix=${FLANNEL_ETCD_PREFIX} $FLANNEL_OPTIONS
- #使用引用flannel配置文件中的参数形式
- ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker #见解读部分
- Restart=on-failure
- [Install]
- WantedBy=multi-user.target
3.3 创建flannel配置文件
- root@docker01:~# mkdir /etc/flannel
- root@docker01:~# vi /etc/flannel/flanneld.conf
- # Flanneld configuration options
- # etcd url location. Point this to the server where etcd runs
- FLANNEL_ETCD_ENDPOINTS="http://172.24.8.113:2379" #指定etcd服务器的监听地址
- # etcd config key. This is the configuration key that flannel queries
- # For address range assignment
- FLANNEL_ETCD_PREFIX="/flannel/network" #指定etcd网络参数所存储键值的key
- # Any additional options that you want to pass
- FLANNEL_OPTIONS="-iface=eth0" #指定用于主机间通信的接口,参数值也可为IP地址
四 配置docker
4.1 docker环境
4.2 修改docker启动参数
- root@docker01:~# vi /lib/systemd/system/docker.service
- #……
- EnvironmentFile=/run/flannel/docker #添加flannel转换后的docker能识别的配置文件
- ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_NETWORK_OPTIONS
- #……
五 启动相关服务
5.1 启动etcd服务
- root@etcd1:~# systemctl daemon-reload #只需要在etcd节点
- root@etcd1:~# systemctl restart etcd.service
- root@etcd1:~# systemctl enable etcd.service
- root@etcd1:~# ps -ef | grep etcd #验证是否启动正常
5.2 启动flannel服务
- root@docker01:~# systemctl daemon-reload #docker01和docker02节点
- root@docker01:~# systemctl restart flanneld.service
- root@docker01:~# systemctl enable flanneld.service
- root@docker01:~# ps -ef | grep flanneld #验证是否启动正常
5.3 启动docker服务
- root@docker01:~# systemctl daemon-reload
- root@docker01:~# systemctl restart docker.service
- root@docker01:~# systemctl enable docker.service
六 验证确认
6.1 验证flannel获取网络参数
- root@docker01:~# cat /run/flannel/docker #检查flannel获取网络参数情况
- DOCKER_OPT_BIP="--bip=10.1.19.1/24"
- DOCKER_OPT_IPMASQ="--ip-masq=true"
- DOCKER_OPT_MTU="--mtu=1450"
- DOCKER_NETWORK_OPTIONS=" --bip=10.1.19.1/24 --ip-masq=true --mtu=1450"
- root@docker01:~# ifconfig | grep -A6 docker
- root@docker01:~# ifconfig | grep -A6 flannel
七 测试确认
7.1 创建测试容器
- root@docker01:~# docker run -id --name Container01 busybox
- root@docker02:~# docker run -id --name Container01 busybox


008.Docker Flannel+Etcd分布式网络部署的更多相关文章
- 007.基于Docker的Etcd分布式部署
一 环境准备 1.1 基础环境 ntp配置:略 #建议配置ntp服务,保证时间一致性 etcd版本:v3.3.9 防火墙及SELinux:关闭防火墙和SELinux 名称 地址 主机名 备注 etcd ...
- Docker网络解决方案 - Calico部署记录
简单来说,实现docker跨主机容器间通信,常用的第三方网络方案是Flannel,Weave,Calico:Flannel会为每个host分配一个subnet,容器从这个subnet中分配ip,这些i ...
- kubeadm/flannel/dashboard/harbor部署以及服务发布
kubeadm/flannel/dashboard/harbor部署以及服务发布 目录 kubeadm/flannel/dashboard/harbor部署以及服务发布 一.部署kubeadm 1. ...
- Docker 搭建 etcd 集群
阅读目录: 主机安装 集群搭建 API 操作 API 说明和 etcdctl 命令说明 etcd 是 CoreOS 团队发起的一个开源项目(Go 语言,其实很多这类项目都是 Go 语言实现的,只能说很 ...
- ETCD分布式存储部署
一.ETCD 概述 ETCD 是一个分布式一致性k-v存储系统,可用于服务注册发现与共享配置.具有一下优点: 简单: 相比于晦涩难懂的paxos算法,etcd基于相对简单且易实现的raft算法实现一致 ...
- 使用docker配置etcd集群
docker配置etcd集群与直接部署etcd集群在配置上并没有什么太大差别. 我这里直接使用docker-compose来实现容器化的etcd部署 环境如下: HostName IP etcd1 1 ...
- 服务发现之consul理论整理_结合Docker+nginx+Tomcat简单部署案例
目录 一.理论概述 服务发现的概念简述 consul简述 二.部署docker+consul+Nginx案例 环境 部署 三.测试 四.总结 一.理论概述 服务发现的概念简述 在以前使用的是,N台机器 ...
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
随机推荐
- http raw post 之理解
参考链接: https://imququ.com/post/four-ways-to-post-data-in-http.html http://blog.csdn.net/leyangjun/art ...
- mysql 案例 ~ pt-io工具的使用
一 简介:如何使用pt-iopfile调查io具体信息二 目的:利用pt-iopfile分析mysql内部IO操作密集的文件,用以发现问题三 使用: pt-iopfile -p mysql_pid ...
- zabbix系列(二)zabbix3.0.4添加对mysql数据库性能的监控
zabbix3.0.4添加Mysql的监控 zabbix3.0 server已自带mysql的模板了,只需安装agent端,然后在web端给主机增加模板就行了. Agent端操纵 /etc/zabbi ...
- 安装最新版的2016版Pycharm后,激活码
2016年安装Pycharm后,过段时间过期.亲测只需要复制以下激活码可以完美解决激活问题,又可以开心的写Python了.以下为激活码内容: BIG3CLIK6F-eyJsaWNlbnNlSWQiOi ...
- DOS命令大全(转)
dos命令大全 CMD是command的缩写,是windows环境下的虚拟DOS窗口,提供有DOS命令,功能强大,如果你以前学习过DOS操作,那就小儿科了.是基于Windows的命令行窗口,在开始-- ...
- Ex 3_17 无穷路径..._十一次作业
(a) Inf(p)在p中出现了无穷多次,说明Inf(p)存在一个环当中,所以这个环的顶点肯定是某一个强连通部件的子集. (b) 若G中存在一条无穷路径,则G中至少存在一个环,且这个环至少有两个顶点, ...
- visual studio 2017 installer 安装包的安装必备组件设置
visual studio installer 2017 安装包的安装必备组件设置,默认设置只有net frmwork 4.6.1,如下图 这个时候如果打包安装,那么打出来的包一定需要先安装4.6. ...
- LeetCode(54):螺旋矩阵
Medium! 题目描述: 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素. 示例 1: 输入: [ [ 1, 2, 3 ], [ 4, 5, ...
- js----jquery和js的区别
1.在htlm页面中引入jquery文件后,想获取<input>输入框的数据 <input type='text' id = 'username>' var text = $( ...
- 步步为营-42-通过DataAdapter实现增删查改
说明:通过DataAdapter或者dataset连接数据库,实现对数据增删改查操作. 以前写过一篇步步为营-23-通过GridView实现增删改 1:SqlDataAdapter DataTabl ...