Docker跨主机网络联通之etcd实现

搭建ETCD集群

查看NODE1机器IP,并启动ETCD

ubuntu@docker-node1:~$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
        inet 172.16.1.15  netmask 255.255.255.0  broadcast 172.16.1.255
        inet6 fe80::f816:3eff:fe33:11a8  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:33:11:a8  txqueuelen 1000  (Ethernet)
        RX packets 11765471  bytes 10784121723 (10.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10697881  bytes 7319647448 (6.8 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ubuntu@docker-node1:~$ wget http://192.168.9.251:9000/software/etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node1:~$ tar zxvf etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node1:~$ cd etcd-v3.0.12-linux-amd64
ubuntu@docker-node1:~$ nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://172.16.1.15:2380 --listen-peer-urls http://172.16.1.15:2380 --listen-client-urls http://172.16.1.15:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.1.15:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://172.16.1.15:2380,docker-node2=http://172.16.1.36:2380 --initial-cluster-state new&

查看NODE2机器IP、启动ETCD,并ETCD健康检查

ubuntu@docker-node2:~$ ifconfig eth0
eth0      Link encap:Ethernet  HWaddr fa:16:3e:ec:fc:12
          inet addr:172.16.1.36  Bcast:172.16.1.255  Mask:255.255.255.0
          inet6 addr: fe80::f816:3eff:feec:fc12/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:18479729 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16843586 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:7717777368 (7.7 GB)  TX bytes:6506041953 (6.5 GB)

ubuntu@docker-node2:~$ wget http://192.168.9.251:9000/software/etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node2:~$ tar zxvf etcd-v3.0.12-linux-amd64.tar.gz
ubuntu@docker-node2:~$ cd etcd-v3.0.12-linux-amd64
ubuntu@docker-node2:~$ nohup ./etcd --name docker-node2 --initial-advertise-peer-urls http://172.16.1.36:2380 --listen-peer-urls http://172.16.1.36:2380 --listen-client-urls http://172.16.1.36:2379,http://127.0.0.1:2379 --advertise-client-urls http://172.16.1.36:2379 --initial-cluster-token etcd-cluster --initial-cluster docker-node1=http://172.16.1.15:2380,docker-node2=http://172.16.1.36:2380 --initial-cluster-state new&

ubuntu@docker-node2:~/etcd-v3.0.12-linux-amd64$ ./etcdctl cluster-health
member cd18d4410e46bbd1 is healthy: got healthy result from http://172.16.1.36:2379
member d05d0bbb1534c7ee is healthy: got healthy result from http://172.16.1.15:2379
cluster is healthy

修改docker配置文件支持etcd,重启docker

查看配置文件位于哪里

systemctl show --property=FragmentPath docker

编辑配置文件内容,接收所有IP请求

sudo vim /usr/lib/systemd/system/docker.service

修改配置ExecStart ,在后面追加 --cluster-store=etcd://172.16.1.36:2379 --cluster-advertise=172.16.1.36:2375

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://172.16.1.36:2379 --cluster-advertise=172.16.1.36:2375

重新加载配置文件,重启DOCKER DAEMON

sudo systemctl daemon-reload
sudo systemctl restart docker

两台服务器都需要上述操作

创建全局网络,并在网络中添加容器

创建全局网络

[email protected]:~$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0e7bef3f143a        bridge              bridge              local
a5c7daf62325        host                host                local
3198cae88ab4        none                null                local
[email protected]:~$ sudo docker network create -d overlay demo
3d430f3338a2c3496e9edeccc880f0a7affa06522b4249497ef6c4cd6571eaa9
[email protected]:~$ sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
0e7bef3f143a        bridge              bridge              local
3d430f3338a2        demo                overlay             global
a5c7daf62325        host                host                local
3198cae88ab4        none                null                local
[email protected]:~$ sudo docker network inspect demo
[
    {
        "Name": "demo",
        "Id": "3d430f3338a2c3496e9edeccc880f0a7affa06522b4249497ef6c4cd6571eaa9",
        "Scope": "global",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1/24"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

添加容器

在node1上添加cli1.yaml,内容如下,网络指定为上面创建的全局网络

version: ‘2‘
services:
  cli:
    container_name: cli
    image: hyperledger/fabric-tools:raft
    tty: true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer

networks:
  default:
    external:
      name: demo

在node2上添加cli2.yaml,内容如下,网络指定为上面创建的全局网络

version: ‘2‘
services:
  cli2:
    container_name: cli2
    image: hyperledger/fabric-tools:raft
    tty: true
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer

networks:
  default:
    external:
      name: demo

利用docker-compose分别启动两个节点。

docker-compose -f cli1.yaml up -d

docker-compose -f cli2.yaml up -d

查看demo网络详情,可以看到两个容器已经加入同一网络。

[email protected]node1:~$ sudo docker network inspect demo
[
    {
        "Name": "demo",
        "Id": "9dc055222c85e1ca09db6d66910c1dba27d342e070f1ca6f976533071344e939",
        "Created": "2018-05-23T10:44:36.454709725+08:00",
        "Scope": "global",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Containers": {
            "21da2d4d9b55e60b4636d7d0a9e7513b47784be55990ba46288a29a527ba470e": {
                "Name": "cli",
                "EndpointID": "411418d95a303f0452415e0481fc11ac41d6755e9680e042042f2afd93f62cca",
                "MacAddress": "02:42:0a:00:00:03",
                "IPv4Address": "10.0.0.3/24",
                "IPv6Address": ""
            },
            "ep-6725169b38e657bd6cef4d1b1cdf530575b7caf78f78a037d21c65eb2c90e6ab": {
                "Name": "cli2",
                "EndpointID": "6725169b38e657bd6cef4d1b1cdf530575b7caf78f78a037d21c65eb2c90e6ab",
                "MacAddress": "02:42:0a:00:00:02",
                "IPv4Address": "10.0.0.2/24",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

原文地址:https://www.cnblogs.com/zooqkl/p/10315987.html

时间: 2024-10-04 23:29:05

Docker跨主机网络联通之etcd实现的相关文章

Docker 跨主机网络(十六)

一.跨主机网络概述 前面已经学习了 Docker 的几种网络方案:none.host.bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题.本章的重点则是讨论跨主机容器间通信的方案. docker 原生的 overlay 和 macvlan.第三方方案:常用的包括 flannel.weave 和 calico. 二.准备 overlay 环境 为支持容器跨主机通信,Docker 提供了 overlay driver.Docerk overlay 网络需要

Docker 跨主机网络方案分析

overlay 俗称隧道网络,它是基于 VxLAN 协议来将二层数据包封装到 UDP 中进行传输的,目的是扩展二层网段,因为 VLAN 使用 12bit 标记 VLAN ID,最多支持 4094 个 VLAN,这对于大型云网络会成为瓶颈,而 VxLAN ID 使用 24bit 来标记,支持多达 16777216 个二层网段,所以 VxLAN 是扩展了 VLAN,也叫做大二层网络. overlay 网络需要一个全局的“上帝”来记录它网络中的信息,比如主机地址,子网等,这个上帝在 Docker 中是

Docker跨主机网络——manual

1. Macvlan 简介 在 Macvlan 出现之前,我们只能为一块以太网卡添加多个 IP 地址,却不能添加多个 MAC 地址,因为 MAC 地址正是通过其全球唯一性来标识一块以太网卡的,即便你使用了创建 ethx:y 这样的方式,你会发现所有这些"网卡"的 MAC 地址和 ethx 都是一样的,本质上,它们还是一块网卡,这将限制你做很多二层的操作.有了 Macvlan 技术,你可以这么做了. Macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 inter

docker的跨主机网络Overlay,MacVlan网络的实现

让外网能否访问容器的端口映射方法: 1.手动指定端口映射关系 两台虚拟机,第一台映射端口(第二台访问宿主机端口,就是访问容器端口 curl 192.168.1.1:90 .)docker run -itd --name web1 -p 90:80 nginx:latest 2>从宿主机随机映射端口到容器,docker run -itd --name web2 -p 80 nginx:latest 3>从宿主机随机映射端口到容器,容器内所有暴漏端口,都会一一映射.docker run -itd

centos7下安装docker(14.2跨主机网络-overlay)

为支持容器跨主机通信,Docker提供了overlay driver,使用户可以创建基于VxLAN的overlay网络.VxLAN可将二层数据封装到UDP进行传输,VxLAN提供与VLAN相同的以太网二层服务,但是拥有更强的扩展性和灵活性. Docker overlay网络需要一个key-value数据库用于保存网络信息状态,包括Network,Endpoint,IP等.Consul,Etcd和Zookeeper都是docker支持的key-value软件,今天讨论的是consul 试验环境描述

跨主机网络概述 - 每天5分钟玩转 Docker 容器技术(48)

前面已经学习了 Docker 的几种网络方案:none.host.bridge 和 joined 容器,它们解决了单个 Docker Host 内容器通信的问题.本章的重点则是讨论跨主机容器间通信的方案. 跨主机网络方案包括: docker 原生的 overlay 和 macvlan. 第三方方案:常用的包括 flannel.weave 和 calico. docker 网络是一个非常活跃的技术领域,不断有新的方案开发出来,那么要问个非常重要的问题了: 如此众多的方案是如何与 docker 集成

Docker跨主机通信网络

Docker跨主机通信网络 跨主机网络方案包括: docker原生的 overlay 和 macvlan.第三方方案:常用的包括flannel.weave 和 calico. (1)准备 Overlay 网络实验环境 [[email protected] ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap [[email protected] ~]# netstat -

Docker网络之部署跨主机网络overlay

dcoker网络: none网络:什么都没有的网络.它的是使用常见:封闭空间意味着隔离,安全,比如生成随机码.host网络:网络配置与dockerhost完全相同.应用场景:性能好,但是没有灵活性,容易出现端口冲突问题.brigde网络: 默认的网络驱动默认,用以实现主机网络接口与虚拟网络接口间的通信. 部署网络的基本操作命令: //查看docker服务器中的网络:[[email protected] ~]# docker network ls//查看桥接网络:[[email protected

跨主机网络-overlay(18)

docker overlay跨主机网络 1.环境 docker版本 Docker version 18.02.0-ce, build fc4de44 3台主机 192.168.55.51 host1 192.168.55.52 host2 192.168.55.53 host2 2.部署Consul Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network.Endpoint.IP 等.Consul.Etcd 和 ZooKeeper 都是 D