一文详解docker swarm

1、简介

Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。

主要解决问题:

  1. 解决docker server的集群化管理和部署。
  2. Swarm通过对Docker宿主机上添加的标签信息来将宿主机资源进行细粒度分区,通过分区来帮助用户将容器部署到目标宿主机上,同样通过分区方式还能提供更多的资源调度策略扩展。

单对单的Docker宿主机使用方式:
在这里插入图片描述
单对多的Docker宿主机使用方式:
在这里插入图片描述
swarm能做什么:

  1. 管理节点高可用,原生支持管理节点高可用,采用raft共识算法来支撑管理节点高可用。
  2. 应用程序高可用,支持服务伸缩,滚动更新和应用回滚等部署策略。

1.1、涉及到哪些概念?

(1)docker的两种模式,单引擎模式和swarm集群模式。

  • 单引擎模式,docker server没有加入任何集群,且自身也没有加入初始化为swarm 节点,简单的说就是我们平时所操作的孤立的docker server。
  • swarm模式,当docker server 加入到任意swarm集群,或者通过docker swarm init初始化swarm集群时,docker server会自动切换到swarm 集群模式。

(2)swarm集群中节点分类,分为:manager(管理节点)、node(工作节点)

  • manager:是Swarm Daemon工作的节点,包含了调度器、路由、服务发现等功能,负责接收客户端的集群管理请求以及调度Node进行具体工作。manager 本身也是一个node节点。
  • Node:接受manager调度,对容器进行创建、扩容和销毁等具体操作。

(3)raft共识算法,是实现分布式共识的一种算法,主要用来管理日志复制的一致性。

  • 当Docker引擎在swarm模式下运行时,manager节点实现Raft一致性算法来管理全局集群状态。
  • Docker swarm模式之所以使用一致性算法,是为了确保集群中负责管理和调度任务的所有manager节点都存储相同的一致状态。
  • 在整个集群中具有相同的一致状态意味着,如果出现故障,任何管理器节点都可以拾取任务并将服务恢复到稳定状态。例如,如果负责在集群中调度任务的领导管理器意外死亡,则任何其他管理器都可以选择调度任务并重新平衡任务以匹配所需状态。
  • 使用一致性算法在分布式系统中复制日志的系统需要特别小心。它们通过要求大多数节点在值上达成一致,确保集群状态在出现故障时保持一致。
  • Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。这意味着,在运行Raft的5个管理器集群中,如果3个节点不可用,系统将无法处理更多的请求来安排其他任务。现有任务保持运行,但如果管理器集不正常,调度程序无法重新平衡任务以应对故障。

(4)Swarm管理节点高可用。

  • Swarm管理节点内置有对HA的支持,即使有一个或多个节点发送故障,剩余管理节点也会继续保证Swarm运转。
  • Swarm实现了一种主从方式的多管理节点的HA,即使有多个管理节点也只有一个节点出于活动状态,处于活动状态的节点被称为主节点(leader),而主节点也是唯一一个会对Swarm发送控制命令的节点,如果一个备用管理节点接收到了Swarm命令,则它会将其转发给主节点。

(5)集群管理,集群创建和组织。
(6)节点管理,集群下节点角色信息变更,节点任务情况监控。
(7)服务管理,集群服务部署,服务管理等。

1.2、需要注意什么?

manager节点容错。
manager数量最好设置为奇数个,可以减少脑裂(Split-Brain)出现情况。在网络被划分成2个部分情况下,奇数个manager节点能够较高程度的保证有投票结果的可能性。

不要部署太多的manager节点(通常3到5个)。对于所有共识算法来说,更多的参与节点意味着需要花费更多的时间来达成共识,所以最好部署5个或三个节点。

Raft最多可承受(N-1)/2次故障,需要(N/2)+1名成员的多数或法定人数才能就向集群提议的值达成一致。
在这里插入图片描述

2、集群管理

2.1、创建集群

  1. 不包含在任何Swarm中的Docker节点,该Docker节点被称为运行于单引擎(Single-Engine)模式,一旦加入Swarm集群,则切换为Swarm模式。
  2. docker swarm init 会通知Docker来初始化一个新的Swarm,并且将自身设置为第一个管理节点。同时也会使该节点开启Swarm模式。
  3. –advertise-addr IP:2377 指定其他节点用来连接到当前管理节点的IP和端口,这一指令是可选的,当节点有多个IP时,可以指定其中一个。
  4. –listen-addr 指定用于承载Swarm流量的IP和端口,其设置通常与–advertise-addr相匹配,但是当节点上有多个IP的时候,可用于指定具体某个IP。
  5. –autolock 启用管理器自动锁定(需要解锁密钥才能启动已停止的管理器)。
  6. –force-new-cluster 强制从当前状态创建新群集。
docker swarm init

2.2、将节点加入集群

(1)生成join-token。

# 生成work节点 join-token
docker swarm join-token worker
# 生成manager节点 join-token
docker swarm join-token manager

示例:

fly@fly:~/wokspace$ docker swarm join-token worker 
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

(2)加入集群。

# 此命令为 join-token 命令执行结果,在相应的节点执行该结果即可加入到集群
docker swarm join --token SWMTKN-1-4zxv2c1ntyjoum1m3x8u6juej6kciexc05f30j9vsvr0hoieg4-19o9myylkb7bg1fb1jqcr1xcf 192.168.11.72:2377

2.3、查看集群状态。

docker info

在这里插入图片描述

2.4、将节点从集群中移除

(1)将节点从集群中移除 (只能移除worker节点)。

docker swarm leave

(2)将节点从集群中强制移除(包括manager节点)。

docker swarm leave
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值