docker swarm可以轻松的部署集群,实现负载均衡,服务器的扩容和扩容的反义词.
首先docker的官方文档非常的不稳定,梯子也不解决问题.还好有替代
docs.docker.com用不了
https://docs.docker.com.zh.xy2401.com/engine/swarm/swarm-tutorial/ 很好
场景:
三台机器 x.x.x.104 x.x.x.103 x.x.x.107
104为 manager ,103,107为worker .他们三个为集群的节点
前提条件.
每个节点(node)都开放端口:
用于群集管理通信的TCP端口2377
TCP和UDP端口7946,用于节点之间的通信
UDP端口4789,用于覆盖网络流量
环境搭建步骤:
1设置hostname
在查看集群信息的时候会列出每个节点的hostname, 为了方面给每台机器设置hostname ,执行命令 分别为:
hostnamectl set-hostname swarmManager104
hostnamectl set-hostname swarmWorker107
hostnamectl set-hostname swarmWorker103
2三台机器分布安装docker
3在manager上执行创建集群的命令 (这里默认使用了ingress 网络)
docker swarm init --advertise-addr x.x.x.104 ,会得到加入集群的命令,复制下来
4在两台worker上执行 上一步得到的命令. 加入集群
5搭建完成,还没有部署服务. 以下是一些常用命令
docker service ls 查看集群上在运行的所有服务
docker service ps xxx 查看服务xxx
docker service inspect xxx 查看xxx服务的详细信息
docker service rm xxx 删除xxx服务
docker service logs --follow xxx 滚动查看xxx的日志
docker service scale xxx=2 增加或减少集群节点(指定集群的节点数)
docker swarm leave worker离开节点
docker swarm leave --force manager离开节点
验证步骤:
1 部署whoami
manager上执行 docker service create --name whoami -p 8000:8000 --network demoa -d jwilder/whoami
缺省了 --replicas参数, 默认是1,即在集群上找到一个node部署whoami服务
2 查看结果
manager执行docker service ls 看到一个node在运行服务
执行docker service ps whoami
可以看到是107在运行
2 打开监控日志
manager执行docker service logs --follow whoami 监控日志
3 浏览器访问
http://x.x.x…104:8000
http://x.x.x…103:8000
http://x.x.x…107:8000
会发现访问集群的每个节点都可以得到107的containerId
即swarm内部的路有实现了负载均衡的能力.
这时候可以再探索下docker service scale命令. 效果会跟预期一致
参考:
https://www.modb.pro/db/15196
https://www.codercto.com/a/37242.html
https://mswiderski.blogspot.com/2016/12/kie-server-router-even-more-flexibility.html
ps:一级标题二级标题真好用