Docker 多容器编排Swarm(六)

栏目: 编程工具 · 发布时间: 6年前

内容简介:Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,

Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

docker swarm 体系结构如如所示:

一个Manager下面有多个Worker(实际运行中每个都是一个container)

Docker 多容器编排Swarm(六)

下图是一个Service和Replicas(复制品)模型图, service是nginx,但是下面有3个replicas nginx构成了一个集群

Docker 多容器编排Swarm(六)

如何创建swarm集群

swarm node节点的分配是默认随机,起初我们是不知道的

docker swarm --help     #查看帮助
docker swarm init --advertise-addr=198.168.205.10  #初始化一个docker swarm manager
docker node ls
复制代码
  1. 第一台机器,执行命令设置为主节点
    Docker 多容器编排Swarm(六)
  2. 第二台机器,执行上图中倒数第二段的命令
    Docker 多容器编排Swarm(六)
  3. 然后回到第一台manager机器查看一下当前节点
    Docker 多容器编排Swarm(六)
  4. 剩下的几台机器依次执行同样的命令
    Docker 多容器编排Swarm(六)
  5. 再次查看第一台manager机器,会发现已经有3个docker swarm node
    Docker 多容器编排Swarm(六)
    至此,一个简单的docker swarm集群创建完成

创建维护和水平扩展

docker service create --help
docker service ls   #查看所有
docker service scale #水平扩展
docker service scale [serviceName] = [num] #设置service(container)数目
docker service ps [serviceNmae]         #查看当前service详细
docker ps
复制代码
  1. 举例: 执行命令 docker service create --name demo busybox sh -c"while true;do sleep 3600;done"
    Docker 多容器编排Swarm(六)
  2. 执行命令 docker service ls 查看,REPLICAS表示水平扩展
    Docker 多容器编排Swarm(六)
  3. 执行命令 docker service ps demo NODE显示node3表示demo service在我们的第三台机器上
    Docker 多容器编排Swarm(六)
  4. 执行命令 docker service scale=5 ,水平扩展5个相同的服务,此时REPLICAS是5/5,5/5是什么意思呢,第一个5是表示有多少个是ready(准备),第二个5是有多少个scheuld(分片实例
    Docker 多容器编排Swarm(六)
  5. 执行命令 docker service ps demo 可以看到该servie所有部署情况
    Docker 多容器编排Swarm(六)

第一台机器,也就是Docker Swarm Manange执行 docker service rm demo 命令后,则以上创建的service demo 的container全部销毁,可以执行 docker service ps demo , docker ps 再次查看详情。

实战-swram集群里部署wordpress

docker network create -d overlay demo   #创建名为demo的docker network
docker network ls   #查看
docker exec [containerID] ip a  #查看容器ip
复制代码
  1. 执行命令 docker service create --name mysql --env MYSQL_ROOT_PASSWORD=root --env MYSQL_DATABASE=wordpress --network demo --mount type=volume,source=mysql-data,destination=/var/lib/mysql mysq
    Docker 多容器编排Swarm(六)
  2. 查看service mysql部署情况
    Docker 多容器编排Swarm(六)
    3.执行命令 docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
    Docker 多容器编排Swarm(六)
  3. 执行命令 docker service ps wordpressdocker ps 查看wordpress部署情况
    Docker 多容器编排Swarm(六)

swarm 底层机制会同步网络的创建,因为它要实现多个节点之间容器的通信。

swarm集群服务间通信

Docker 多容器编排Swarm(六)
  1. docker network create -d overlay demo 创建名为demo的docker network

  2. 执行命令 docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami

    Docker 多容器编排Swarm(六)
  3. 执行命令 docker service lsdocker service ps whoami 查看,可以看出service在当前机器上

    Docker 多容器编排Swarm(六)
  4. 执行命令 curl 127.0.0.1:8000 ,结果返回了host name

    Docker 多容器编排Swarm(六)
  5. 执行命令 docker service create --name client -d --network demo busybox sh -c "while true;do sleep 4600;done"

    Docker 多容器编排Swarm(六)
  6. 执行命令 docker service lsdocker service ps client 查看,可以看出service在另一台机器上

    Docker 多容器编排Swarm(六)
  7. 查看并进入service client

    Docker 多容器编排Swarm(六)
  8. 看到可以ping通whoami主机地址,但是主机地址显示10.0.0.7,很显然这不是真是的ip地址

    Docker 多容器编排Swarm(六)
  9. 进入service whoami机器执行 docker service scale whoami=2 ,横向扩展2个

    Docker 多容器编排Swarm(六)
  10. 再次重复第7、8步,还是同样的结果,其实这个一个vip(虚拟IP),可以使用 nslookup 命令查看DNS

    Docker 多容器编排Swarm(六)
    Docker 多容器编排Swarm(六)
    在部署了service whoami的机器上执行 docker exec [containerID] ip a 查看对应的容器IP地址,即可知道真实IP,VIP(虚拟IP)不会经常变动,机器IP可能变动

此时多次执行命令 curl 127.0.0.1:8000 ,会发现每次返回的host name可能会变,这是因为已经提供了负载均衡功能了。

Internal Load Balancing 图:

Docker 多容器编排Swarm(六)
DNS+VIP+iptables+LVS
Docker 多容器编排Swarm(六)
Routing Mesh的两种体现
  • Internal——Container和Container之间的访问通过overlay网络(通过VIP虚拟ip)
  • Ingress——如果服务有绑定接口,则此服务可以通过任意swarm节点的相应接口访问

上述的操作分别采用了这2种方式

Ingress负载均衡

  • 外部访问的负载均衡
  • 服务端口被暴露到各个swarm节点
  • 内部通过IPVS进行负载均衡
    Docker 多容器编排Swarm(六)
  1. 使用之前的例子service whoami,NODE分别在swarm-manager、swarm-manager2两台机器上
    Docker 多容器编排Swarm(六)
  2. 可以发现每次都会返回不同的host name,负载均衡
    Docker 多容器编排Swarm(六)
  3. swarm-manager1没有service whoami,也能访问
    Docker 多容器编排Swarm(六)

swarm-manager1执行 sudo iptables -nL -t nat 查看转发规则

Docker 多容器编排Swarm(六)
执行 ip a

可以看出在同一网段

Docker 多容器编排Swarm(六)
2. brctl show
Docker 多容器编排Swarm(六)
3. docker network ls docker network inspect docker_gwbridge
Docker 多容器编排Swarm(六)

4. docker_gwbridge 具体内容

Docker 多容器编排Swarm(六)
5. sudo ls /var/run/docker/netns sudo nsenter --net=/var/run/docker/netns/ingress_sbox
Docker 多容器编排Swarm(六)
6. iptables -nL -t mangle

,白色处具体是做负载均衡的

Docker 多容器编排Swarm(六)
7. 下载LVS管理工具, yum install ipvsadm 8. 再次进入root,执行 ipvsadm -l
Docker 多容器编排Swarm(六)

Ingress Network的数据包走向详情

Docker 多容器编排Swarm(六)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)

计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)

(美)Donald E.Knuth / 清华大学出版社 / 2002-09-01 / 83.0

计算机程序设计艺术:英文版(第2卷 半数值算法),ISBN:9787302058151,作者:(美)Donald E. Knuth著一起来看看 《计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码