Docker多主机互联(Ubuntu)

docker多主机互联的方式有很多,docker自带的方式有Overlay、Macvlan,第三方插件有Pipework、Flannel、Calico等,此外,一般还需要借助相关的软件才能完成多主机互联。本文使用Overlay和Consul实现多主机互联。Consul是开源的服务注册、发现、治理工具。

1 查看网络配置

# 输入ifconfig命令查看网卡
# (1)Master主机网卡名称是ens33,IP地址192.168.108.133
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.108.133  netmask 255.255.255.0  broadcast 192.168.108.255
        
# (2)Node1主机网卡名称是ens33,IP地址192.168.108.131
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.108.131  netmask 255.255.255.0  broadcast 192.168.108.255

主机软件安装配置

主机名ip地址网卡名软件
master192.168.108.133ens33Docker、Consul
node1192.168.108.131ens33Docker

2 修个Docker启动配置文件

注意:修改之前一定要备份默认配置文件,如果出现问题还能恢复。

两个主机都需要修改。

2.1 旧方法(不推荐)

(1)进入目录

# docker的启动配置文件是docker.service
cd /lib/systemd/system

(2)修改配置文件

# 使用vim编辑docker.service
sudo vim docker.service

# 将文件中的ExecStart修改内容如下,添加了--cluster-store和--cluster-advertise两个参数
# 注意IP地址和端口号
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --cluster-store=consul://192.168.108.133:8500 --cluster-advertise=ens33:2375

(3)重启docker

# 加载配置文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
# 查看docker启动状态
sudo systemctl status docker

2.2 新方法(推荐)

编辑文件

# master节点配置

# 编辑daemon.json文件
vim /etc/docker/daemon.json


# 添加内容如下
{
    // consul地址
    "cluster-store": "consul://192.168.108.133:8500",
    // master宿主机地址
    "cluster-advertise": "192.168.108.133:2375"
}

# node1节点配置

# 编辑daemon.json文件
vim /etc/docker/daemon.json


# 添加内容如下
{
    // consul地址
    "cluster-store": "consul://192.168.108.133:8500",
    // node1宿主机地址
    "cluster-advertise": "192.168.108.131:2375"
}

3 在master安装配置Consul

3.1 使用docker安装

方法1(不推荐)

在master(192.168.108.133)节点上安装Consul。这种方法存在的问题是容器重启后创建的overlay网桥会丢失。

# docker参数配置
# --name:容器名称
# --restart:设置开机启动,always开机自启
# -h:节点名称,集群中会用到
# -p:映射端口
# -v:映射配置目录
# consul的相关配置参数在集群中会用到
sudo docker run -itd \
    --name consul-container \
    --restart=always \
    -h consul-maser \
    -p 8500:8500 \
    consul:1.10.0

方法2(推荐)

# 创建容器
sudo docker run -itd \
--restart=always \
--name=consul-master \
-p 8500:8500 \
-p 8300:8300 \
-p 8301:8301 \
-p 8302:8302 \
-p 8600:8600 \
-e CONSUL_DATA_DIR='/consul/data' \
-e CONSUL_CONFIG_DIR='/consul/config' \
-v /home/consul/conf/:/consul/conf/ \
-v /home/consul/data/:/consul/data/ \
consul:1.15.0 agent -server -bootstrap -ui -node=master -client='0.0.0.0'


# 说明

(1)端口说明:
8300:replication、leader farwarding的端口
8301:lan cossip的端口
8302:wan gossip的端口
8500:web ui界面的端口
8600:使用dns协议查看节点信息的端口

(2)consul agent命令说明: 
-server: 表示以server身份启动,默认是client。
-ui: 开启网页可视化管理界面
-node: 设置节点名称,注意每个节点的名称必须唯一不能重复
-bootstrap: 控制server是否在bootstrap模式,在一个数据中心中只能有一个server处于bootstrap模式,当一个server处于 bootstrap模式时,可以自己选举为server-leader
-client: 设置外部连接的地址,0.0.0.0表示外网全部可以连接

3.2 使用原生的consul安装

(1)下载consul

