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

14、Docker swarm-1-理论

Docker swarm-1

本章要点:docker-swarm集群基础理论,docker compose与swarm的对比

参考文档:Docker Swarm 全面总结,Docker Swarm介绍,Docker之Swarm详细讲解,Swarm 集群管理,compose 多主机网络共享 overlay,纳米ai

Docker swarm概述

​ 我们用完docker compose就会发现它只能在单台机器上运行,如果是多主机节点,那compose就不太适用了,这里就需要用到swarm, Swarm是Docker官方提供的一款集群管理工具, 几乎全部用 GO 语言来完成的开发的,代码开源站点, 其主要作用就是若干台安装docker的机器抽象为一个整体, 并且通过一个入口统一管理这些Docker主机上的各种Docker资源。

Docker Swarm 与 Docker Compose 对比分析

来源: 可参考ai查询

  • 核心定位与功能

    特性Docker ComposeDocker Swarm
    核心目标管理单主机上的多容器应用管理多主机容器集群,提供服务编排、高可用和负载均衡
    部署范围仅限当前主机跨多个服务器或节点组成的集群
    服务编排能力通过 docker-compose.yml 定义多容器依赖关系,一键启动/停止应用支持服务扩缩容、滚动更新、自愈能力(容器异常时自动重启)
    负载均衡无内置负载均衡,需手动配置内置 DNS 负载均衡,支持服务发现和外部负载均衡集成
    高可用不支持,依赖单主机稳定性基于 Raft 协议选举 manager 节点,避免单点故障
  • 架构差异

    • Docker Compose

      • 采用单机架构,通过 YAML 文件(docker-compose.yml )声明多个容器的配置(如镜像、端口、 volumes、依赖关系等),执行 docker-compose up 即可按配置启动所有服务。仅能管理当前主机上的容器,不具备跨主机调度能力。
    • Docker Swarm

      • 采用 master-slave 集群架构:

        • Manager 节点:负责集群管理、服务调度、负载均衡配置等。

        • Worker 节点:运行容器并接受 Manager 节点的统一管理。

          集群通过 Raft 协议自动选举 Manager 节点,确保高可用,无需额外依赖外部服务 。

  • 适用场景

    工具适用场景不适用场景
    Docker Compose1. 开发环境的多容器应用测试(如前端+后端+数据库)
    2. 单主机部署的小型应用
    1. 生产环境的大规模集群部署
    2. 跨主机容器管理
    Docker Swarm1. 生产环境的容器集群管理
    2. 需高可用和负载均衡的微服务架构
    1. 单机环境的简单应用部署
    2. 复杂的容器编排需求(如自动扩缩容策略)
  • 总结

    • 若需在单机环境快速管理多容器应用,选择 Docker Compose;
    • 若需跨主机集群部署并保证高可用,选择 Docker Swarm。
    • 生产环境中,Swarm 适合中小型集群,复杂场景可考虑 Kubernetes。

服务架构

请添加图片描述

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

工作原理

  • Docker Engine client

    docker service create:我们通过 docker service create 这个命令去创建一个服务
    
  • swarm manager

    • 调度

      • API:这个请求直接由Swarm manager的API进行接收,接收命令并创建服务对象。
      • orchestrator:为服务创建一个任务。
      • allocater:为这个任务分配IP地址。
      • dispatcher:将任务分配到指定的节点。
      • scheduler:再该节点中下发指定命令。
    • 其使用Raft实现,管理器维护整个 swarm 及其上运行的所有服务的一致内部状态。为了利用 swarm 模式的容错特性,Docker 建议您根据组织的高可用性要求实现奇数个节点。当您有多个管理器时,您可以在不停机的情况下从管理器节点的故障中恢复。

      • 三个管理器的群体最多可以容忍一个管理器的损失。
      • 一个五管理器群可以容忍最大同时丢失两个管理器节点。
      • 一个N管理器集群最多可以容忍管理器的丢失 (N-1)/2。
      • Docker 建议一个群最多有七个管理器节点。
  • worker node

    • 调度
      • container:创建相应的容器。
      • worker:连接到调度程序以检查分配的任务。
      • executor:执行分配给工作节点的任务。
    • 工作节点也是 Docker 引擎的实例,其唯一目的是执行容器。Worker 节点不参与 Raft 分布式状态,不做出调度决策,也不为 swarm 模式 HTTP API 提供服务。

    请添加图片描述

重要概念

  • Swarm:集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm。
  • Node:每一个docker engine都是一个node(节点),分为 manager 和worker。Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Work节点接收并执行从管理器节点分派的任务。
  • Service:一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。
  • Task:任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点。一个任务包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。

