Docker_05_Docker Swarm

@

Docker Swarm

Docker Swarm:Docker原生的集群管理工具

1)将若干个Docker主机虚拟成一个Docker主机进行管理

2)集群中的所有Docker主机必须在1.4.0版本以上;

3)所有Docker节点必须运行同一版本的Docker;

4)Swarm 的配置和状态信息保存在一套位于所有manager节点上的分布式 etcd数据库中(该数据库运行于内存中,并保持数据的最新状态);

5)Swarm 默认占用 2337 端口


Node(节点):加入到swarm集群中的一个docker引擎实体

1)Swarm本质就是由多个Node组成的集群;

2)一个宿主机上可运行多个Node;

3)分为worker节点和manager节点,manager节点可相互通信;

4)worker节点需将其分配的Task的当前状态通知manager节点,以便manager节点可以保持每个worker节点的所需状态


如:manager节点下管理的worker节点
在这里插入图片描述


Service(服务):节点上单个或多个容器(副本)组成对外的服务

1)服务是Swarm 中的最小调度单元;

2)在worker节点或manager节点上运行,但仅在worker节点上执行Task;

3)默认情况下,manager节点也可运行服务

//可配置为以独占方式运行,且仅作为manager节点


如:服务根据Task运行实际的container
在这里插入图片描述


所有的服务都会被 Swarm 持续监控,Swarm会在后台进行轮训检查,持续比较服务的实际状态和期望状态是否一致,以确保实际状态能够满足期望状态的要求,若一致,则无须任何额外操作;若不一致,Swarm 会使其一致


如:指定web服务需要5个web-fe副本的运行,若运行 web-fe副本的某个worker节点宕机了,则 web-fe 的实际状态从 5 个副本降为 4个,从而不能满足期望状态的要求,Swarm会在其他节点启动一个新的 web-fe副本,使实际状态与期望状态保持一致


Task(任务): 一个运行的容器和其需执行的命令

1)Task就是Service的执行实体;

2)manager节点根据调度策略分配Task给各个worker节点

3)Task一旦分配给一个节点,就不能移动到另一个节点,只能在指定的节点上运行,否则将失败


如:Task的调度
在这里插入图片描述


容器的调度策略分为:平铺策略、紧凑策略和随机策略

1)平铺策略(Spread):选择已运行容器数量最少的节点(默认策略);

2)紧凑策略(BinPacking):根据每个节点上CPU和内存资源为节点打分,选择使用最紧凑的节点,保证节点最大限度地被使用(避免碎片化);

3)随机策略(Random):随机选择一个节点运行容器

安装

安装命令:docker pull swarm


卸载命令:docker rmi swarm的镜像ID


如:在当前系统上安装Docker Swarm
在这里插入图片描述

命令

swarm命令:生成/管理集群

指令格式:docker swarm 选项

选项 含义
init 初始化节点
join 加入节点
join-token 生成令牌
leave 离开节点
unlock 锁定节点
unlock-key 解锁节点
update 更新节点

1)init选项:docker swarm init --advertise-addr Docker主机IP:端口号

2)join选项:docker swarm join --token 身份令牌

3)join-token选项:docker swarm join-token 参数

参数 说明
worker 生成worker节点令牌
manager 生成manager节点令牌

//生成指定身份节点的令牌,用于让其他节点加入生成令牌的节点,且仅有manager节点可生成令牌


node命令:管理swarm的节点

指令格式:docker node 选项

选项 含义
ls 列出当前swarm中所有节点
inspect 显示指定节点的详细信息
demote 降级指定节点(成为worker)
promote 升级指定节点(成为manager)
ps 列出节点上正在运行的任务
update 更新指定节点
rm 删除指定节点

1)update选项:docker node update 参数

参数 说明
-role 更新节点的身份(worker或manger)
-availablity 更新节点的可用性 (active、pause、drain)
-label-add 添加/更新节点标签 (方式:key=value)
-label-rm 删除节点标签

service命令:创建/管理服务

指令格式:docker service 选项

选项 含义
create 创建服务
ls 列出所有正在运行的服务
ps 查看指定服务的状态
inspect 查看指定服务的详细信息
logs 查看指定服务的日志信息
scale 对指定服务进行扩缩容
rm 删除指定服务

//创建服务时,可用类似run命令一样的选项进行配置

Swarm集群

创建Swarm集群流程:

1)初始化第一个manager节点;

2)加入额外的manager节点;

3)加入worker节点

4)创建服务;


1)不包含在任何 Swarm 中的节点,称为运行于单引擎(Single-Engine)模式;

2)一旦被加入 Swarm 集群,则切换为 Swarm 模式;

3)在单引擎模式下的 Docker 主机上运行 docker swarm init会将其切换到 Swarm
模式,并创建一个新的 Swarm,将自身设置为Swarm的第一个管理节点;

4)更多的节点可以作为管理节点或工作节点加入进来,并且会将新加入的节点切换为
Swarm 模式


1)即使有多个manager节点,但仅有一个节点处于活动状态;

2)处于活动状态的manager节点被称为“主节点”(leader);

3)而主节点也是唯一一个会对 Swarm 发送控制命令的节点;

4)若备用(非活动)manager节点接收到Swarm 命令,则会将其转发给主节点
在这里插入图片描述


1)部署奇数个管理节点;

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

3)绝对不要多于 7 个,因为需要花费更长的时间来达成共识;

4)部署奇数个管理节点有利于减少脑裂(Split-Brain)情况的出现机会;

5)虽然在脑裂情况下集群依然在运行,但是无法变更配置和管理应用负载了
在这里插入图片描述


如:搭建Swarm集群

(1)初始化

1)查看主机IP
在这里插入图片描述

2)根据主机IP,对其初始化(IP为192.168.184.130)
在这里插入图片描述


(2)生成worker节点和manager节点令牌
在这里插入图片描述


(3)其他节点加入

1)加入第二个管理节点(IP为192.168.184.128)
在这里插入图片描述

2)加入第三个管理节点(IP为192.168.184.131)
在这里插入图片描述

3)加入第一个worker节点(IP为192.168.184.129)
在这里插入图片描述

4)加入第二个worker节点(IP为192.168.184.132)
在这里插入图片描述


(4)查看节点状态
在这里插入图片描述


(5)创建服务(manager节点和worker节点均可创建服务)

1)在manager节点创建mynginx服务,并查看状态
在这里插入图片描述

2)该服务的nginx容器在第三个manager节点上运行
在这里插入图片描述


(6)指定服务扩缩容

1)对mynginx服务进行扩容,并查看状态
在这里插入图片描述

2)对mynginx服务进行缩容,并查看状态
在这里插入图片描述


(7)当Swarm集群中有manager节点宕机时

1)关闭主节点的docker服务(模拟宕机)
在这里插入图片描述

2)到其他manager节点,查看当前节点状况
在这里插入图片描述

3)再次启动docker服务
在这里插入图片描述


(8)删除指定节点

1)退出Swarm集群
在这里插入图片描述

2)从集群中删除该节点

在这里插入图片描述

posted @ 2022-02-12 16:21  爱和可乐的w  阅读(44)  评论(0编辑  收藏  举报