主机准备
# 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
评论