docker容器配置flannel网络

实验环境

系统:Centos 7.3

docker version: 1.13.1

flannel version:

firwalld: dead

三台测试的集群ip-5: 192.168.159.5、ip-6: 192.168.159.6、ip-7: 192.168.159.7

安装etcd集群

1.关闭防火墙和selinux

systemctl disable firewalld
systemctl stop firewalld

修改/etc/selinux/config中selinux参数是disable.

2. 配置三台服务器免密登录

   配置三台服务器免密登录还需要配置运行脚本的服务器免密登录自己

3.配置三台服务器时间同步

yum install -y ntp ntpdate && ntpdate pool.ntp.org

4.执行脚本

需要修改脚本中的IP地址为自己集群的IP地址,以及修改安装的etcd版本号或者是采用默认即可。

# vim deploy-etcd.sh
 
#!/bin/bash
set -x
set -e
 
#更改这里的IP, 只支持部署3个节点etcd集群
declare -A NODE_MAP=( ["etcd0"]="192.168.159.5" ["etcd1"]="192.168.159.6" ["etcd2"]="192.168.159.7" )
 
etcd::download()
{
    ETCD_VER=v3.0.15    #指定要安装的版本号
    DOWNLOAD_URL=https://github.com/coreos/etcd/releases/download
    [ -f ${PWD}/temp-etcd/etcd ]  && return
    curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o ${PWD}/etcd-${ETCD_VER}-linux-amd64.tar.gz
    mkdir -p ${PWD}/temp-etcd && tar xzvf ${PWD}/etcd-${ETCD_VER}-linux-amd64.tar.gz -C ${PWD}/temp-etcd --strip-components=1
}
 
etcd::config()
{
    local node_index=$1
 
cat <<EOF >${PWD}/${node_index}.conf
ETCD_NAME=${node_index}
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${NODE_MAP[${node_index}]}:2380"
ETCD_LISTEN_PEER_URLS="http://${NODE_MAP[${node_index}]}:2380"
ETCD_LISTEN_CLIENT_URLS="http://${NODE_MAP[${node_index}]}:2379,http://127.0.0.1:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://${NODE_MAP[${node_index}]}:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-378"
ETCD_INITIAL_CLUSTER="etcd0=http://${NODE_MAP['etcd0']}:2380,etcd1=http://${NODE_MAP['etcd1']}:2380,etcd2=http://${NODE_MAP['etcd2']}:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
# ETCD_DISCOVERY=""
# ETCD_DISCOVERY_SRV=""
# ETCD_DISCOVERY_FALLBACK="proxy"
# ETCD_DISCOVERY_PROXY=""
#
# ETCD_CA_FILE=""
# ETCD_CERT_FILE=""
# ETCD_KEY_FILE=""
# ETCD_PEER_CA_FILE=""
# ETCD_PEER_CERT_FILE=""
# ETCD_PEER_KEY_FILE=""
EOF
}
 
etcd::gen_unit()
{
cat <<EOF >${PWD}/etcd.service
[Unit]
Description=Etcd Server
After=network.target
 
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd
EnvironmentFile=-/etc/etcd/10-etcd.conf
ExecStart=/usr/bin/etcd
Restart=always
RestartSec=8s
LimitNOFILE=40000
 
[Install]
WantedBy=multi-user.target
EOF
}
 
SSH_OPTS="-oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null -oLogLevel=ERROR -C"
etcd::scp()
{
  local host="$1"
  local src=($2)
  local dst="$3"
  scp -r ${SSH_OPTS} ${src[*]} "${host}:${dst}"
}
etcd::ssh()
{
  local host="$1"
  shift
  ssh ${SSH_OPTS} -t "${host}" "$@" >/dev/null 2>&1
}
etcd::ssh_nowait()
{
  local host="$1"
  shift
  ssh ${SSH_OPTS} -t "${host}" "nohup $@" >/dev/null 2>&1 &
}
 
