首页 » 云计算 » DOCKER » 阿里云两台ECS主机flanneld配置

阿里云两台ECS主机flanneld配置

 
文章目录

概述

阿里云上有两台主机(interface和vpc-test1)没有安装k8s集群,只起了docker服务,要实现两台云主机上的docker容器内网互通,拟通过flanneld和etcd来配置实现。

配置步骤

环境说明:

主机IP地址部署服务
interface10.161.137.56etcd、flannel、docker
vpc-test1172.16.151.113flannel、docker

etcd安装

interface上操作

etcd下载地址:https://github.com/coreos/etcd/releases

解压后,将etcd和etcdctl两个可执行文件拷贝至/usr/bin 下

启动命令:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

安装Flannel

两台上分别操作:

flannel下载地址:https://github.com/coreos/flannel/releases

直接解压后,将flanneld和mk-docker-opts.sh拷贝至目标文件夹/usr/local/bin/。

添加flannel网络配置信息到etcd:

interface:

etcdctl --endpoints http://127.0.0.1:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

vpc-test1:

etcdctl --endpoints http://10.161.137.56:2379 set /coreos.com/network/config '{"Network": "10.0.0.0/16", "SubnetLen": 24, "SubnetMin": "10.0.1.0","SubnetMax": "10.0.20.0", "Backend": {"Type": "vxlan"}}'

启动Flannel

# cat /etc/systemd/system/flanneld.service

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service

[Service]
User=root
ExecStartPost=/usr/local/bin/mk-docker-opts.sh
ExecStart=/usr/local/bin/flanneld \
--etcd-endpoints="http://10.161.137.56:2379" \
--iface=10.161.137.56 \  
--ip-masq=true \
--etcd-prefix=/coreos.com/network
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

vpc-test1的配置中 --iface=172.16.151.113

# systemctl daemon-reload
# systemctl start flanneld

如果systemctl启动失败,可以尝试命令行启动:

 /usr/local/bin/flanneld --etcd-endpoints=http://10.161.137.56:2379 --iface=10.161.137.56 --ip-masq=true --etcd-prefix=/coreos.com/network/ &

Flannel启动过程解析:

  • 从etcd中获取network的配置信息
  • 划分subnet,并在etcd中进行注册
  • 将子网信息记录到/run/flannel/subnet.env中

Flannel必须先于Docker启动

验证Flannel网络

查看etcd中的数据:

# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/10.0.19.0-24

查看docker1的flannel网卡信息,出现flannel.1的网卡说明启动生效:

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 10.0.19.0  netmask 255.255.255.255  broadcast 0.0.0.0
        ether a6:ce:15:7f:9e:43  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到flannel0网卡的地址和etcd存储的地址一样,这样flannel网络配置完成.

配置Docker

Docker安装完成以后,需要修改其启动参数以使其能够使用flannel进行IP分配,以及网络通讯

在Flannel运行之后,会生成一个环境变量文件,包含了当前主机要使用flannel通讯的相关参数,如下:

# /usr/local/bin/mk-docker-opts.sh -c

# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=10.0.19.1/24 --ip-masq=false --mtu=1450"

修改docker的服务启动文件如下:

# vim /lib/systemd/system/docker.service

EnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd $DOCKER_OPTS -H fd://

docker 1.10.3版本和18.09.3的配置有些差别

docker 1.10.3配置,增加如下两行配置:

docker 18.09.3 版本,增加如下两处配置

分配重启docker服务和容器

验证容器互通

通过docker exec 方式登录容器,互ping测试。

docker inspect 来获取容器ip

原文链接:阿里云两台ECS主机flanneld配置,转载请注明来源!

0