我创建了一个 docker 群集集群,其中有4个节点,其中 2是群集管理器(热支持多个管理器)。成为群管理者的角色。

在我的情况下,我将调用触发到集群管理器,以创建具有副本的服务,依此类推。

在某个时候,如果这位经理倒下,而第二位经理成为经理,我怎么知道?

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

请给我澄清一下吗?

最佳答案

使用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

您可以在MANAGER STATUS列下找到哪个Manager是当前 Leader

您还可以使用Leader字段分别检查每个节点的格式,例如:
$ docker node inspect <id-node> --format "{{ .ManagerStatus.Leader }}"

true

使用Docker远程API

您还可以通过编程检查哪个经理是领导者。 docker远程API公开了Nodes API endpoint
您可以用来列出节点

您可以提供一个过滤器作为参数,采用key=value形式。

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

不幸的是,没有leader过滤器(yet),但我认为这可能是对swarmkit问题跟踪器提出的有效增强。

docker swarm模式下尚无事件流(swarmkit存储库上的this issue对此进行了跟踪)。我想象在将来,一个事件将在Leader开关上触发,并且如果您正在听这些事件,则会动态通知您新的Leader(例如,如果您有特殊的设置并且想要动态更新领事,nginx中的条目)或互锁)。

10-08 02:56