命令行说明

  • docker swarm:集群管理

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

    • 子命令说明,通过 docker swarm --help查看

      参数说明
      init初始化集群
      join将节点加入集群
  • docker service:服务管理

    • 作用: 一个服务是work节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令

    • 子命令说明,通过docker service --help查看

      参数说明
      create创建一个新的服务
      inspect列出一个或多个服务的详细信息
      ps列出一个或多个服务中的任务信息
      ls列出服务
      rm删除一个或多个服务
      scale扩展一个或多个服务
      update更新服务
  • docker node:节点管理

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

    • 子命令说明,通过docker node --help查看

      参数说明
      demote将集群中一个或多个节点降级
      inspect显示一个或多个节点的详细信息
      ls列出集群中的节点
      promote将一个或多个节点提升为管理节点
      rm从集群中删除停止的节点,–force强制删除参数
      ps列出一个或多个节点上运行的任务
      update更新节点

调度策略

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

  • Spread

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

    • Binpack策略最大化的避免容器碎片化,就是说 binpack 策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。
  • Random

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

    策略类型核心逻辑优势局限性适用场景
    Spread(默认)优先选择资源(CPU、内存)占用最少的节点,均衡分配容器。集群负载均衡,避免单点过载,提升整体稳定性。在复杂资源需求场景下可能导致资源碎片化,部分节点资源利用率低。通用场景,需保证节点负载均匀的业务。
    Binpack优先将容器集中调度到资源剩余较多的节点,尽可能填满节点。提高单节点资源利用率,减少空闲节点,降低硬件成本。可能导致部分节点负载过高,影响任务执行效率和容错能力。资源密集型任务,需最大化硬件利用率。
    Random随机选择节点分配容器(简单策略,较少实际应用)。实现简单,无复杂计算开销。完全不考虑资源状态,可能导致负载失衡和资源浪费。测试环境或对调度效率要求极低的场景。

Cluster 模式特性

  • 批量创建服务: 建立容器之前先创建一个 overlay 的网络,用来保证在不同主机上的容器网络互通的网络模式。
  • 强大的集群的容错性: Swarm Cluster 不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过 scale 参数即可复制出新的副本出来。如果有需求想在每台节点上都 run 一个相同的副本,方法其实很简单,只需要在命令中将 “–replicas n” 更换成 “–mode=global” 即可!
  • 复制服务(–replicas n): 将一系列复制任务分发至各节点当中,具体取决于您所需要的设置状态,例如 “–replicas 3”。
  • 全局服务(–mode=global): 适用于集群内全部可用节点上的服务任务,例如“–mode global”。如果大家在 Swarm 集群中设有 7 台 Docker 节点,则全部节点之上都将存在对应容器。
  • 调度机制: 所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。
http://www.dtcms.com/a/541040.html

相关文章:

  • Jenkins Share Library教程 —— 企业级 Jenkins Shared Library 实战示例
  • 做微新闻怎么发视频网站seo网站沙盒期
  • 中国建设信息港网站wordpress开源程序建站教程
  • Win11 跨设备同步的便笺内容突然丢失,如何恢复?
  • 三、cmake语法-提高篇
  • 仓颉编程(20)泛型
  • Go语言2D游戏开发入门004:零基础打造射击游戏《太空大战》3
  • 学习FreeRTOS(FreeRTOS移植到STM32F103C8T6)
  • json缩放 json 缩放
  • maxkb部署,版本升级步骤与注意事项(超详细图文)
  • 测试开发话题02---概念篇
  • 网站建设推广优化排名全国工商核名查询系统官网
  • ASP Content Linking
  • 【研究生随笔】Pytorch中的卷积神经网络(1)
  • Android运行项目报错集合
  • 为什么电脑会蓝屏?怎么快速解决电脑蓝屏问题
  • js建设网站html5网站开发价格
  • ESP32学习笔记(基于IDF):OneNET物模型数据交互(控制小灯)
  • JavaScript逆向与爬虫实战——基础篇(css反爬之动态字体实现原理及绕过)
  • 浏览器在请求 js/css 静态文件时,服务器返回了 500 内部错误 500 Internal Server Error
  • CSS 实现酷炫的不规则圆角与斜角边框效果(四种方法详解)
  • 在线网站地图生成器自建购物网站多少钱
  • 网站开发的整个流程一家只做卫生巾的网站
  • xv6-riscv开发调试环境搭建(vscode+ubuntu)
  • 架构兜底五大手段:构建韧性系统的全面防御体系
  • 阿里巴巴有几个网站是做外贸的wordpress 禅意主题
  • 在 `PaddleOCR` 中配置自定义模型(如自己训练的检测/识别模型)
  • 云谷系统网站开发网站备案要收费吗
  • 前端页面初始化加载速度优化方案
  • 【数据库】金仓数据库构建集团化医院全栈信创“全链路解决方案”