Bootstrap

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