etcd::deploy()
{
    for key in ${!NODE_MAP[@]}
    do
        etcd::config $key
        etcd::ssh "root@${NODE_MAP[$key]}" "mkdir -p /var/lib/etcd /etc/etcd"
        etcd::scp "root@${NODE_MAP[$key]}" "${key}.conf" "/etc/etcd/10-etcd.conf"
        etcd::scp "root@${NODE_MAP[$key]}" "etcd.service" "/usr/lib/systemd/system"
        etcd::scp "root@${NODE_MAP[$key]}" "${PWD}/temp-etcd/etcd ${PWD}/temp-etcd/etcdctl" "/usr/bin"
        etcd::ssh "root@${NODE_MAP[$key]}" "chmod 755 /usr/bin/etcd*"
        etcd::ssh_nowait "root@${NODE_MAP[$key]}" "systemctl daemon-reload && systemctl enable etcd && nohup systemctl start etcd"
    done
 
}
 
etcd::clean()
{
  for key in ${!NODE_MAP[@]}
  do
    rm -f ${PWD}/${key}.conf
  done
  rm -f ${PWD}/etcd.service
}
 
 
etcd::download
etcd::gen_unit
etcd::deploy
etcd::clean
 
echo -e "\033[32m 部署完毕! 执行 etcdctl cluster-health,检测是否OK。\033[0m"

5.查看集群的健康状态

安装flannel集群

下载flannel二进制安装包(集群中每个节点都安装)

wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
tar -xf flannel-v0.10.0-linux-amd64.tar.gz
cp flanneld /usr/bin/

定义flannel网络ip池(只在一个节点执行)

创建文件 flannel-config.json 

{
  "Network": "10.3.0.0/16",
  "SubnetLen": 24,
  "Backend": {
    "Type": "vxlan"
  }
}

从上面的配置文件可以看出:

  1. flannel Net 定义该网络的 IP 池为 10.3.0.0/16
  2. SubnetLen 指定每个主机分配到的 subnet 大小为 24 位,即10.3.X.0/24
  3. Backend 为 vxlan,即主机间通过 vxlan 通信。

然后执行以下命令:

etcdctl set /docker-flannel/network/config < flannel-config.json

新建启动文件: /usr/lib/systemd/system/flanneld.service(每个节点都配置)

根据自己的ectd集群节点修改相应的IP的值

[Unit]
Description=flannel
After=etcd.service network.target

[Service]
ExecStart=/usr/bin/flanneld --etcd-endpoints=http://192.168.159.5:2379,http://192.168.159.6:2379,http://192.168.159.7:2379 -etcd-prefix=/docker-flannel/network  --iface=eth0
[Install]
WantedBy=multi-user.target
  • --etcd-endpoints 指定 etcd url。
  • --iface 指定主机间数据传输使用的 interface。
  • --etcd-prefix 指定 etcd 存放 flannel 网络配置信息的 key。只能指到目录级别,比如上面的key为:/docker-flannel/network/config ,只能指到/docker-flannel/network

启动flanneld(集群中每个节点都执行)

systemctl enable flanneld
systemctl start flanneld

查看flannel状态

systemctl status flanneld

查看各个节点分到的子网的地址段

ip-5节点的网段是:10.3.59.0/32

ip-6节点的网段是:10.3.9.0/32

ip-7节点的网段是:10.3.76.0/32

Docker中使用flannel网络

修改文件  /usr/lib/systemd/system/docker.service,增加参数:

根据配置文件 /run/flannel/subnet.env来配置

重启docker 

systemctl daemon-reload
systemctl restart docker

每个节点启动一个容器,并测试它和集群中其他节点容器的连通性。

flannel在一个大的网络中为每个节点分配了子网, flannel.1 将这些 subnet 连接起来了,相互之间可以路由。flannel 没有提供隔离。

分析网络的流量:

https://www.cnblogs.com/linux-china/p/9735100.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值