swarm原理与使用

2023-10-29

一、Swarm简介

在Docker的官方文档当中,我们可以看到在Docker 1.12及更高版本中,Swarm模式与Docker Engine集成。那么Dokcer Swarm到底是个什么?

Docker Swarm是Docker官方的三剑客项目之一,提供Docker容器集群服务,是Docker官方对容器云生态镜像支持的核心方案。它是Docker公司推出的官方容器集群平台,基于Go语言实现,代码在https://github.com/docker/swarm

Docker Swarm是原生支持Docker集群管理的工具。它可以把多个Docker主机组成的系统转换为单一的虚拟Docker主机,使得容器可以组成跨主机的子网网络。

在很多台机器上部署Docker,组成一个Docker集群,并把整个集群的资源抽象成资源池,使用者部署Docker应用的时候,只需要将应用交给Swarm,Swarm会根据整个集群资源的使用情况来分配资源给部署的Docker应用,可以将这个集群的资源利用率达到最大。

使用Docker CLI创建群集,将应用程序服务部署到群集,并管理群体行为。其主要的目的就是更好的帮助用户管理多个Docker Engine,方便用户使用,像使用Docker Engine一样使用容器集群服务。

二、关于集群

1、关于集群

前面的简介里,我们提到了集群的概念。那么这里我们来说一下,什么是集群?

 集群是一组协同工作的服务实体(可理解为服务器),用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就像是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:

  • 可扩展性——集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。

  • 高可用性——集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

2、Docker集群服务概念:

在深入学习之前,我们需要明确几个概念:

- Swarm

Swarm运行 Docker Engine 的多个主机组成的集群。

从 v1.12 开始,集群管理和编排功能已经集成进 Docker Engine。当 Docker Engine 初始化了一个Swarm或者加入到一个存在的Swarm时,它就启动了 Swarm Mode。

没启动Swarm Mode时,Docker执行的是容器命令;运行Swarm Mode后,Docker增加了编排service的能力。

Docker允许在同一个Docker主机上既运行Swarm Service,又运行单独的容器。

- node

Swarm中的每个Docker Engine都是一个node,有两种类型的 node:manager 和worker。

为了向Swarm中部署应用,我们需要在manager node上执行部署命令,manager node会将部署任务拆解并分配给一个或多个worker node完成部署。

manager node负责执行编排和集群管理工作,保持并维护Swarm处于期望的状态。Swarm中如果有多个manager node,它们会自动协商并选举出一个leader 执行编排任务。

woker node接受并执行由manager node派发的任务。默认配置下manager node同时也是一个worker node,不过可以将其配置成manager-only node,让其专职负责编排和集群管理工作。

work node会定期向manager node报告自己的状态和它正在执行的任务的状态,这样manager就可以维护整个集群的状态。

- service

service定义了worker node上要执行的任务。swarm的主要编排任务就是保证 service处于期望的状态下。

举一个service的例子:在swarm中启动一个nginx服务,使用的镜像是 nginx:latest,副本数为3。

manager node负责创建这service,经过分析知道需要启动3个nginx容器,根据当前各worker node的状态将运行容器的任务分配下去,比如worker1上运行两个容器,worker2上运行一个容器。

运行了一段时间,worker2突然宕机了,manager监控到这个故障,于是立即在 worker3上启动了一个新的nginx容器。

这样就保证了service处于期望的三个副本状态。

总结一下:
swarm以节点(node)的方式组织集群(cluster);同时每个节点上面可以部署一个或者多个服务(service),每个服务又可以包括一个或者多个容器(container)

Swarm的架构图如下:

三、Swarm实战

因为现在新版本的Docker已经结合了Swarm,所以在这里主要结合的是新版本功能的Docker的演示。

1、Swarm基本命令


docker swarm init 创建Swarm,同时让swarm-manager 成为 manager node。
执行该命令后,显示添加worker node和manager node 需要执行的命令。
–advertise-addr 指定与其他node通信的地址。

docker swarm init --advertise-addr [ip]

查看swarm worker的连接令牌

docker swarm join-token worker

查看swarm manager的连接令牌

docker swarm join-token manager

加入docker swarm集群,这里的token和ip更换为具体需求下的即可。
如果忘记可以用docker swarm join-token worker查看。

docker swarm join --token SWMTKN-1-1next4gw4m7yx3j6q1f4z4ooimvp3pc1ahsnnwifu5w1h6b247-f10wphfpnyyunzphr1qp4kew1 192.168.1.245:2377
  •  

查看集群中的节点

docker node ls
  •  

将节点升级为manager

docker node promote work-node1
  •  

将节点降级为worker

docker node demote work-node1
  •  

只能删除down状态的节点,如何要删除active状态的,需要加上–force

docker node rm --force worker-manager
  •  

查看服务列表

docker service ls
  •  

查看具体服务信息,这里是web服务

docker service ps web
  •  

创建一个名称为web,副本为3,开放端口为80的nginx服务

docker service create --name web --replicas 3 -p 80:80 nginx
  •  

删除一个服务

docker service rm web
  •  

查看集群中节点信息

docker node inspect work-node1 --pretty
  •  

查看服务的详细信息

docker service inspect --pretty <SERVICE-ID>/<SERVICE-NAME>
  •  

调度程序不会将新任务分配给节点。
调度程序关闭任何现有任务并在可用节点上安排它们。

docker node update --availability drain work-node1
  •  

调度程序可以将任务分配给节点

docker node update --availability active work-node1
  •  

调度程序不向节点分配新任务,但是现有任务仍然保持运行

docker node update --availability pause work-node1
  •  

为指定的服务删除一个开放端口

docker service update --publish-rm 8080:80 web
  •  

为指定的服务添加一个开放端口

docker service update --publish-add 8080:80 web
  •  

回滚至之前版本

docker service update --rollback mysql
  •  

扩展或缩放服务中容器的数量

