Dokcer 使用 Flannel 跨主机通讯
一、简介
Flannel 是 CoreOS 提供用于解决 Dokcer 集群跨主机通讯的覆盖网络工具,Flannel 跨主机通讯在分配网络时,依赖于 Etcd,Etcd可参考 Etcd 集群搭建
二、二进制文件安装
2.1、环境准备
以下环境为 3 台虚拟机,同时 Etcd 集群已经配置好,同样安装在 3 台虚拟机上,节点 IP 如下
节点 | 地址 |
---|---|
etcd0 | 192.168.1.154 |
etcd1 | 192.168.1.156 |
etcd2 | 192.168.1.249 |
2.2、安装 Flannel
首先现在 Flannel 编译好的二进制文件 Github 下载地址
1 |
|
解压后的到 flanneld
、mk-docker-opts.sh
两个文件,其中 flanneld
为主要的执行文件,sh 脚本用于生成 Docker 启动参数
2.3、配置 Flannel
解压好 Flannel 后将其复制到可执行目录
1 |
|
由于 Flannel 需要依赖 Etcd 来保证集群 IP 分配不冲突的问题,所以首先要在 Etcd 中设置 Flannel 节点所使用的 IP 段
1 |
|
接下来启动 Flannel,并指定 Etcd 的集群位置即可,Etcd 集群前端可使用 nginx 或 haproxy 反向代理
1 |
|
2.4、配置 Docker
在各个节点安装好以后最后要更改 Docker 的启动参数,使其能够使用 Flannel 进行 IP 分配,以及网络通讯
Flannel 运行后会生成一个环境环境变量文件,包含了当前主机要使用 Flannel 通讯的相关参数
1 |
|
修改 docker0 网卡参数
1 |
|
此时可以看到 docker0 的网卡 ip 地址已经处于 Flannel 网卡网段之内
创建 Docker 运行变量
接下来使用 Flannel 提供方的脚本创建 Docker 启动参数,创建好的启动参数位于 /run/docker_opts.env
文件中
1 |
|
修改 Docker 启动参数
将 docker0 与 flannel0 绑定后,还需要修改 docker 的启动参数,并使其启动后使用由 Flannel 生成的配置参数,修改如下
1 |
|
然后重新加载 systemd 配置,并重启 Docker 即可
1 |
|
整个完成流程截图如下
2.5、测试
每个节点分别启动一个 Contianer ,并相互 ping 测试即可
三、rpm 安装
CentOS 官方已经提供了 flannel 的 rpm 包,使用 rpm 包安装的好处是会自动创建一些配置文件,同时方便管理。
目前官方提供的 rpm 包一般版本都会低一些,可以使用 shell_scripts 中的 build-flannel-rpm.sh
脚本创建指定版本的 rpm 包,以下基于我创建好的 0.6.1 版本的 flannel rpm 安装
3.1、安装 flannel
首先使用脚本创建一个 0.6.1 版本的 rpm
1 |
|
创建好以后可以直接进行安装
1 |
|
3.2、配置 flannel
rpm 安装的 flannel 已经做了很多自动配置,我们只需要修改一下 flannel 的配置即可
1 |
|
测试同样创建两个 Contianer 相互ping即可