docker swarm 创建集群

  • A+
所属分类:容器

创建集群

当运行命令创建集群时,Docker Engine将以集群模式运行。

运行docker swarm init 在当前节点上创建一个单节点集群。设置集群如下:

  • 将当前节点切换到集群模式
  • 创建一个名为default的集群
  • 将当前节点指定为集群的领导管理节点
  • 使用主机名命名节点
  • 配置管理者监听端口2377在活动的网络接口上
  • 设置当前节点为Active状态,意味着可以从调度器接收任务
  • 为参入集群的引擎启动内部分布式数据存储,来保持集群及其上运行的所有服务的一致性
  • 默认情况下,为集群生成一个自签跟CA
  • 默认情况下,为加入到集群的worker和manager节点生成一个令牌
  • 创建一个名为ingress网络用于发布集群服务端口到外部

docker swarm init 命令输出了将新节点加入到集群的连接命令:

配置宣告地址

管理节点使用宣告地址来运行集群中其它节点访问Swarmkit API和overlay网络。集群的其它节点必须能访问管理节点的宣告地址。

如果没有指定地址,Docker将检查系统是否有单个IP地址,如果有,Docker默认使用这个IP地址来监听2377端口。如果有多个IP地址,必须明确指定--advertise-addr来启用管理者间通信和overlay网络。

查看加入命令或者更新加入token

节点需要一个令牌来加入到集群。工作节点和管理节点的令牌是不同的。节点在加入集群时使用令牌。在节点加入到集群后,更新令牌不会影响集群成员资格。更新令牌可确保新加入的集群的节点无法使用旧的令牌。

查看工作节点加入集群命令和令牌:

查看管理节点加入集群命令和令牌:

执行docker swarm join-token --rotate 命令来为worker或者manager节点生成一个新的令牌。

加入节点到集群

  • 添加工作节点会增加容量。当将服务部署到集群时,引擎调度任务到可用节点上,不管是工作节点还是管理节点。当工作节点加入到集群时,可扩展集群处理任务规模不会影响管理者raft使用。
  • 管理节点增加容错能力。管理节点执行集群编排和管理功能。在所有管理节点中,会选择出一个领导者,来执行编排任务。当该领导者故障了,其余的管理节点选择出一个新的领导者,并恢复对集群状态的编排和管理。默认情况下,管理节点也运行任务。

加入工作节点

docker swarm join命令执行以下操作:

  • 将当前节点上Docker Engine切换成集群模式
  • 从管理者请求一个TLS证书
  • 使用主机名命名节点
  • 基于集群令牌将当前节点加入到管理者监听的集群中
  • 设置当前节点状态为Active,意味着可以从调度器接收任务
  • 将ingress网络扩展到当前节点

加入管理节点

加入操作过程与worker相同。新加入的管理节点也参入raft共识,现有的领导者仍然是集群领导者。

Docker建议每个集群使用三个或者五个管理节点来实现高可用性。由于集群管理节点使用Raft共享数据,因此必须是奇数个管理节点。只要有一半以上的管理节点可用,集群才可以继续运行。

在集群中管理节点

列出节点

在管理节点上执行docker node ls命令:

AVAILABILITY列显示调度器是否可以将任务分配给该节点:

  • Active 调度器可以分配任务给该节点
  • Pause 调度器不会向该节点分配新的任务,但是现有任务仍然运行
  • Drain 调度器不会向该节点分配新的任务,同事,关闭现有任务,并在其他可用节点上运行他们

MANAGER STATUS列显示节点参入Raft共识:

  • 空值 表示是工作节点,不参入集群管理
  • Leader 主管理节点对集群进行所有管理和编排
  • Reachable 参入raft共识,如果领导者不可用,有资格被选举为新的领导者
  • Unavailable 该管理节点无法与其它管理者通信。如果管理节点变为不可用,你要么新加入一个管理节点到集群,要么将一个工作节点提升为管理节点

查看单个节点

在管理节点上执行docker node inspect 命令查看单个节点详细信息。默认输出json格式,可使用--pretty人性化格式打印结果。

更新节点

可以修改节点属性:

  • 改变节点可用性
  • 添加或者删除标签元数据
  • 改变节点角色

更改节点可用性

  • drain管理节点使其只关注与集群管理任务,不用于任务的分配
  • drain节点使其下线维护
  • pause节点使其不接收新的任务
  • 恢复unavailable或者pause节点到可用状态

更改管理节点为Drain状态:

添加或者删除标签元数据

节点标签提供了节点组织的灵活方法。还可以在服务约束中使用节点标签。在创建服务时,将任务限制在满足标签的节点上。

在管理节点上执行docker node update --label-add命令来为节点添加标签。--label-add 支持 或者 = 对。

升级或者降级节点

可以将工作节点升级为管理节点。也可以将管理节点降级为工作节点。

不管如果升级或者降级,都必须确保集群内法定人数的管理节点。

在管理节点上操作:

docker node promote 和 docker node demote 命令可以分别使用 docker node update --role manager 和 docker node update --role worker 来代替。

退出集群

在节点上运行docker swarm leave命令将其从群集中删除。

当一个节点离开群集时,Docker Engine停止在群集模式下运行。协调者不再将任务调度到节点。

如果节点是管理节点,将收到关于维护法定人数的警告。要忽略该警告使用--force。如果最后一个管理节点退出集群,集群将变得不可用了。需要采取灾难恢复措施了。

节点退出集群后,可以在管理节点上执行docker node rm命令,从节点列表中删除该节点。

weinxin
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: