首页 > 其他分享 >docker swarm 使用详解

docker swarm 使用详解

时间:2023-08-13 23:45:22浏览次数:36  
标签:容器 Swarm swarm 详解 集群 docker 节点

转载请注明出处:

1.docker swarm 的组成架构

  一个基本的docker swarm 的架构如下:

  

  它主要包含这几个核心组件:

  1. Manager节点(Manager Nodes): 管理节点是Swarm集群的控制中心,负责整个集群的管理和调度。Swarm可以有一个或多个Manager节点,其中一个被选举为Leader,负责领导整个集群。

  2. Worker节点(Worker Nodes): 工作节点是集群中运行容器的实际节点。它们接受从Manager节点分配的任务,并在本地运行容器。

  3. Overlay网络(Overlay Network): Overlay网络是Swarm集群中容器之间进行跨主机通信的虚拟网络。它使用VXLAN技术将多个主机上的容器连接到同一个网络中。

  4. Service服务(Services): 服务是在Swarm集群中定义和运行的容器应用程序。服务可以由多个副本(replicas)组成,Swarm会自动在集群中的各个节点上调度和管理这些副本。服务可以通过负载均衡、自动伸缩等特性来保证高可用性和容错性。

2.docker swarm的作用和应用场景

  Docker Swarm是Docker提供的原生容器编排和集群管理工具,它允许用户将多个Docker主机组成一个虚拟集群,以便更轻松地管理和部署容器化应用程序。 

  1. 集群管理:

  • Swarm模式: Docker Swarm使用Swarm模式来组织和管理集群。集群中有一个或多个Manager节点和多个Worker节点,其中Manager节点负责集群管理和调度,而Worker节点运行容器。
  • 高可用性: Swarm集群中的Manager节点通过Raft一致性协议进行选举,确保在Leader节点故障时能够自动切换到其他Manager节点,保证集群的高可用性。

  2. 服务定义和部署:

  • Service服务: 在Swarm中,用户通过定义和部署服务来描述应用程序的架构和需求。服务可以由多个副本(replicas)组成,Swarm会自动在集群中的各个节点上调度和管理这些副本。
  • Stack堆栈: 用户可以使用Docker Compose文件来定义多个服务,并使用docker stack deploy命令部署整个Stack。这样可以一次性启动整个应用的所有服务。

  3. 容器通信和负载均衡:

  • Overlay网络: Swarm集群中的容器通过Overlay网络进行跨主机通信。Swarm会自动创建和管理这些Overlay网络,并为每个服务分配一个虚拟网络。容器可以使用服务名称进行相互通信,而不用关心实际运行在哪个节点上。
  • 负载均衡: Swarm集群内置了负载均衡功能,它会自动将外部请求路由到运行服务的节点。这样,用户可以通过任何节点访问服务,Swarm会自动将请求转发到负载最低的容器。

  4. 弹性伸缩和滚动更新:

  • 弹性伸缩: 用户可以根据需求随时增加或减少服务的副本数量,以适应应用程序的流量变化。Swarm会自动在集群中的节点上启动或停止容器,保持所需的副本数量。
  • 滚动更新: Swarm支持滚动更新,可以逐步替换旧版本的容器。这样可以避免应用程序中断并提供无缝的升级体验。

  5. 监控和日志收集:

  • 监控: Swarm集群可以与各种监控工具集成,如Prometheus、Grafana等,以收集和展示容器和集群的统计信息。
  • 日志收集: Swarm集群可以使用日志驱动来收集容器的日志,并将其重定向到指定的位置,如Elasticsearch、Logstash等。

  Docker Swarm是一个强大且易于使用的容器编排和集群管理工具,它可以简化容器应用程序的部署、管理和扩展。Swarm提供了高可用性、容器通信、负载均衡、弹性伸缩等功能,适用于各种规模的应用场景。

3.docker swarm 配置

  不包含在任何Swarm中的Docker节点,称为运行于单引擎(Single-Engine)模式。一旦被加入Swarm集群,则切换为Swarm模式。在单引擎模式下的Docker主机上运行docker swarm init会将其切换到Swarm模式,并创建一个新的Swarm,将自身设置为Swarm的第一个管理节点。

  更多的节点可以作为管理节点或工作节点加入进来。这一操作也会将新加入的节点切换为 Swarm模式。

  (1).登录到node1(mgr1)并初始化一个新的Swarm初始化一个全新的Swarm

$ docker swarm init \
  --advertise-addr 10.0.0.1:2377 \
  --listen-addr 10.0.0.1:2377

Swarm initialized: current node (d21lyz...c79qzkx) is now a manager.

  将这条命令拆开分析如下。

  ● docker swarm init会通知Docker来初始化一个新的Swarm,并将自身设置为第一个管理节点。同时也会使该节点开启Swarm模式。

  ● --advertise-addr指定其他节点用来连接到当前管理节点的IP和端口。这一属性是可选的,当节点上有多个IP时,可以用于指定使用哪个IP。此外,还可以用于指定一个节点上没有的IP,比如一个负载均衡的IP。

  ● --listen-addr指定用于承载Swarm流量的IP和端口。其设置通常与--advertise-addr相匹配,但是当节点上有多个IP的时候,可用于指定具体某个IP。并且,如果--advertise-addr设置了一个远程IP地址(如负载均衡的IP地址),该属性也是需要设置的。建议执行命令时总是使用这两个属性来指定具体IP和端口。

  Swarm模式下的操作默认运行于2337端口。虽然它是可配置的,但2377/tcp是用于客户端与Swarm进行安全(HTTPS)通信的约定俗成的端口配置。

  (2).列出Swarm中的节点。

$ docker node ls
ID            HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
d21...qzkx *  mgr1      Ready   Active        Leader

  此时mgr1是Swarm中唯一的节点,并且作为Leader列出

  (3)在mgr1上执行docker swarm join-token命令来获取添加新的工作节点和管理节点到Swarm的命令和Token。

$ docker swarm join-token worker
To add a manager to this swarm, run the following command:
   docker swarm join \
   --token SWMTKN-1-0uahebax...c87tu8dx2c \
   10.0.0.1:2377

$ docker swarm join-token manager
To add a manager to this swarm, run the following command:
   docker swarm join \
   --token SWMTKN-1-0uahebax...ue4hv6ps3p \
   10.0.0.1:2377

  请注意,工作节点和管理节点的接入命令中使用的接入Token(SWMTKN...)是不同的。因此,一个节点是作为工作节点还是管理节点接入,完全依赖于使用了哪个Token。接入Token应该被妥善保管,因为这是将一个节点加入Swarm的唯一所需!

  (4)登录到wrk1,并使用包含工作节点接入Token的docker swarm join命令将其接入Swarm。

$ docker swarm join \
    --token SWMTKN-1-0uahebax...c87tu8dx2c \
    10.0.0.1:2377 \
    --advertise-addr 10.0.0.4:2377 \
    --listen-addr 10.0.0.4:2377

This node joined a swarm as a worker.

  --advertise-addr与--listen-addr属性是可选的。在网络配置方面,请尽量明确指定相关参数,这是一种好的实践。

  (5)在wrk2和wrk3上重复上一步骤来将这两个节点作为工作节点加入Swarm。确保使用--advertise-addr与--listen-addr属性来指定各自的IP地址。

  (6)登录到mgr2,然后使用含有管理节点接入Token的docker swarm join命令,将该节点作为工作节点接入Swarm。

$ docker swarm join \
    --token SWMTKN-1-0uahebax...ue4hv6ps3p \
    10.0.0.1:2377 \
    --advertise-addr 10.0.0.2:2377 \
    --listen-addr 10.0.0.1:2377

