008.Docker Flannel+Etcd分布式网络部署
2019-01-15 02:27:49来源:博客园 阅读 ()
一 环境准备
1.1 Flannel概述
1.2 原理说明
1.3 基础环境
1 # hostnamectl set-hostname docker01.example.com 2 # hostnamectl set-hostname docker02.example.com 3 # 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
1 root@etcd1:~# mkdir -p /var/log/etcd/ #建议创建etcd日志保存目录 2 root@etcd1:~# mkdir -p /data/etcd #建议创建单独的etcd数据目录 3 root@etcd1:~# ETCD_VER=v3.3.10 4 root@etcd1:~# GITHUB_URL=https://github.com/etcd-io/etcd/releases/download 5 root@etcd1:~# DOWNLOAD_URL=${GITHUB_URL} 6 root@etcd1:~# curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz 7 root@etcd1:~# tar xzvf /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz -C /tmp/etcd-download-test --strip-components=1 8 root@etcd1:~# rm -f /tmp/etcd-${ETCD_VER}-linux-amd64.tar.gz 9 10 root@etcd1:~# cp /tmp/etcd-download-test/etcd* /usr/local/bin/ 11 root@etcd1:~# etcd --version
2.2 采用systemd管理
1 root@etcd1:~# vi /lib/systemd/system/etcd.service #创建用于systemd管理的文件 2 [Unit] 3 Description=etcd 4 Documentation=https://github.com/coreos/etcd 5 Conflicts=etcd.service 6 7 [Service] 8 Type=notify 9 Restart=always 10 RestartSec=5s 11 LimitNOFILE=40000 12 TimeoutStartSec=0 13 14 ExecStart=/usr/local/bin/etcd --name etcd1 --data-dir /data/etcd \ 15 --listen-client-urls http://172.24.8.113:2379,http://127.0.0.1:2379 \ 16 --advertise-client-urls http://172.24.8.113:2379 17 18 [Install] 19 WantedBy=multi-user.target
2.4 Etcd中添加相应网段
1 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"}}' 2 Network(字符串):CIDR格式的IPv4网络,用于整个flannel网络。(这是唯一的强制密钥。) 3 SubnetLen(整数):分配给每个主机的子网大小,除非Network小于24,否则默认为24(即/24)。 4 SubnetMin(字符串):子网分配应从哪个IP范围开始,默认为第一个子网Network。 5 SubnetMax(字符串):子网分配应结束的IP范围的结尾,默认为最后一个子网Network。 6 Backend(后端):要使用的后端类型和该后端的特定配置。 7 root@etcd1:~# etcdctl get /flannel/network/config 8 {"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
1 root@etcd1:~# mkdir /tmp/flannel-download-test 2 root@etcd1:~# FLANNEL_VER=v0.10.0 3 root@etcd1:~# GITHUB_URL=https://github.com/coreos/flannel/releases/download 4 root@etcd1:~# DOWNLOAD_URL=${GITHUB_URL} 5 root@etcd1:~# curl -L ${DOWNLOAD_URL}/${FLANNEL_VER}/flannel-${FLANNEL_VER}-linux-amd64.tar.gz -o /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz 6 root@etcd1:~# tar xzvf /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz -C /tmp/flannel-download-test 7 root@etcd1:~# rm -f /tmp/flannel-${FLANNEL_VER}-linux-amd64.tar.gz 8 9 root@etcd1:~# cp /tmp/flannel-download-test/flanneld /usr/local/bin/ 10 root@etcd1:~# cp /tmp/flannel-download-test/mk-docker-opts.sh /usr/local/bin/
3.2 采用systemd管理
1 root@etcd1:~# vi /lib/systemd/system/flanneld.service #创建用于systemd管理的文件 2 [Unit] 3 Description=Flanneld overlay address etcd agent 4 Documentation=https://github.com/coreos/flannel 5 After=network.target 6 After=network-online.target 7 Wants=network-online.target 8 After=etcd.service #指定flannel在etcd之后、docker之前启动 9 Before=docker.service 10 11 [Service] 12 User=root 13 Type=notify 14 LimitNOFILE=65536 15 EnvironmentFile=/etc/flannel/flanneld.conf #指定flannel配置文件 16 ExecStart=/usr/local/bin/flanneld \ 17 -etcd-endpoints=${FLANNEL_ETCD_ENDPOINTS} \ 18 -etcd-prefix=${FLANNEL_ETCD_PREFIX} $FLANNEL_OPTIONS 19 #使用引用flannel配置文件中的参数形式 20 ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker #见解读部分 21 Restart=on-failure 22 23 24 [Install] 25 WantedBy=multi-user.target
3.3 创建flannel配置文件
1 root@docker01:~# mkdir /etc/flannel 2 root@docker01:~# vi /etc/flannel/flanneld.conf 3 # Flanneld configuration options 4 # etcd url location. Point this to the server where etcd runs 5 FLANNEL_ETCD_ENDPOINTS="http://172.24.8.113:2379" #指定etcd服务器的监听地址 6 7 # etcd config key. This is the configuration key that flannel queries 8 # For address range assignment 9 FLANNEL_ETCD_PREFIX="/flannel/network" #指定etcd网络参数所存储键值的key 10 11 # Any additional options that you want to pass 12 FLANNEL_OPTIONS="-iface=eth0" #指定用于主机间通信的接口,参数值也可为IP地址
四 配置docker
4.1 docker环境
4.2 修改docker启动参数
1 root@docker01:~# vi /lib/systemd/system/docker.service 2 #…… 3 EnvironmentFile=/run/flannel/docker #添加flannel转换后的docker能识别的配置文件 4 ExecStart=/usr/bin/dockerd -H fd:// $DOCKER_NETWORK_OPTIONS 5 #……
五 启动相关服务
5.1 启动etcd服务
1 root@etcd1:~# systemctl daemon-reload #只需要在etcd节点 2 root@etcd1:~# systemctl restart etcd.service 3 root@etcd1:~# systemctl enable etcd.service 4 root@etcd1:~# ps -ef | grep etcd #验证是否启动正常
5.2 启动flannel服务
1 root@docker01:~# systemctl daemon-reload #docker01和docker02节点 2 root@docker01:~# systemctl restart flanneld.service 3 root@docker01:~# systemctl enable flanneld.service 4 root@docker01:~# ps -ef | grep flanneld #验证是否启动正常
5.3 启动docker服务
1 root@docker01:~# systemctl daemon-reload 2 root@docker01:~# systemctl restart docker.service 3 root@docker01:~# systemctl enable docker.service
六 验证确认
6.1 验证flannel获取网络参数
1 root@docker01:~# cat /run/flannel/docker #检查flannel获取网络参数情况 2 DOCKER_OPT_BIP="--bip=10.1.19.1/24" 3 DOCKER_OPT_IPMASQ="--ip-masq=true" 4 DOCKER_OPT_MTU="--mtu=1450" 5 DOCKER_NETWORK_OPTIONS=" --bip=10.1.19.1/24 --ip-masq=true --mtu=1450" 6 root@docker01:~# ifconfig | grep -A6 docker 7 root@docker01:~# ifconfig | grep -A6 flannel
七 测试确认
7.1 创建测试容器
1 root@docker01:~# docker run -id --name Container01 busybox 2 root@docker02:~# docker run -id --name Container01 busybox
原文链接:https://www.cnblogs.com/itzgr/p/10172004.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 应用系统分布式构建运维 2020-05-07
- Git起步 2020-01-19
- 分布式系统; 大数据平台;分布式技术相关记录 2019-12-25
- zabbix分布式监控服务 安装与配置 2019-12-13
- Horovod 分布式深度学习框架相关 2019-11-15
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash