如何在多群集管理器集群中找到哪个节点是docker swarm中当前的管理器节点?

Vis*_*han 7 docker docker-compose docker-swarm docker-machine

我创建了一个搬运工群簇4个节点在它外面2是群管理器(群支持多个管理器)我明白,如果当前管理器节点发生故障,则第二管理器需要的作用的是所述群管理器.

在我的情况下,我正在触发swarm管理器的其余调用,以创建具有副本的服务,依此类推.

在某些时候,如果这位经理失败,第二位经理成为经理,我怎么知道?

有没有什么方法可以动态通知特定节点是管理器?

请给我澄清一下这个?

abr*_*nan 7

使用CLI

(手动)知道管理员是否更改的快速方法是通过CLI:

$ docker node ls

ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
46aqrk4e473hjbt745z53cr3t    node-5    Ready   Active        Reachable
61pi3d91s0w3b90ijw3deeb2q    node-4    Ready   Active        Reachable
a5b2m3oghd48m8eu391pefq5u    node-3    Ready   Active
e7p8btxeu3ioshyuj6lxiv6g0    node-2    Ready   Active
ehkv3bcimagdese79dn78otj5 *  node-1    Ready   Active        Leader
Run Code Online (Sandbox Code Playgroud)

您可以在列下找出哪个经理是当前的领导者MANAGER STATUS.

您还可以使用Leader字段单独检查每个节点格式,例如:

$ docker node inspect <id-node> --format "{{ .ManagerStatus.Leader }}"

true
Run Code Online (Sandbox Code Playgroud)

使用Docker Remote API

您还可以通过编程方式检查哪个经理是领导者.docker远程API公开了一个 可用于列出节点节点API端点.

您可以提供过滤器作为获取key=value表单的参数.

您可以使用该过滤器仅列出管理器节点(带role=manager),然后您可以解析和过滤JSON输出以保持其Leader字段设置为true(下ManagerStatus)的节点.

不幸的是,还没有leader过滤器(但是)我认为这可能是一个有效的增强功能,可以在swarmkit问题跟踪器上提出建议.

Docker swarm模式上还没有事件流(这可以通过swarmkit存储库中的此问题进行跟踪).我想在将来,一个事件将触发Leader切换,如果您正在收听这些事件,您将动​​态通知新领导者(例如,如果您有特殊设置并且想要动态更新consul中的条目,nginx或联锁).


小智 6

要查找管理器节点,请运行docker info,其中列出了当前节点地址以及管理器地址,以及许多其他信息。

命令docker node ls在这里不是很有用,因为它仅在管理器节点上有效。


小智 2

如果您使用分布式键/值存储,请检查其日志,或者您可以在这两个集群管理器上使用此命令,它会向您显示主节点。 docker -H tcp://< swarm_ip:swarm_port > 信息

使用 docker-machine,查看那里,将 shell 设置为连接到 swarm 管理器并使用docker info命令。