一、启动flannel程序
通过Unit文件,启动Flannel服务,Unit文件如下:
[Unit] Description=flannel After=docker.service [Service] TimeoutSec=0 ExecStart= /var/flannel/flanneld \ -etcd-endpoints=http: //192 .168.10.161:2379 [Install] WantedBy=multi-user.target |
启动flannel
systemctl daemon-reload systemctl enable flannel2016.service systemctl start flannel2016.service |
Flannel服务启动时主要做了以下几步的工作:
- 从etcd中获取network的配置信息
- 划分subnet,并在etcd中进行注册
- 将子网信息记录到/run/flannel/subnet.env中
生成的subnet.env内容如下:
cat /run/flannel/subnet . env FLANNEL_NETWORK=172.17.0.0 /16 FLANNEL_SUBNET=172.17.50.1 /24 FLANNEL_MTU=1472 FLANNEL_IPMASQ= false |
二、修改flannel配置文件
在CoreOS中Docker启动会读取配置文件,配置文件中可包含网络和镜像地址的设置,查看Docker启动服务,会读取/run/flannel/flannel_docker_opts.env文件
EnvironmentFile配置如下所示
[Unit] Description=Docker Application Container Engine Documentation=http: //docs .docker.com After=containerd.service docker.socket early-docker.target network.target Requires=containerd.service docker.socket early-docker.target [Service] Type=notify EnvironmentFile=- /run/flannel/flannel_docker_opts . env # the default is not to use systemd for cgroups because the delegate issues still # exists and systemd currently does not support the cgroup feature set required # for containers run by docker ExecStart= /usr/lib/coreos/dockerd --host=fd: // --containerd= /var/run/docker/libcontainerd/docker-containerd .sock $DOCKER_OPTS $DOCKER_CGROUPS ExecReload= /bin/kill -s HUP $MAINPID LimitNOFILE=1048576 |
修改flannel配置文件mk-docker-opts.sh,将docker_env修改为“/run/flannel/flannel_docker_opts.env”
docker_env= "/run/flannel/flannel_docker_opts.env" |
三、生成相关配置文件
Docker使用Flannel的网络传递数据,可以通过命令生成启动参数。
sudo /var/flannel/mk-docker-opts .sh -i |
生成的Docker启动配置文件内容如下:
cat /run/flannel/flannel_docker_opts . env DOCKER_OPT_BIP= "--bip=172.17.50.1/24" DOCKER_OPT_IPMASQ= "--ip-masq=true" DOCKER_OPT_MTU= "--mtu=1472" DOCKER_NETWORK_OPTIONS= " --bip=172.17.50.1/24 --ip-masq=true --mtu=1472 " |
四、修改docker0网段
source /run/flannel/subnet . env sudo ifconfig docker0 ${FLANNEL_SUBNET} |
五、重启Docker
配置完毕后,便可以启动docker了
sudo systemctl restart docker |