内容简介: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)
下图是一个Service和Replicas(复制品)模型图, service是nginx,但是下面有3个replicas nginx构成了一个集群
如何创建swarm集群
swarm node节点的分配是默认随机,起初我们是不知道的
docker swarm --help #查看帮助 docker swarm init --advertise-addr=198.168.205.10 #初始化一个docker swarm manager docker node ls 复制代码
- 第一台机器,执行命令设置为主节点
- 第二台机器,执行上图中倒数第二段的命令
- 然后回到第一台manager机器查看一下当前节点
- 剩下的几台机器依次执行同样的命令
- 再次查看第一台manager机器,会发现已经有3个docker swarm node 至此,一个简单的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 复制代码
- 举例: 执行命令
docker service create --name demo busybox sh -c"while true;do sleep 3600;done"
- 执行命令
docker service ls
查看,REPLICAS表示水平扩展 - 执行命令
docker service ps demo
NODE显示node3表示demo service在我们的第三台机器上 - 执行命令
docker service scale=5
,水平扩展5个相同的服务,此时REPLICAS是5/5,5/5是什么意思呢,第一个5是表示有多少个是ready(准备),第二个5是有多少个scheuld(分片实例 - 执行命令
docker service ps demo
可以看到该servie所有部署情况
第一台机器,也就是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 复制代码
- 执行命令
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
- 查看service mysql部署情况
3.执行命令
docker service create --name wordpress -p 80:80 --env WORDPRESS_DB_PASSWORD=root --env WORDPRESS_DB_HOST=mysql --network demo wordpress
- 执行命令
docker service ps wordpress
,docker ps
查看wordpress部署情况
swarm 底层机制会同步网络的创建,因为它要实现多个节点之间容器的通信。
swarm集群服务间通信
-
docker network create -d overlay demo
创建名为demo的docker network -
执行命令
docker service create --name whoami -p 8000:8000 --network demo -d jwilder/whoami
-
执行命令
docker service ls
,docker service ps whoami
查看,可以看出service在当前机器上 -
执行命令
curl 127.0.0.1:8000
,结果返回了host name -
执行命令
docker service create --name client -d --network demo busybox sh -c "while true;do sleep 4600;done"
-
执行命令
docker service ls
,docker service ps client
查看,可以看出service在另一台机器上 -
查看并进入service client
-
看到可以ping通whoami主机地址,但是主机地址显示10.0.0.7,很显然这不是真是的ip地址
-
进入service whoami机器执行
docker service scale whoami=2
,横向扩展2个 -
再次重复第7、8步,还是同样的结果,其实这个一个vip(虚拟IP),可以使用
在部署了service whoami的机器上执行nslookup
命令查看DNSdocker exec [containerID] ip a
查看对应的容器IP地址,即可知道真实IP,VIP(虚拟IP)不会经常变动,机器IP可能变动
此时多次执行命令 curl 127.0.0.1:8000
,会发现每次返回的host name可能会变,这是因为已经提供了负载均衡功能了。
Internal Load Balancing 图:
DNS+VIP+iptables+LVS Routing Mesh的两种体现- Internal——Container和Container之间的访问通过overlay网络(通过VIP虚拟ip)
- Ingress——如果服务有绑定接口,则此服务可以通过任意swarm节点的相应接口访问
上述的操作分别采用了这2种方式
Ingress负载均衡
- 外部访问的负载均衡
- 服务端口被暴露到各个swarm节点
- 内部通过IPVS进行负载均衡
- 使用之前的例子service whoami,NODE分别在swarm-manager、swarm-manager2两台机器上
- 可以发现每次都会返回不同的host name,负载均衡
- swarm-manager1没有service whoami,也能访问
swarm-manager1执行 sudo iptables -nL -t nat
查看转发规则
ip a
可以看出在同一网段
2.brctl show
3.
docker network ls
docker network inspect docker_gwbridge
4. docker_gwbridge 具体内容
5.sudo ls /var/run/docker/netns
sudo nsenter --net=/var/run/docker/netns/ingress_sbox
6.
iptables -nL -t mangle
,白色处具体是做负载均衡的
7. 下载LVS管理工具,yum install ipvsadm
8. 再次进入root,执行
ipvsadm -l
Ingress Network的数据包走向详情
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Docker 容器编排实践练习
- Kubernetes容器编排的三大支柱
- [译] 容器编排的优势与特点
- 1.09 容器编排Kubernetes
- Kubernetes 1.11.0 发布,容器编排工具
- Kubernetes 1.10.6 发布,容器编排工具
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)
(美)Donald E.Knuth / 清华大学出版社 / 2002-09-01 / 83.0
计算机程序设计艺术:英文版(第2卷 半数值算法),ISBN:9787302058151,作者:(美)Donald E. Knuth著一起来看看 《计算机程序设计艺术 第2卷 半数值算法(第3版)(英文影印版)》 这本书的介绍吧!