This node joined a swarm as a manager.

  (7)在mgr3上重复以上步骤,记得在--advertise-addr与--listen-addr属性中指定mgr3的IP地址。

  (8)在任意一个管理节点上执行docker node ls命令来列出Swarm节点。

$ docker node ls
ID                HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
0g4rl...babl8 *   mgr2      Ready   Active        Reachable
2xlti...l0nyp     mgr3      Ready   Active        Reachable
8yv0b...wmr67     wrk1      Ready   Active
9mzwf...e4m4n     wrk3      Ready   Active
d21ly...9qzkx     mgr1      Ready   Active        Leader
e62gf...l5wt6     wrk2      Ready   Active

4.docker swarm 通信

  在Docker Swarm中创建通信网络是通过Overlay网络来实现的。Overlay网络允许Swarm集群中的容器在不同的主机上进行跨主机通信。

  • 在Docker Swarm中,Overlay网络是自动创建的一种虚拟网络类型,用于容器间的通信。
  • 当创建服务时,Swarm会自动为该服务创建一个Overlay网络,并将服务的容器连接到这个网络上。
  • 当新的节点加入Swarm时,它将自动与已有的Overlay网络进行通信。新节点会自动加入到已存在的Overlay网络中,无需手动配置。

  docker swarm 容器之间通信:

  在Docker Swarm集群中,每个Docker容器的 hosts文件会自动添加一条与当前容器名称和IP地址相关的主机配置。这是由于Swarm集群管理器(manager)自动维护了一个内部DNS服务,并在集群中的各个节点上自动更新所有容器的hosts文件。

  当一个容器创建或加入到Swarm集群中时,Swarm manager会为该容器生成一个唯一的名称,并将该容器的名称与其IP地址映射写入到它所在节点的hosts文件中。

  在Swarm集群中,容器之间可以通过容器名称相互通信,而无需关注它们所在的物理主机。通过在容器中使用其他容器的名称作为主机名,可以实现容器之间的直接通信。

  这种配置的作用是简化容器之间的网络通信。通过在hosts文件中添加容器名称和IP地址的映射关系,可以使容器之间不再需要知道对方的具体IP地址,而是通过使用容器名称来进行通信。这样的设计方便了容器的扩展和移动,因为容器的IP地址可能会发生变化,但其名称仍然保持不变。Swarm manager负责在集群中管理和更新这些映射关系,以确保容器之间的通信能够持续有效。

5.Swarm管理器高可用性(HA)

                       

  Swarm使用了Raft共识算法的一种具体实现来支持管理节点的HA。关于HA,以下是两条最佳实践原则。

    ● 部署奇数个管理节点。

    ● 不要部署太多管理节点(建议3个或5个)。

  部署奇数个管理节点有利于减少脑裂(Split-Brain)情况的出现机会。假如有4个管理节点,当网络发生分区时,可能会在每个分区有两个管理节点。这种情况被称为脑裂——每个分区都知道曾经有4个节点,但是当前网络中仅有两个节点。糟糕的是,每个分区都无法知道其余两个节点是否运行,也无从得知本分区是否掌握大多数(Quorum)。虽然在脑裂情况下集群依然在运行,但是已经无法变更配置,或增加和管理应用负载了。

  不过,如果部署有3个或5个管理节点,并且也发生了网络分区,就不会出现每个分区拥有同样数量的管理节点的情况。这意味着掌握多数管理节点的分区能够继续对集群进行管理。图10.5中右侧的例子,阐释了这种情况,左侧的分区知道自己掌握了多数的管理节点。

  

 

标签:容器,Swarm,swarm,详解,集群,docker,节点
From: https://www.cnblogs.com/zjdxr-up/p/17627536.html

