主机准备
# 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 包
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 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 服务,
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 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 主机上执行
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/docker
ExecStart=/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 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 安装包已放在度盘,链接如下
链接:https://pan.baidu.com/s/1zHoWJ9djI4sHqO8D_9gezw
提取码:1fw7
评论