Docker-Swarm
2023-03-20 16:45:47 0 举报
AI智能生成
docker Swarm技术
作者其他创作
大纲/内容
是什么?
docker原生产品:docker公司推出用来管理docker集群的平台,使用GO语言开发,代码:https://github.com/docker/swarm
1、将一群docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,通过其管理这些Docker主机的各种Docker资源,换言之,各种docker client(compose,docker-py)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,大大方便了用户将原本基于单节点的系统移植到Swarm上。同时Swarm内置对Dcoker网络插件的支持,用户很容易的部署跨主机的容器集群服务。
2、Swarm与Compose一样,都是docker官方编排项目,不同的是,compose是一个单击服务器或主机上创建多个容器的工具,而docker swarm则可以在多个服务器或者主机上创建容器集群服务。
与K8S区别
原生轻量级,功能K8s更少。
Docker Swarm基本结构
分支主题
docker Client使用Swarm对集群Cluster进行调度使用,Swarm是典型的Master-slave结构,通过发现服务来选举manager。Manager是中心管理节点,各个node上运行agent接收manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持
Swarm关键概念
Swarm:集群的管理和编排是使用嵌入docker引擎SwarmKit,可以在docker初始化时启动Swarm
Node:一个节点是docker引擎集群的一个实例,可以视为docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。
要将应用程序部署到swarm,请将服务定义提交给 管理器节点。管理器节点将称为任务的工作单元分派 给工作节点。
Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。
工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。代理程序在每个工作程序节点上运行,并报告分配给它的任务。工作节点向管理器节点通知其分配的任务的当前状态,以便管理器可以维持每个工作者的期望状态。
Service:一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源,创建服务时,你需要指定使用的容器镜像
Task:在docker容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点
命令
docker swarm:集群管理
指定初始化Ip地址节点:docker swarm init --advertise-addr 管理端IP地址
去掉本地之外的所有管理者身份:docker swarm init --force-new-cluster
查询加入管理\工作节点到现在Swarm时所使用的命令和Token docker swarm join-token manager/worker
退出swarm集群:docker swarm leave
docker service:服务
docker service create 用于新服务的创建
--replicas 3
--name redis
--update-delay 10s
docker service ls:用于列出Swarm中运行的服务,以及服务状态,服务副本等基本信息
docker service ps <service> 该命令会给出更多关于某个服务副本的信息
docker service inspect:用于获取关于服务的详尽信息。附加 --pretty参数可限制仅显示重要信息
docker service scale 用于对服务副本个数进行增减
docker service update 用于对运行中的服务的属性进行变更,滚动更新
docker service logs:用于查看服务的日志
docker service rm :用于从Swarm中删除某服务。该命令会在不做确认的情况下删除服务的所有副本,所以使用时应保持警惕。
docker node:节点管理
docker node ls :用于列出Swarm中的所有节点及相关信息,包括哪些是管理节点、哪个是主管理节点
docker node demote :将管理节点降低为普通节点
docker node inspect:查看节点的详细信息
docker node promote:将普通节点升级为管理节点
docker node ps:查看运行的任务
docker node rm:从swarm集群中删除节点
docker node update:改变集群节点状态
工作模式
node工作模式
分支主题
service工作模式
分支主题
任务与调度
分支主题
服务副本与全局服务
分支主题
Swarm的调度策略
Swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持三种策略:Random、Spread、Binpack
Random:随机选择一个Node来运行容器,一般用作调试用。Spread和binpack策略会根据各个节点的可用的CPU、RAM以及正在运行的容器数量来计算应该运行容器的节点
Spread:在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的容器。使用Spread策略会使得容器会均衡分布在集群的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器
Binpack策略:最大化的避免容器碎片化,就是说binpack策略尽可能的吧还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面
Swarm Cluster模式特性
1、批量创建服务:建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式
2、强大的集群的容错性:当容器副本中的其中某一个或某几个节点宕机后,cluster会根据自己的服务注册发现机制,以及之前设定的值--replicas n,
在集群中剩余的空闲节点上,重新拉起容器副本。整个副本迁移的过程无需人工干预,迁移后原本的集群的load balance依旧好使!
不难看出,docker service其实不仅仅是批量启动服务这么简单,而是在集群中定义了一种状态。Cluster会持续检测服务的健康状态
并维护集群的高可用性。
3、服务节点的可扩展性
Swarm Cluster不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过scale参数即可复制出新的副本出来。
仔细观察的话,可以发现所有扩展出来的容器副本都run在原先的节点下面,如果有需求想在每台节点上都run一个相同的副本,方法其实很简单,只需要在命令中将"--replicas n"更换成"--mode=global"即可!
复制服务(--replicas n)将一系列复制任务分发至各节点当中,具体取决于您所需要的设置状态,例如“--replicas 3”。
全局服务(--mode=global)适用于集群内全部可用节点上的服务任务,例如“--mode global”。如果大家在 Swarm 集群中设有 7 台 Docker 节点,则全部节点之上都将存在对应容器。
4. 调度机制
所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。
0 条评论
下一页