Docker Swarm 介绍(docker swarm原理)

Docker Swarm 介绍(docker swarm原理)

解决方案goocz2025-01-21 10:20:1314A+A-

1.1 swarm介绍

Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用Go语言来完成的开发的,
代码开源在https://github.com/docker/swarm,它是将一群Docker宿主机变成一个单一的虚拟主机,

Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker Client(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将原本基于单节点的系统移植到Swarm上,同时Swarm内置了对Docker网络插件的支持,用户也很容易的部署跨主机的容器集群服务。

Docker Swarm和Docker Compose一样,都是Docker官方容器编排项目,但不同的是,Docker Compose是一个在单个服务器或主机上创建多个容器的工具,一而Docker Swarm则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然Docker Swarm会更加适合。

从Docker 1.12.0版本开始,Docker Swarm已经包含在Docker引擎中(docker swarm),并且已经内置了服务发现工具,不需要像之前一样,再配置 Etcd 或者 Consul来进行服务发现配置了。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,他会收集重建集群信息。

1. docker swarm
2. messos+ marathon ===> dcos
3. kubernetres ===> kes /k3s
4. nomand

主要解决问题:
解决docker server的集群化管理和部署。
Swarm通过对Docker宿主机上添加的标签信息来将宿主机资源进行细粒度分区,通过分区来帮助用户将容器部署到目标宿主机上,同样通过分区方式还能提供更多的资源调度策略扩展。

swarm能做什么:
管理节点高可用,原生支持管理节点高可用,采用raft共识算法来支撑管理节点高可用。
应用程序高可用,支持服务伸缩,滚动更新和应用回滚等部署策略。

1.2 swarm架构

在图中可以看出Docker Client使用Swarm对集群(Cluster)进行调度使用。
可以看出,Swarm是典型的master-slave结构,通过发现服务来选举manager。
manager是中心管理节点,各个node上运行agent接受manager的统一管理,
集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持
避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持

1.3 swarm概念

1.3.1 Swarm

Swarm集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm。

1.3.2 Node

Node一个节点是docker引擎集群的一个实例。您还可以将其视为Docker节点。
可以在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在
多个物理和云计算机上的Docker节点。要将应用程序部署到swarm,请将服务定义提交给管理器节点。
管理器节点将称为任务的工作单元分派给工作节点。

1.3.3 Manager

Manager节点还执行维护所需群集状态所需的编排和集群管理功能。
Manager节点选择单个领导者来执行编排任务。
工作节点接收并执行从管理器节点分派的任务。
默认情况下,管理器节点还将服务作为工作节点运行,但您可以将它们配置为仅运行管理器任务
并且是仅管理器节点。代理程序在每个工作程序节点上运行,并报告分配给它的任务。
工作节点向管理器节点通知其分配的任务的当前状态,以便管理器可以维持每个工作者的期望状态。

1.3.4 Service

Service一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。
创建服务时,你需要指定要使用的容器镜像。

1.3.5 Task

Task任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点。

1.3.6 概念汇总

(1)docker的两种模式,单引擎模式和swarm集群模式。
单引擎模式-----docker server没有加入任何集群,且自身也没有加入初始化为swarm 节点,简单的说就是我们平时所操作的孤立的
docker server。
swarm模式----当docker server 加入到任意swarm集群,或者通过docker swarm init初始化swarm集群时,docker server会自动
切换到swarm 集群模式。
(2)swarm集群中节点分类,分为:manager(管理节点)、node(工作节点)
manager:是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求以及调度Node进行
具体工作。manager 本身也是一个node节点。
Node:接受manager调度,对容器进行创建、扩容和销毁等具体操作。
(3)raft共识算法,是实现分布式共识的一种算法,主要用来管理日志复制的一致性。
当Docker引擎在swarm模式下运行时,manager节点实现Raft一致性算法来管理全局集群状态。
Docker swarm模式之所以使用一致性算法,是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致状态。
在整个集群中具有相同的一致状态意味着,如果出现故障,任何管理器节点都可以拾取任务并将服务恢复到稳定状态。
例如,如果负责在集群中调度任务的领导管理器意外死亡,则任何其他管理器都可以选择调度任务并重新平衡任务以匹配所需状态。
使用一致性算法在分布式系统中复制日志的系统需要特别小心。它们通过要求大多数节点在值上达成一致,确保集群状态在出现故障时
保持一致。
Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。
这意味着,在运行Raft的5个管理器集群中,如果3个节点不可用,系统将无法处理更多的请求来安排其他任务。
现有任务保持运行,但如果管理器集不正常,调度程序无法重新平衡任务以应对故障。
(4)Swarm管理节点高可用。
Swarm管理节点内置有对HA的支持,即使有一个或多个节点发送故障,剩余管理节点也会继续保证Swarm运转。
Swarm实现了一种主从方式的多管理节点的HA,即使有多个管理节点也只有一个节点出于活动状态,处于活动状态的节点被称为主节点
(leader),而主节点也是唯一一个会对Swarm发送控制命令的节点,如果一个备用管理节点接收到了Swarm命令,则它会将其转发给主节点。
(5)集群管理,集群创建和组织。
(6)节点管理,集群下节点角色信息变更,节点任务情况监控。
(7)服务管理,集群服务部署,服务管理等。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5