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

标签 docker docker-compose docker-machine docker-swarm

我创建了一个 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/

相关文章:

docker - 创建透明的Docker网络会破坏AWS CLI

docker - 访问 Dockerfile 中的 container_name(来自 docker-compose)

bash - 如何自动化docker在容器中运行脚本并通知主机完成?

docker - 不以 root 身份运行时从容器访问命名卷?

spring-boot - Spring Boot App容器无法连接到MySQl容器

bash - Docker build-arg在单独的行中定义时不会自动获取env变量

macos - Docker 中的 NFS : exportfs: <path> does not support NFS export

docker - 我如何在 docker-machine create 上执行脚本

docker - 尝试连接到 https ://index. docker.io 时网络超时

docker - qemu-irix无法在Alpine 3.10(GCC 8.3)下构建