docker service scale web=5

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swarm原理与使用 的相关文章

  • Docker swarm mode初探

    为什么80 的码农都做不了架构师 xff1f gt gt gt Docker从1 12引入了swarm模式 xff0c swarm mode用来管理集群化的docker engines xff0c 被称作swarm 可以使用docker C
  • Docker 1.12 : 使用 Swarm 的新姿势

    本文首发于我的博客 原文链接 xff1a Docker 1 12 新特性 Docker1 12 版本做出了很大的改动 xff0c 特别是增加了对 swarm 的原生支持 xff0c 下面对新版的使用做一个总结 xff0c 供大家查阅 doc
  • docker swarm 使用说明

    docker swarm 使用说明 swarm 命令 xff1a 管理集群 docker swarm command root 64 centos docker swarm help Usage docker swarm COMMAND M
  • docker swarm init

  • 【Docker系列】Docker Swarm

    docker swarm 介绍 为什么不建议在生产环境中使用docker compose xff1f docker compose 单节点的问题 xff0c 多个实体机就无法适应的 多机器如何管理 xff1f 如果跨机器做scale横向扩展
  • Docker Swarm

    1 购买4台阿里云 按量付费买四台 2 都安装docker Xshell右键 可以将命令发送到所有会话 3 查看官网 地址 xff1a https docs docker com engine swarm 4 工作模式 5 搭建集群 私网不
  • Swarm-Formation无人机分布式集群算法浅析与仿真测试

    无人机集群一直是当今研究的热点与难点 然而 xff0c 目前相关的集群规划策略通常缺乏在杂乱环境中避开障碍的能力 为了解决无人机在密集复杂环境下的编队避障飞行这一难题 xff0c 浙江大学 Fast Lab 实验室提出了一种分布式无人机集群
  • Promethues: swarm_control解读

    标签可以对节点分组 xff0c 具有 ns 属性 xff0c 可以让节点归属某个命名空间 lt group ns 61 34 iris 0 34 gt lt group ns 61 span class token string 34 ir
  • Docker Swarm集群搭建以及服务命令等操作

    前言 之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器 但是每次机器宕机后rancher中集群特别容易挂掉 出现的问题五花八门 在网上很难搜到解决方案 所以准备采用docker官方集群管理平台Swarm管理容器 一 do
  • 部署Swarm - Deploy Swarm

    参考文档 https docs docker com swarm install manual 使用的部署环境 参考文档中是要把Swarm部署到AWS的EC2上的 没有这样的条件 所以选择在本地建立多个虚机机来搭建 操作系统选择centos
  • Linux进阶

    创作不易 来了的客官点点关注 收藏 订阅一键三连 前言 运维之基础 Linux 我是一个即将毕业的大学生 超超 如果你也在学习Linux 不妨跟着萌新超超一起学习Linux 拿下Linux 一起加油 共同努力 拿到理想offer 系列文章
  • 巅峰对决之Swarm、Kubernetes、Mesos

    转载自 http dockone io article 1138 感谢作者和编者的分享 编者的话 这篇文章对比了三大主流调度框架 Swarm Kubernetes和Mesos 文章不仅从理论上讨论了各个框架的优缺点 还从两个实际的案例出发
  • 可自动扩展的高可用Swarm集群EdgeScaler的搭建

    项目简介 应用场景 集群架构 组件描述 集群搭建 环境准备 Swarm工作节点搭建 Swarm管理节点搭建 ConfdHAProxy节点搭建 小结 项目简介 随着虚拟化和容器技术的日趋成熟 Docker越来越受到人们的关注 目前Docker
  • 容器云技术选择之kubernetes和swarm对比

    swarm和k8s本质都是容器编排服务 它们都能把底层的宿主机抽象化 然后将应用从以构建好的镜像开始 最终以docker的方式部署到宿主机上 应该选择哪种方案作为我们的容器云服务呢 我觉得k8s kubernetes简称 跟swarm的比较
  • Docker(六)----Swarm搭建Docker集群

    一 什么是Swarm Swarm这个项目名称特别贴切 在Wiki的解释中 Swarm behavior是指动物的群集行为 比如我们常见的蜂群 鱼群 秋天往南飞的雁群都可以称作Swarm behavior Swarm项目正是这样 通过把多个D
  • swarm与kubernetes的对比

    前言 docker swarm 与kubernetes都是集群管理工具 一个是docker原生自带 一个是谷歌项目下的容器编排工具 那么到底他们到底有什么有缺点呢 kubernetes kubernetes 是Google多年大规模容器管理
  • Traefik 2.0 内部仪表板“端口丢失”

    我正在尝试在 docker swarm 模式下使用 traefik 2 0 这是我的堆栈 version 3 7 services traefik image traefik latest ports 80 80 443 443 deplo
  • Docker Swarm 无法与自定义覆盖网络上的其他节点通信

    我的集群中有4个节点 其中两个在香港 其他在美国 我在群中创建了 4 个服务 Service Location foo USA bar HK haha USA hehe HK 这些服务使用相同的覆盖网络 当我尝试时ping foo or p
  • 使用嵌套字典Python的自定义类

    当使用相同的键在嵌套字典中添加值时遇到问题 并且该值始终显示相同的值 事实是 我想更新值事件 键是相同的 该算法是人工鱼群算法的基础 example gt gt fish template 0 weight 3 1 visual 2 ste
  • NSQ Docker Swarm

    我尝试在 Docker Swarm 中使用 NSQ 但没有成功 mhlg rpi nsq 是为 Raspberry Pi ARM7 板构建的 Docker 映像 如果作为普通 Docker 容器运行 我可以确认其工作正常 在 Docker

