当前位置: 首页 > news >正文

Docker Swarm:打造高效、可扩展的容器编排引擎,引领微服务新纪元(上) - 实践

  • 作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注
  • 座右铭: 云端筑梦,数据为翼,探索无限可能,引领云计算新纪元
  • 个人主页:团儿.-CSDN博客

前言:

在云计算和容器技术飞速发展的今天,Docker Swarm作为Docker原生支持的容器编排引擎,正逐渐成为企业构建云原生应用的关键选择。Docker Swarm不仅提供了强大的容器管理功能,还具备高度的可扩展性和灵活性,使得企业能够轻松应对各种复杂的业务场景。

本文旨在深入剖析Docker Swarm的核心原理和实践应用,帮助读者全面了解和掌握这一科技。我们将从Docker Swarm的基本概念入手,逐步深入其架构设计、部署配置、服务管理、网络与安全等关键领域。同时,我们还将结合丰富的实战案例,展示Docker Swarm在微服务架构、持续集成/持续部署(CI/CD)、资源调度与优化等方面的应用实践。


正文:

一、什么是Docker Swarm

Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来结束的构建的,代码开源在就是Swarmhttps://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客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,他会收集重建集群信息。就是从 Docker 1.12.0 版本开始,Docker Swarm 已经包括在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再部署 Etcd 或者 Consul 来进行服务发现调整了。 Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只

二.Docker Swarm 基本结构

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


三.Swarm的几个关键概念

1.Swarm

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

2.Node

通过docker引擎集群的一个实例,能够将其视为Docker节点。就是一个节点

您可能在单个物理计算机或云服务器上运行一个或多个节点,但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。

要将应用程序部署到swarm,请将服务定义提交给管理器节点。

管理器节点将称为任务的工作单元分派给工作节点。

Manager节点还执行维护群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。
worker工作节点接收并执行从管理器节点分派的任务。

3.Service

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

4.Task

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

-----------------------------使用方法-----------------------------

docker swarm:集群管理,子命令有init, join, leave, update。(docker swarm --help查看辅助) docker service:服务创建,子命令有create, inspect, update, remove, tasks。(docker service--help查看帮助)

docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助) node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node。

node分为: manager nodes,也就是管理节点 worker nodes,也就是工作节点

1)manager node管理节点:

执行集群的管理功能,维护集群的状态,选举一个leader节点去执行调度任务。

2)worker node工作节点:

接收和执行任务。参与容器集群负载调度,仅用于承载task。

3)service服务:

运行在worker nodes上的task的描述,service的描述包括使用哪个docker 镜像,以及在使用该镜像的容器中执行什么命令。就是一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。 service

4)task任务:

service的执行实体,task启动docker容器并在容器中执行任务。就是一个任务囊括了一个容器及其运行的命令。task


四、Swarm的调度策略

Swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前协助的策略有:spread, binpack, random.

1)Random

顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运
行的容器的数量来计算应该运行容器的节点。


2)Spread

在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
应用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。

3)Binpack

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 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。

------------------Swarm cluster的创建过程包含以下三个步骤----------------------
1)发现Docker集群中的各个节点,收集节点状态、角色信息,并监视节点状态的变化
2)初始化内部调度(scheduler)模块
3)创建并启动API监听服务模块

通过一旦创建好该cluster,就能够用命令docker service批量对集群内的容器进行操作,相当方便!

在启动容器后,docker 会根据当前每个swarm节点的负载判断,在负载最优的节点运行这个task任务,用"docker service ls" 和"docker service ps + taskID"行看到任务运行在哪个节点上。容器启动后,有时需要等待一段时间才能完成容器创建。


期待您的关注~

http://www.jsqmd.com/news/294861/

相关文章:

  • 学习进度 8
  • 小主机连接显示屏显示无信号,大致是突然就不能用了
  • 2026绵阳评价高医美机构品牌推荐
  • 实战指南:高效批量测试SSH连接的最佳实践与避坑手册
  • 深度测评专科生必备!10款一键生成论文工具TOP10大对比
  • 2026年绵阳医美机构最新推荐:绵阳做一次超声炮效果维持多久/绵阳做完祛眼袋多久能恢复/绵阳做祛眼袋大概多少钱/选择指南
  • 2026年深圳跨境电商财税合规与记账报税公司综合评测与推荐:深圳信质远企服聚焦核心运营,成为行业黑马
  • 导师严选9个AI论文写作软件,MBA论文高效搞定!
  • 2026年清洗机厂家推荐:医用清洗机/医用清洗机/医用超声波清洗机/医疗器械清洗机/半自动超声波清洗机/单槽超声波清洗机/选择指南
  • 警惕大润发购物卡回收陷阱
  • Linux 环境下利用宝塔 + Discuz + Cpolar 搭建全网可访问论坛
  • 分布式光伏配电网非精确概率故障诊断【附代码】
  • ISO/IEC 23053:2022中文版
  • 深度学习框架YOLOV8模型如何训练无人机建筑垃圾检测数据集 建立基于深度学习框架YOLO8建筑垃圾检测系统 建筑废弃物
  • 温暖治愈的简短故事清单:5个长篇童话,把今晚的不安轻轻放下
  • 2026年GEO优化服务商性价比对比:中小企业10万预算如何花出30万效果?
  • 2026年五金行业高精度超声波清洗机优质厂商推荐
  • 22-RSA全扣+标准AES:网易云
  • 救命神器2026 TOP8 AI论文工具:继续教育写作全攻略
  • 2026年GEO优化服务商选型清单:中小企业必问的8个问题
  • 23-MD5:淘宝
  • 面试 Java 基础八股文十问十答第二十一期
  • 2026年GEO优化服务商收费对比:中小企业按月付费vs年费哪个划算?
  • 所爱
  • 从DEM到三维地形:用PLY、OBJ、glTF构建GIS可视化模型
  • 2026年GEO优化服务商工具对比:中小企业自助式vs托管式怎么选?
  • 2026年适合中小企业的GEO优化服务商TOP5:按需求分类推荐
  • 多模态AI服务的“流量容灾”:根据内容类型切换备份节点
  • 46、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(三) - 详解
  • 论文写作效率翻倍!9款AI工具免费生成开题报告与论文大纲,写论文不再愁!