https://github.com/flannel-io/flannel/releases
wget https://github.com/flannel-io/flannel/releases/download/v0.13.0/flannel-v0.13.0-linux-arm64.tar.gz
tar -zxvf flannel-v0.13.0-linux-arm64.tar.gz
-解压后的到 flanneld、mk-docker-opts.sh 两个文件,其中 flanneld 为主要的执行文件,sh 脚本用于生成 Docker 启动参数
cp flanneld /usr/local/bin/
-由于 Flannel 需要依赖 Etcd 来保证集群 IP 分配不冲突的问题,所以首先要在 Etcd 中设置 Flannel 节点所使用的 IP 段
etcdctl --endpoints http://etcd1.mritd.me:4001 \
set /coreos.com/network/config '{"NetWork":"10.0.0.0/16"}'
-接下来启动 Flannel,并指定 Etcd 的集群位置即可,Etcd 集群前端可使用 nginx 或 haproxy 反向代理
flanneld --etcd-endpoints="http://etcd1.mritd.me:2379" --ip-masq=true >> /var/log/flanneld.log 2>&1 &
-在各个节点安装好以后最后要更改 Docker 的启动参数,使其能够使用 Flannel 进行 IP 分配,以及网络通讯
-Flannel 运行后会生成一个环境环境变量文件,包含了当前主机要使用 Flannel 通讯的相关参数
# 查看 Flannel 分配的网络参数
cat /run/flannel/subnet.env
# 相关网络参数如下
FLANNEL_NETWORK=10.0.0.0/16
FLANNEL_SUBNET=10.0.72.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=true
-修改 docker0 网卡参数
source /run/flannel/subnet.env
ifconfig docker0 ${FLANNEL_SUBNET}
-此时可以看到 docker0 的网卡 ip 地址已经处于 Flannel 网卡网段之内
ifconfig flannel0
-接下来使用 Flannel 提供方的脚本创建 Docker 启动参数,创建好的启动参数位于 /run/docker_opts.env 文件中
./mk-docker-opts.sh -d /run/docker_opts.env -c
-将 docker0 与 flannel0 绑定后,还需要修改 docker 的启动参数,并使其启动后使用由 Flannel 生成的配置参数
# 编辑 systemd service 配置文件
vim /usr/lib/systemd/system/docker.service
# 在启动时增加 Flannel 提供的启动参数
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
# 指定这些启动参数所在的文件位置(这个配置是新增的,同样放在 Service标签下)
EnvironmentFile=/run/docker_opts.env
systemctl daemon-reload
systemctl restart docker
# rpm 安装
---首先使用脚本创建一个 0.6.1 版本的 rpm
git clone https://github.com/mritd/shell_scripts.git
cd shell_script
./build-flannel-rpm.sh 0.6.1
---创建好以后可以直接进行安装
rpm -ivh flannel-0.6.1-1.x86_64.rpm
-配置 flannel
# 同样先在 etcd 中放入 flannel ip 分配地址
etcdctl --endpoints http://etcd1.mritd.me:4001 \
set /coreos.com/network/config '{"NetWork":"10.0.0.0/16"}'
# 然后编辑 flannel 配置文件
vim /etc/sysconfig/flanneld
# 修改 Etcd 地址和 Etcd 中 flannel ip 分配地址的目录即可
FLANNEL_ETCD="http://etcd1.mritd.me:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
# 最后重启 flannel 和 docker
systemctl restart flannel
systemctl restart docker-测试同样创建两个 Contianer 相互ping即可