docker 跨主机网络:overlay 简介

简介

docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现。在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法:

  • 使用端口映射:直接把容器的服务端口映射到主机上,主机直接通过映射出来的端口通信
  • 把容器放到主机所在的网段:修改 docker 的 ip 分配网段和主机一致,还要修改主机的网络结构
  • 第三方项目:flannel,weave 或者 pipework 等,这些方案一般都是通过 SDN 搭建 overlay 网络达到容器通信的

随着 docker 1.9 的发布,一个新的网络模型被开发出来(后面会写一篇文章专门介绍 docker 的网络项目 libnetwork)。除了能更方便地按照需求来搭建自己的网络方案,这次发布还让 docker 具备了跨主机通信的功能。

这篇文章介绍 docker swarm,和 docker overlay 网络( docker 自带的跨主机网络模型),看看不同主机是怎么通信的。

使用 overlay 网络需要满足下面的这些条件:

  • 正常工作的 key-value 存储服务,比如 consul、etcd、zookeeper 等
  • 可以访问到 key-value 服务的主机集群
  • 集群中每台机器都安装并运行 docker daemon
  • 集群中每台机器的 hostname 都是唯一的,因为 key-value 服务是通过 hostname 标识每台主机的

安装 docker swarm 环境

注意: docker overlay 网络可以单独使用,不是必须和 swarm 绑定在一起的。这里使用 swarm,是因为它的简单易用,并且更容易说明问题。

先介绍一下 docker swarm, 这是 docker 开发的容器集群管理工具,和 docker API 兼容性很好,但目前功能不是很强大。

废话不多说,我们先来搭建一套 docker swarm 环境。这里的所有操作都是在我的机器上进行的,使用了 docker-machine 在 virtualbox 上面安装主机。docker-machine 提供了方便集成 swarm 的功能,所以安装起来并不复杂。

为了简化这个过程,我写了脚本来一键跑完这个过程(脚本我已经放到 github 上):

#!/bin/bash

set -e create_kv() { echo Creating kvstore machine. docker-machine create -d virtualbox \ --engine-opt="registry-mirror=http://houchaohann.m.alauda.cn" \ kvstore docker $(docker-machine config kvstore) run -d \ -p "8500:8500" \ progrium/consul --server -bootstrap-expect 1 } create_master() { echo Creating cluster master kvip=$(docker-machine ip kvstore) docker-machine create -d virtualbox \ --swarm --swarm-master \ --swarm-discovery="consul://${kvip}:8500" \ --engine-opt="cluster-store=consul://${kvip}:8500" \ --engine-opt="cluster-advertise=eth1:2376" \ --engine-opt="registry-mirror=http://houchaohann.m.alauda.cn" \ swarm-manager } create_nodes(){ kvip=$(docker-machine ip kvstore) echo Creating cluster nodes for i in 1 2; do docker-machine create -d virtualbox \ --swarm \ --swarm-discovery="consul://${kvip}:8500" \ --engine-opt="cluster-store=consul://${kvip}:8500" \ --engine-opt="cluster-advertise=eth1:2376" \ --engine-opt="registry-mirror=http://houchaohann.m.alauda.cn" \ swarm-node${i} done } teardown(){ docker-machine rm kvstore -y docker-machine rm -y swarm-manager for i in 1 2; do docker-machine rm -y swarm-node${i} done } case $1 in up) create_kv create_master create_nodes ;; down) teardown ;; *) echo "Unknow command..." exit 1 ;; esac 

运行 ./cluster.sh up 就能自动生成四台机器:

  • 一台 kvstore运行 consul 服务
  • 一台 swarm master 机器,运行 swarm manager 服务
  • 两台 swarm node 机器,都是运行了 swarm node 服务和 docker daemon 服务

注意:上面的脚本设置了某国内厂家的 registry-mirror 来加速镜像的下载,你也可以根据自己的需求进行修改。

怎么验证集群已经正确安装呢?通过 client 和 swarm manager 交互,打印出来集群的状态就搞定了:

➜  eval $(docker-machine env --swarm swarm-manager)
➜  docker info
Containers: 4
 Running: 4 Paused: 0 Stopped: 0 Images: 3 Server Version: swarm/1.2.3 Role: primary Strategy: spread Filters: health, port, containerslots, dependency, affinity, constraint Nodes: 3 swarm-manager: 192.168.99.136:2376 └ ID: NHHY:6GRG:PVKL:BUIX:Z4TH:626A:BCTR:UFBM:BAP5:H4BJ:DUPO:UMJ2 └ Status: Healthy └ Containers: 2 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.021 GiB └ Labels: executiondriver=, kernelversion=4.4.12-boot2docker, operatingsystem=Boot2Docker 1.11.2 (TCL 7.1); HEAD : a6645c3 - Wed Jun 1 22:59:51 UTC 2016, provider=virtualbox, storagedriver=aufs └ UpdatedAt: 2016-06-13T04:20:30Z └ ServerVersion: 1.11.2 swarm-node1: 192.168.99.137:2376 └ ID: O7QX:ZL3Y:WOCG:W4PP:2GDF:RCMM:K5PB:VSZE:GXE5:4M6C:JPHE:BWHM └ Status: Healthy └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.021 GiB └ Labels: executiondriver=, kernelversion=4.4.12-boot2docker, operatingsystem=Boot2Docker 1.11.2 (TCL 7.1); HEAD : a6645c3 - Wed Jun 1 22:59:51 UTC 2016, provider=virtualbox, storagedriver=aufs └ UpdatedAt: 2016-06-13T04:20:46Z └ ServerVersion: 1.11.2 swarm-node2: 192.168.99.138:2376 └ ID: RX4S:4UJK:CNCE:IG4V:LP7Y:ZQDL:VGZM:SXUJ:7INW:5PS7:RDLI:AK6A └ Status: Healthy └ Containers: 1 └ Reserved CPUs: 0 / 1 └ Reserved Memory: 0 B / 1.021 GiB └ Labels: executiondriver=, kernelversion=4.4.12-boot2docker, operatingsystem=Boot2Docker 1.11.2 (TCL 7.1); HEAD : a6645c3 - Wed Jun 1 22:59:51 UTC 2016, provider=virtualbox, storagedriver=aufs └ UpdatedAt: 2016-06-

转载于:https://www.cnblogs.com/allcloud/p/7612247.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值