跨节点 docker 容器编排工具 -- docker swarm

本文介绍了DockerSwarm,一个Docker官方的容器编排工具,特别适合微服务部署。它作为Docker引擎的一部分,具有分布式、声明式服务模型和自动伸缩等特点。文章详细讲解了其特性、架构以及常用命令,与Kubernetes相比更易于学习。
摘要由CSDN通过智能技术生成
1、docker swarm 简介

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

1.1、特性介绍
  • 作为docker引擎一部分的集群管理:用docker引擎的命令行接口来创建一个docker引擎的集群,用来部署应用服务。你不需要额外安装软件来创建或管理集群。(docker自带的集群编排管理工具,兼容性好,学习成本低(相比kubernetes))。
  • 分散化设计:不是在发布时处理不同的节点角色,而是在运行时,docker引擎才会根据不同的节点角色区别处理。你可以用docker引擎发布节点,管理者和工作者等各种角色。这意味着你可以用一个磁盘镜像构建整个集群。
  • 声明式服务模型:docker引擎通过声明式的接口来允许你定义应用栈中服务的希望的状态。比如,你可以定义一个由包含消息查询功能的web前端和一个数据库后端组成的应用。
  • 可伸缩:对于每个服务,你可以声明你想要允许的任务(task,应该是运行任务的容器)数量。当你伸缩服务时,集群管理器会通过添加或删除任务来自动到达你期望的状态。
  • 期望状态的保持:集群管理器会不断监控集群状态,并会消除任何实际状态和期望状态之间的差别。比如,如果你设置一个服务允许一个容器的10个副本,然后一个运行着副本中的2个的工作机器挂掉了,管理器会创建两个新的副本来代替挂掉的副本,并会把新的副本分配给正在运行且可用的工作机器。
  • 多主机的网络:你可以为你的服务指定一个overlay式网络。当集群初始化或更新应用时,集群管理器会自动给网络中的容器分配地址。
  • 服务发现:集群管理器会给集群中的每个服务提供唯一的DNS名和运行在容器中的负载均衡功能。你可以通过集群内置的DNS服务器来查询集群中的每个容器。
  • 负载均衡:你可以把服务的端口暴露给外部的负载均衡器。在内部,集群允许你指定如何在节点间分布服务容器。
  • 默认的安全保证:每个集群中的节点都会开启TLS相互认证(TLS mutual authentication),并会加密它和其他节点间的安全通信。你可以选择是用自定义的root认证还是从常用的rootCA认证。
  • 滚动更新:在首次发布时,你可以递增地把服务发布到节点上。集群管理者允许你控制服务发布到不同节点集之间的延时。如果发布出问题,你可以把服务回滚到上一个版本。
 1.2、docker swarm 架构

docker swarm是的master-slave结构,通过服务发现来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持。

2、docker swarm 常用命令
2.1、docker swarm 集群管理命令 
# 1、初始化一个集群,当前节点为 master
docekr swarm init        

# 2、默认初始化后,会生成一个让其他节点加入到集群的命令,在其他节点运行,就会以worker身份加入集群

示例: docker swarm join --token SWMTKN-1-1f7db2no1qter02pum86hu59yd3japp28a8qaf5sqztwfm5byd-0h80ujov6w97ge2379rfgiyw6 192.168.109.132:2377

# 3、如果要指定加入的是worker还是manager,需要在当前节点先执行:
docker swarm join-token manager|worker

执行完会生成命令:docker swarm join --token SWMTKN-1-1f7db2no1qter02pum86hu59yd3japp28a8qaf5sqztwfm5byd-bihtpjbnpssm1isk7q1whul2p 
这个命令在其他节点中执行即可。
2.2、docker swarm 常用命令
docekr swarm join        # 加入一个集群
docekr swarm join-token (worker|manager) #  指定节点加入集群的身份,生成token
docekr swarm leave       # 在要移除的节点中执行
docekr swarm unlock      # 解锁节点
docekr swarm unlock-key  # 查看秘钥
docekr swarm update      # 更新集群配置信息
# swarm集群中上锁,即,某个节点退出集群,需要解锁才能再加入集群中(docker swarm update --autolock=true),设置完 --autolock=true 之后,可以通过 docker swarm unlock-key (-q)查看生成的秘钥。
2.3、节点管理
# 节点管理(只有manager才能使用)
docker node ls/inspect/ps/rm/.... nodeId
docker node promote nodeId   # 将某个节点升级为manager
docker node demote nodeId    # 将某个管理节点降级为worker节点
docker node rm nodeId  # 仅能删除工作节点,如果要删除manager节点,进行降级处理为工作节点后删除
2.4、服务集群部署
# 集群部署
docker service create --name ** -p 81:80 --replicas 3 指定镜像
docker service ls  # 查看服务列表
docker service scale serviceName=10  # 将指定服务进行扩容
# 通过docker node ls 查看availability字段(active、pause、drain) 
# pause:挂起的节点,上面的容器在缩容的时候会减少,扩容的时候不会增加
# drain:排除节点,不会部署任何容器,已有容器会迁移到集群中其他节点上
# 排除/挂起恢复之后,只有在扩容的时候才会分配容器
# 更新服务(使用指定镜像更新指定服务,通过docker service update --help查看更新使用命令)
docker service update --image 指定镜像  指定服务名

总结:docker swarm 是对docker 集群轻量级的编排管理工具,相比k8s简单易学,适合小规模 docker 集群管理,k8s适合大规模容器化集群管理。

         本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知其_所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值