我创建了一个 docker swarm 集群,其中包含 4 个节点 2 是 swarm manager(swarm 支持多个管理器)我知道如果当前管理器节点关闭,然后第二个管理器扮演成为集群管理器的角色。
在我的例子中,我正在向 swarm 管理器发出 rest 调用,以创建具有副本的服务等。
在某个时候,如果这位经理下台,而第二位经理成为经理,我怎么知道??
有什么方法可以动态通知特定节点是管理器吗?
请给我澄清一下??
最佳答案
使用 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
栏下查看当前Leader是哪个Manager。
您还可以使用 Leader
字段单独检查每个节点格式,例如:
$ docker node inspect <id-node> --format "{{ .ManagerStatus.Leader }}"
true
使用 Docker 远程 API
您还可以通过编程方式检查哪一位经理是领导者。 docker 远程 API 公开了一个 Nodes API endpoint 您可以使用它来列出节点。
您可以提供一个 filter 作为参数,该参数采用 key=value
形式。
您可以使用该过滤器仅列出管理器节点(使用 role=manager
),然后您可以解析和过滤 JSON 输出以保留其 Leader
字段的节点设置为 true
(在 ManagerStatus
下)。
不幸的是,没有 leader
过滤器(yet),但我认为这可能是在 swarmkit 问题跟踪器上提出的有效增强功能。
在 docker swarm 模式下还没有事件流(这由 swarmkit 存储库上的 this issue 跟踪)。我想在未来,Leader switch 会触发一个事件,如果你正在监听这些事件(例如,如果你有一个特殊的设置并且想要动态更新 consul、nginx 或 Interlock 中的条目)。
关于docker - 如何在多个 swarm 管理器集群中查找 docker swarm 中的当前管理器节点是哪个节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40245749/