写点什么

NeoKylin-Server-5.0 离线部署 etcd+flannel 集群,实现 docker 容器跨主机网络通信

用户头像
星河寒水
关注
发布于: 2021 年 01 月 30 日
NeoKylin-Server-5.0离线部署etcd+flannel集群,实现docker容器跨主机网络通信

主机准备

# etcd集群部署在m1~m3,而flannel则需每一台主机都安装部署# m1~m3192.168.136.21 m1192.168.136.22 m2192.168.136.23 m3# n1~n3192.168.136.26 n1192.168.136.27 n2192.168.136.28 n3
复制代码

安装离线 rpm 包

cd /home/rpm && rpm -ivh *.rpm --replacefiles --force --nodeps

启动 Docker,并通过 load 导入 image 镜像

systemctl enable docker && systemctl start docker


在 m1、m2、m3 执行

cd /home/imgs && docker load<nginx.tar && docker load<my-haproxy.tar && docker load<busybox.tar


在 n1、n2、n3 执行

cd /home/imgs && docker load<nginx.tar && docker load<my-haproxy.tar && docker load<pxc56.tar && docker load<busybox.tar


完成镜像导入。

etcd 集群配置

备份 etcd 的配置文件:cp /etc/etcd/etcd.conf /etc/etcd/etcd.conf.bak


编辑 m1 主机/etc/etcd/etcd.conf文件为:

#[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 主机/etc/etcd/etcd.conf文件为:

#[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 主机/etc/etcd/etcd.conf文件为:

#[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 主机的/usr/lib/systemd/system/etcd.service文件为:

[Unit]Description=Etcd ServerAfter=network.targetAfter=network-online.targetWants=network-online.target
[Service]Type=notifyWorkingDirectory=/var/lib/etcd/EnvironmentFile=/etc/etcd/etcd.confUser=etcd# set GOMAXPROCS to number of processorsExecStart=/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-failureLimitNOFILE=65536
[Install]WantedBy=multi-user.target
复制代码

配置完后,在 m1~m3 上设置自启并启动 etcd 服务,

systemctl daemon-reload && systemctl enable etcd && systemctl start etcd

在 m1~m3 主机上,可通过etcdctl member list命令查看 etcd 集群节点信息

flannel 网络配置

在所有主机上,备份 flanneld 文件

cp /etc/sysconfig/flanneld /etc/sysconfig/flanneld.bak

修改所有主机上的/etc/sysconfig/flanneld 为如下内容:

# Flanneld configuration options
# etcd url location. Point this to the server where etcd runsFLANNEL_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 主机上执行

etcdctl mk /coreos.com/network/config '{ "Network": "192.168.0.0/16" }'


将所有主机的/usr/lib/systemd/system/docker.service文件中ExecStart=/usr/bin/dockerd修改为下面两行:

EnvironmentFile=-/run/flannel/dockerExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS
复制代码

以上配置完成后,执行以下命令

systemctl enable flanneld.service && systemctl start flanneld.service && systemctl restart docker

测试 flannel 网络

所有主机运行 busybox 容器,用来测试 flannel 网络

docker run -it -d --name=bbox busybox /bin/sh && docker exec -it bbox /bin/sh

在容器中运行ip a命令,如下图所示

各主机上 busybox 容器的 IP 如下:

busybox IP    |     所属主机    192.168.88.2          m1192.168.69.2          m2192.168.72.2          m3192.168.53.2          n1192.168.14.2          n2192.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 安装包已放在度盘,链接如下

链接:https://pan.baidu.com/s/1zHoWJ9djI4sHqO8D_9gezw

提取码:1fw7


发布于: 2021 年 01 月 30 日阅读数: 643
用户头像

星河寒水

关注

还未添加个人签名 2018.09.17 加入

还未添加个人简介

评论

发布
暂无评论
NeoKylin-Server-5.0离线部署etcd+flannel集群,实现docker容器跨主机网络通信