NeoKylin-Server-5.0离线部署etcd+flannel集群,实现docker容器跨主机网络通信
主机准备
# etcd集群部署在m1~m3,而flannel则需每一台主机都安装部署
# m1~m3
192.168.136.21 m1
192.168.136.22 m2
192.168.136.23 m3
# n1~n3
192.168.136.26 n1
192.168.136.27 n2
192.168.136.28 n3
安装离线rpm包
启动Docker,并通过load导入image镜像
在m1、m2、m3执行
在n1、n2、n3执行
完成镜像导入。
etcd集群配置
备份etcd的配置文件:
编辑m1主机文件为:
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="m1"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://m1:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://m1:2379,http://m1:4001"
ETCD_INITIAL_CLUSTER="m1=http://m1:2380,m2=http://m2:2380,m3=http://m3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
编辑m2主机文件为:
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="m2"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://m2:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://m2:2379,http://m2:4001"
ETCD_INITIAL_CLUSTER="m1=http://m1:2380,m2=http://m2:2380,m3=http://m3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
编辑m3主机文件为:
#[Member]
ETCD_DATA_DIR="/var/lib/etcd/"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379,http://0.0.0.0:4001"
ETCD_NAME="m3"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://m3:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://m3:2379,http://m3:4001"
ETCD_INITIAL_CLUSTER="m1=http://m1:2380,m2=http://m2:2380,m3=http://m3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
修改m1~m3主机的文件为:
[Unit]
Description=Etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=/etc/etcd/etcd.conf
User=etcd
# set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd --name=\"${ETCD_NAME}\" --data-dir=\"${ETCD_DATA_DIR}\" --listen-client-urls=\"${ETCD_LISTEN_CLIENT_URLS}\""
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
配置完后,在m1~m3上设置自启并启动etcd服务,
在m1~m3主机上,可通过命令查看etcd集群节点信息
flannel网络配置
在所有主机上,备份flanneld文件
修改所有主机上的 为如下内容:
# Flanneld configuration options
# etcd url location. Point this to the server where etcd runs
FLANNEL_ETCD_ENDPOINTS="http://m1:2379,http://m2:2379,http://m3:2379"
# etcd config key. This is the configuration key that flannel queries
# For address range assignment
#FLANNEL_ETCD_PREFIX="/atomic.io/network"
FLANNEL_ETCD_PREFIX="/coreos.com/network"
# Any additional options that you want to pass
#FLANNEL_OPTIONS=""
然后只需在m1主机上执行
将所有主机的文件中修改为下面两行:
EnvironmentFile=-/run/flannel/docker
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS
以上配置完成后,执行以下命令
测试flannel网络
所有主机运行busybox容器,用来测试flannel网络
在容器中运行命令,如下图所示

各主机上busybox容器的IP如下:
busybox IP | 所属主机
192.168.88.2 m1
192.168.69.2 m2
192.168.72.2 m3
192.168.53.2 n1
192.168.14.2 n2
192.168.4.2 n3
m1主机 ping n3主机的busybox容器IP 192.168.4.2,如下图:

m2主机的busybox容器 ping n1主机的busybox容器IP 192.168.53.2,如下图:

以上测试通过,说明各主机、主机上的容器现在可通过flannel跨主机网络相互通信,为后续在麒麟系统上使用docker容器搭建应用打下基础。
文中涉及到的rpm安装包已放在度盘,链接如下
提取码:1fw7