相关文章

  • 水果编曲软件FL Studio 21.1.0.3267音频工作站2023电脑配置要求详解
    FL全称为FruityLoops,FLStudio更倾向于DJ混音和编辑。但这并不意味着它缺乏功能!FLStudio21是一个受欢迎的插件,如果购买了制作版本,那么这个软件就可以终身更新。为音乐制作和音频编辑选择硬件FLStudio21Win-安装包:https://souurl.cn/ZIwzHsFLStudio21Mac-安装包:https://sou......
  • Linux操作系统下docker的安装
    文档课题:Linux操作系统下docker的安装.系统:centos7.964位1、删旧版docker[root@Leo-Docker~]#yumremovedocker\docker-client\docker-client-latest\docker-common\docker-latest\docker-latest-logrotate\docker-logrotate\docker-engine\podman\runc......
  • macOS zsh 配置 docker 自动补全
    maczsh配置docker自动补全在终端中使用docker的命令的时候必须要全部手敲,没有提示,于是就在找是否有自动补全的脚本,搜索了一圈踩了一些坑总结了一下具体的步骤。首先执行如下命令:mkdir-p~/.zsh/completioncurl-Lhttps://raw.githubusercontent.com/docker/docker-ce/......
  • CCLINK IE 转MODBUS-RTU网关modbusrtu功能码详解
    远创智控YC-CCLKIE-RTU。这款产品的主要功能是将各种MODBUS-RTU、RS485、RS232设备接入到CCLINKIEFIELDBASIC网络中。那么,这款通讯网关又有哪些特点呢?首先,它能够连接到CCLINKIEFIELDBASIC总线中作为从站使用,同时也能连接到MODBUS-RTU、RS485、RS232总线中作为主站或从站使......
  • win10中Docker安装、构建镜像、创建容器、Vscode连接实例
    Docker方便一键构建项目所需的运行环境:首先构建镜像(Image)。然后镜像实例化成为容器(Container),构成项目的运行环境。最后Vscode连接容器,方便我们在本地进行开发。下面以一个简单的例子介绍在win10中实现:Docker安装、构建镜像、创建容器、Vscode连接使用。Docker安装首先进......
  • docker网络 bridge 与overlay 模式
    转载请注明出处:1.bridge网络模式工作原理: 在Bridge模式中,Docker通过创建一个虚拟网络桥接器(bridge)将容器连接到主机上的物理网络接口。每个容器都会被分配一个IP地址,使得它们可以相互通信,并且可以与主机进行通信。Docker的Bridge网络模式是默认的网络配置选项,它提供了容......
  • 本地启动 ABAP Platform Trial 的 Docker 命令行程序
    Docker是一个开源的容器化平台,用于轻松地构建、发布和运行应用程序。DockerDesktop是适用于Windows和Mac的Docker桌面应用程序,它允许用户在本地运行和管理容器化应用程序。在本文中,我们将详细介绍以下两个命令行并解释每个参数的含义:dockerpullsapse/abap-platform-trial:190......
  • Windows10下安装docker 并启动 rabbitmq
    1.官网下载docker:https://hub.docker.com/editions/community/docker-ce-desktop-windows 2.安装docker:运行下载好的DockerforWindowsInstaller.exe 3.安装好后启动docker: 4.修改成国内镜像仓库:https://q3a36twa.mirror.aliyuncs.com  5.拉取rabbitmq,在cmd窗......
  • Docker入门
    一、安装1、linux安装(老师的方法:)https://blog.csdn.net/jeffleo/article/details/709043682、内核升级(CentOS6.X升级内核至3.10)https://blog.csdn.net/jeffleo/article/details/709041503、阿里云的docker镜像仓库https://c.163yun.com/hub#/m/library/https://......
  • Dubbo高手之路2,6种扩展机制详解
    大家好,我是哪吒。上一篇分享了Java面试被问到Dubbo,怎么回答可以得高分?今天详细的分解一下Dubbo的扩展机制,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。三分钟你将学会:Dubbo的自适应扩展机制Dubbo的SPI扩展机制Dubbo的自定义扩展点机制Dubbo......