随机推荐

  • jsp利用cookie实现记住账号,密码

    这个功能很简单 不过 因为太简单 所以不是很安全 后续可以引MD5对账号密码进行加密 好了废话不多说 上代码 1引入cookie js 2 复选框 默认选中的 你也可以改为false
  • gta5nat严格怎么办_如何解决在游玩 GTA 在线模式时出现的 NAT 类型为“严格”(Strict)的错误...

    问 有错误信息提示我的 NAT 类型为 严格 Strict 这是什么意思 我该如何修改我的 NAT 类型 答 NAT 的全称是网络地址转换 特指您路由器或网关设备将您电脑的私有 IP 进行转换 并将其传输至公网 IP 和端口的功能 您的 N
  • 2022Robocom省赛(本科组)RC-u1 不要浪费金币

    哲哲最近在玩一个游戏 击杀怪物能获得金币 这里记击杀第 i 个怪物获得的金币数量为 Pi 然而这个游戏允许拥有的金币数量是有上限的 当超过时 超过上限的部分就会被系统光明正大地吃掉 哲哲就拿不到了 为了不浪费金币 哲哲决定 当下一个要击杀的
  • Java 1017 A除以B

    题目内容 本题要求计算 A B 其中 A 是不超过 1000 位的正整数 B 是 1 位正整数 你需要输出商数 Q 和余数 R 使得 A B Q R 成立 输入格式 输入在一行中依次给出 A 和 B 中间以 1 空格分隔 输出格式 在一行中
  • BI大数据的星形模型和雪花模型

    23333架构模式的选择 数据仓库的架构主要有星型和雪花型两种方式 下面从多个角度来比较一下这两种模式的利弊 从查询性能角度来看 在OLTP DW环节 由于雪花型要做多个表联接 性能会低于星型架构 但从DW OLAP环节 由于雪花型架构更有
  • vue中的动态导入样式表

    如果vue需要根据平台动态导入样式可以这样操作 在main js中定义一个判断平台的变量 const ismobile Android webOS iPhone iPad iPod BlackBerry Windows Phone i te
  • MYSQL中的连接查询

    通过对DQL的学习 我们可以很轻松的从 张数据表中查询出需要的数据 在企业的应 开发中 我们经常需要从多张表中查询数据 例如 我们查询学 信息的时候需要同 时查询学 的班级信息 可以通过连接查询从多张数据表提取数据 在MySQL中可以使 j
  • CentOS 7 openssl 3.0.10 rpm包制作 —— 筑梦之路

    源码下载地址 https www openssl org source openssl 3 0 10 tar gz 编写spec文件 cat lt lt EOF gt openssl spec Summary OpenSSL 3 0 10
  • Android 代码优化工具FindBugs

    原文地址 https juejin im post 58d4e35261ff4b00605326d9 1 前言 在我们平时项目开发中 经常会写一些不严谨的代码或者一些比较低级的错误代码 但是这些错误往往很难被发现 这样就导致了我们的项目中会
  • 洛谷 P1226 【模板】快速幂

    题目链接 https www luogu com cn problem P1226 include
  • 上半年实现营收9.24亿元,创新奇智的AI成制造业福星?

    如今 AI大模型迈入了商业化落地的新阶段 并且已经有不少产品被不知不觉地应用到了生活各个方面 其中 作为AI领域的后起之秀 创新奇智也于近日发布了截至2023年6月30日止六个月的中期业绩报告 数据显示 创新奇智2023年上半年公司实现营收
  • 线代【向量组与线性空间】--猴博士爱讲课

    第五课 向量组与线性空间 1 4判断某向量是否可由某向量组线性表示 这些只有一行 列 的矩阵既可以称作为向量 判断的标准 若 a1 a2 am 的秩与 a1 a2 am b 的秩相等 则b可由a a2 am线性表示 2 4判断某个向量组是否
  • final关键字最全了解

    final关键字的使用 在Java中声明类 属性和方法时 可使用关键字final来修饰 1 final标记的类不能被继承 2 final标记的方法不能被子类复写 3 final标记的变量 成员变量或局部变量 即为常量 只能赋值一次 fina
  • 消息队列之Kafka 日志清理(六)

    Kafka是一个基于日志的流处理平台 一个topic可以有多个分区 partition 分区是复制的基本单元 在单节点上 一个分区的数据文件可以存储在多个磁盘目录中 配置项是 A comma separated list of direct
  • ps 命令

    NAME ps report a snapshot of the current processes SYNOPSIS ps aAcdefHjlmNVwy acefghLnrsSTuvxX C lt 指令名称 gt g lt 群组名称 gt
  • 使用Java实现文件的上传

    基于表单的文件上传 标签
  • ASPX如何调用外界程序

    调用外界程序 用到Process类 这个相当于在运行中输入命令 而不是在cmd中输入命令 aspx cs页 Start方法应该是静态方法 1 using System Diagnostics 2 3 Process Start cmd c
  • idea写的过滤器

    Servlet 概念 Server 服务 applet 小程序 是运行在服务器端 tomcat 的java程序 作用 接受客户端发送过来的请求并做出响应 重定向和转发 gt 客户端 注解 Filter 过滤器 概念 过滤器实际上就是对web
  • pv=nrt_PV=NRT中的R的单位是什么?

    展开全部 1 气体状态方程的常数 2 n是物质的量 R是常数 对任意理想气体而言 R是一定的 约为e68a8462616964757a686964616f313333656532308 31441 0 00026J mol K PV nRT
  • swarm原理与使用

    一 Swarm简介 在Docker的官方文档当中 我们可以看到在Docker 1 12及更高版本中 Swarm模式与Docker Engine集成 那么Dokcer Swarm到底是个什么 Docker Swarm是Docker官方的三剑客