# consul-1.10.0的Linux版本下载
wget https://releases.hashicorp.com/consul/1.10.0/consul_1.10.0_linux_amd64.zip

# 其他版本
https://releases.hashicorp.com/consul/

(2)安装consul

# 创建在“/usr/local/”consul-1.10.0目录
sudo mkdir /usr/local/consul-1.10.0

# 解压consul_1.10.0_linux_amd64.zip,里面只有一个consul文件
sudo unzip consul_1.10.0_linux_amd64.zip

# 将consul文件复制到“/usr/bin”
sudo cp consul_1.10.0_linux_amd64/consul /usr/local/consul-1.10.0

# 给“consul”设置权限(所有用户可执行)
# 参数a是所有用户,参数x是可执行
sudo chmod a+x /usr/local/consul-1.10.0/consul

# 在“/usr/bin”目录下为consul创建软连接,这样可以直接启动
sudo ln /usr/local/consul-1.10.0/consul /usr/local/bin/consul

(3)命令启动consul

使用nohup(no hang up,不挂起)命令,可用于在系统后端不挂起执行命令,退出终端后不会挂起程序。

# 启动consul
sudo nohup consul agent \
    -server \
    -bootstrap \
    -ui \
    -bootstrap-expect=1 \
    -data-dir=/usr/local/consul-1.10.0/data/ \
    -bind=192.168.108.133 \
    -client=0.0.0.0

# 查看consul启动情况
sudo netstat -natp | grep consul

# 返回值如下
# 8500是UI页面的端口
tcp        0      0 192.168.108.133:8300     0.0.0.0:*               LISTEN      2138/consul         
tcp        0      0 192.168.108.133:8301     0.0.0.0:*               LISTEN      2138/consul         
tcp        0      0 192.168.108.133:8302     0.0.0.0:*               LISTEN      2138/consul         
tcp        0      0 192.168.108.133:57028    192.168.108.133:8300     ESTABLISHED 2138/consul         
tcp        0      0 192.168.108.133:8300     192.168.108.133:57028    ESTABLISHED 2138/consul         
tcp6       0      0 :::8500                 :::*                    LISTEN      2138/consul         
tcp6       0      0 :::8600                 :::*                    LISTEN      2138/consul         
tcp6       0      0 192.168.108.133:8500     192.168.108.133:57652    ESTABLISHED 2138/consul

(4)文件启动

在“/usr/local/consul-1.10.0/”目录下新建start-consul.sh文件

# 进入"/usr/local/consul-1.10.0/"
cd /usr/local/consul-1.10.0/

# 新建文件
sudo touch start-consul.sh

# 编辑文件内容
sudo vim start-consul.sh

# 添加可执行权限
sudo chmod +x start-consul.sh

# 执行start-consul.sh文件
./start-consul.sh

文件"start-consul.sh"内容如下:

#!/bin/bash
sudo nohup consul agent -server -bootstrap -ui -bootstrap-expect=1 -data-dir=/usr/local/consul-1.10.0/data/ -bind=192.168.108.133 -client=0.0.0.0

3.3 访问consul

(1)访问consul

# consul地址如下
http://192.168.108.133:8500/

(2)截图

进入后截图

 

4 在master创建网桥

注意:在master节点中使用创建网桥即可,在node1上会自动同步网桥。

# 网桥名称是overlay-cluster
sudo docker network create --driver overlay --subnet=10.10.0.0/16 --gateway=10.10.0.1 overlay-cluster

# 查看网桥
sudo docker network ls

# 查看网桥的详细配置
sudo docker network inspect overlay-cluster

5 使用alpine测试

(1)创建容器

# 分别在两台主机上,下载alpine
sudo docker pull alpine:3.13.0

# 注意添加网桥
# 在master(192.168.108.133)节点运行
sudo docker run -itd --name alpine-master --net overlay-cluster alpine:3.13.0 /bin/sh

# 在master(192.168.108.131)节点运行
sudo docker run -itd --name alpine-node1 --net overlay-cluster alpine:3.13.0 /bin/sh

(2)测试连接,也可以在master测试

# 进入容器alpine-node1
sudo docker exec -it alpine-node1 /bin/sh

# 在容器中测试
ping -c 4 alpine-master

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值