👨🏻🎓博主介绍:大家好,我是芝士味的椒盐,一名在校大学生,热爱分享知识,很高兴在这里认识大家🌟
🌈擅长领域:Java、大数据、运维、电子
🙏🏻如果本文章各位小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏,相应的有空了我也会回访,互助!!!
🤝另本人水平有限,旨在创作简单易懂的文章,在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
@[TOC]
什么是Swarm
- Swarm是Docker公司推出的用来管理docker集群的平台.
- Swarm集成在Docker中无需安装
- 工作原理
Swarm常用命令
常用命令
作为集群的管理docker swarm
- 初始化一个
swarmdocker swarm init
- 指定初始化ip地址节点
docker swarm init --advertise-addr 管理端IP地址
- 去除本地之外的所有管理器身份
docker swarm init --force-new-cluster
- 将节点加入swarm集群,两种加入模式manager与worker
docker swarm join
- 工作节点加入管理节点需要通过join-token认证
docker swarm join-token
- 重新获取docker获取初始化命令
docker swarm join-token worker
- 离开swarm
docker swarm leave
- 对swarm集群更新配置
docker swarm update
- 初始化一个
管理swarm节点docker node
- 查看集群中的节点
docker node ls
- 将manager角色降级为worker
docker node demote 主机名
- 将worker角色升级为manager
docker node promote 主机名
- 查看节点的详细信息,默认json格式
docker node inspect 主机名
- 查看节点信息平铺格式
docker node inspect --pretty 主机名
- 查看运行的一个或多个及节点任务数,默认当前节点
docker node ps
- 从swarm中删除一个节点
docker node rm 主机名
- 更新一个节点
docker node update
- 对节点设置状态(“active”正常|“pause”暂停|“drain”排除自身work任务)
docker node update --availability
- 查看集群中的节点
服务管理docker service
- 创建一个服务
docker service create
- 创建的副本数
docker service create --replicas 副本数
- 指定容器名称
docker service create --name 名字
- 每次容器与容器之间的更新时间间隔。
docker service create --update-delay s秒
- 更新时同时并行更新数量,默认1
docker service create --update-parallelism 个数
- 任务容器更新失败时的模式,(“pause”停止|”continue“继续),默认pause。
docker service create --update-failure-action 类型
- 每次容器与容器之间的回滚时间间隔。
docker service create --rollback-monitor 20s
- 回滚故障率如果小于百分比允许运行
docker service create --rollback-max-failure-ratio .数值(列“.2”为%20)
- 添加网络
docker service create --network 网络名
- 创建volume类型数据卷
docker service create --mount type=volume,src=volume名称,dst=容器目录
- 创建bind读写目录挂载
docker service create --mount type=bind,src=宿主目录,dst=容器目录
- 创建bind只读目录挂载
docker service create --mount type=bind,src=宿主目录,dst=容器目录,readonly
- 创建dnsrr负载均衡模式
docker service create --endpoint-mode dnsrr 服务名
- 创建docker配置文件到容器本地目录
docker service create --config source=docker配置文件,target=配置文件路径
- 创建添加端口
docker service create --publish 暴露端口:容器端口 服务名
- 创建一个服务
搭建Docker集群(双主双从)
搭建Docker集群[双主双从]
- manager节点和Leader节点是可以触达的
- docker swarm init -advertise-addr [初始化集群,节点为主节点发起集群,公网/内网ip]
- docker swarm join-token worker/manager 获取令牌,该令牌将未加入集群的节点变成w/m
- docker node ls 查看加入集群的节点
Raft协议
- 双主双从:假设一个节点挂了!其他节点是否可用
- Raft协议:保证大多数节点存活才能用!主节点至少要>3台!
实验:
- 原本的双主双从配置如下分布
- 将swarm1停掉,在swarm4为上使用docker node ls查看集群状态,会发现卡住[验证双主双从的缺点]
- 启动swarm1会发现原本为管理节点的swarm4变成主节点leader,现在启动的swarm1变成管理节点Reachable
- 让swarm3 leave集群,节点列表不会删除会显示
STATUS=Down
- 原本的双主双从配置如下分布
- 当swarm3重新加入集群之后,原本的那条STATUS还是会存在,只不过会有一个新的集群id,可以用docker node rm id将其记录删除
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/9f0cde42f9a24a6e996813308beb2f38.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)
- Tips ⚠️ :如果是某一个节点短暂的时间因为故障停掉了,然后又回来了,那么原本Down的那条记录就会变回Ready,效果不是和leave一样!切记!
---
- 将双主双从转变成准守Raft协议,实验如下:
- 在swarm2上使用docker swarm leave先让其离开集群
- 在有权限的manager或者leader上获得manager的令牌docker swarm join-token manager
- 将令牌给swarm2,则swarm2变成Reachable节点
- 停掉swarm2,不会让集群停止,会显示不可达。这就是保证高可用。遵守Raft协议
![在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/5e8422273b3249478fceb481441ae508.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6Iqd5aOr5ZGz55qE5qSS55uQ,size_20,color_FFFFFF,t_70,g_se,x_16)
Swarm弹性服务
Swarm创建弹性服务
- 弹性!扩缩容!集群!
- 容器、副本、服务。
- docker-compose up !启动单个项目,单机。
- 集群swarm:docker service...
灰度发布/金丝雀发布
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式
Tips ⚠️ :
docker run
启动容器,不具备扩缩容的功能!docker service
服务启动,具有扩缩容的功能,滚动更新!实例操作:
- 在基于Raft协议的基础上操作。
docker service create -p 5000:80 —name=menginx nginx
创建nginx服务docker service inspect menginx
查看menginx服务的元数据docker service update —replicas 3 menginx
扩展多个副本数量,也就是启动多个nginx服务
Tips ⚠️ :访问的时候地址是init初始化docker集群时的地址,不管这台主机是否正常只要有两台台以上的MR存活,集群就会向外提供服务。docker node ls查看到某个ID后面有星号说明当前正处于该服务器下。
docker service scale menginx=5
scale的作用和update效果一样的扩缩容概念总结
- Swarm:集群的管理和编号
- Node:就是一个docker节点
- Service:任务,可以管理节点或者工作节点来运行
- Task:容器内的命令
- 不变逻辑
命令→ 管理→api →调度→工作节点(创建Task容器维护创建)
- 调整service以什么方式运行
```docker
#每个工作节点上运行一个任务
docker service --mode global
#按照一定规则在各个工作节点上运行指定个数的任务。
docker service --mode replicated
```
- 拓展:网络模式 "PublishMode": "ingress"
- Swarm:
- Overlay:将几台不同的服务器上的,ip是不同的,使用Overlay将集群变成一个整体,加入一个共同的网络。
- "ingress":特殊的Overlay网络!负载均衡!IPVS VIP