如何在 Docker Swarm 中的非领导者节点上运行管理命令

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker Swarm 是一个强大的编排工具,它允许你将一组 Docker 主机作为一个单一系统进行管理。在一个 Swarm 中,有一个节点被指定为领导者,负责管理集群的状态并做出决策。然而,有时你可能需要在非领导者节点上运行管理命令。本教程将指导你完成在 Docker Swarm 中识别领导者节点并在非领导者节点上执行管理命令的过程。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/SystemManagementGroup -.-> docker/info("Display System-Wide Information") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/info -.-> lab-411597{{"如何在 Docker Swarm 中的非领导者节点上运行管理命令"}} docker/version -.-> lab-411597{{"如何在 Docker Swarm 中的非领导者节点上运行管理命令"}} end

理解 Docker Swarm 架构

Docker Swarm 是一个容器编排工具,可让你管理一组称为 “swarm” 的 Docker 主机。在 Docker Swarm 中,有两种类型的节点:管理节点和工作节点。

管理节点

管理节点负责 swarm 的整体管理。它们处理以下任务:

  • 调度和部署容器
  • 维护 swarm 的期望状态
  • 提供用于与 swarm 交互的 API

管理节点也可以运行容器,但其主要作用是管理 swarm。

工作节点

工作节点负责运行实际的容器。它们接收来自管理节点的指令并执行这些指令。可以根据需要向 swarm 添加或从 swarm 移除工作节点,以扩展集群。

graph LR subgraph Docker Swarm Manager[管理节点] --- Worker[工作节点] Manager --- Worker end

Docker Swarm 架构通过允许多个管理节点成为 swarm 的一部分来确保高可用性和容错能力。这样,如果一个管理节点发生故障,swarm 可以继续与其余的管理节点一起运行。

识别 Docker Swarm 中的领导者节点

在 Docker Swarm 中,其中一个管理节点会被选举为领导者。领导者节点负责做出所有关键决策并协调其他管理节点的行动。

检查领导者节点

要在你的 Docker Swarm 中识别领导者节点,你可以使用以下命令:

docker node ls

此命令将列出 swarm 中的所有节点,并且领导者节点将用 * 符号标记。

或者,你可以使用 docker node inspect 命令获取有关特定节点的更详细信息:

docker node inspect ID < 节点 > --pretty

这将显示节点的角色、状态和其他相关信息,包括它是否是领导者。

理解领导者选举

Docker Swarm 使用 Raft 共识算法在管理节点中选举领导者。领导者负责做出决策并协调其他管理节点的行动。

如果当前领导者节点发生故障或变得不可用,将从其余管理节点中自动选举出新的领导者。这确保了即使一个管理节点发生故障,swarm 仍能继续运行。

graph LR subgraph Docker Swarm Manager1[管理节点 1] --- Manager2[管理节点 2] Manager1 --- Manager3[管理节点 3] Manager2 --- Manager3 Manager1 -- 领导者 --> Manager2 Manager2 -- 跟随者 --> Manager3 end

在非领导者节点上运行管理命令

在 Docker Swarm 中,领导者节点负责做出所有关键决策并协调其他管理节点的行动。然而,在某些情况下,你可能需要在非领导者节点上运行管理命令,例如用于故障排除或维护目的。

访问非领导者节点

要访问 Docker Swarm 中的非领导者节点,你可以使用 docker node ssh 命令。此命令允许你建立到 swarm 中特定节点的 SSH 连接。

docker node ssh <节点 ID>

<节点 ID> 替换为你要访问的非领导者节点的 ID。

运行管理命令

一旦你建立了到非领导者节点的 SSH 连接,就可以根据需要运行管理命令。一些你可能想要运行的常见管理命令包括:

  • 检查节点的状态和角色:
    docker node inspect ID < 节点 > --pretty
  • 查看节点的日志:
    docker node logs <节点 ID>
  • 在节点上执行命令:
    docker exec -it <容器 ID> <命令>

请记住,虽然你可以在非领导者节点上运行管理命令,但你所做的任何更改或操作都不会影响 swarm 的整体状态。领导者节点仍然负责维护集群的期望状态。

限制

需要注意的是,在非领导者节点上运行管理命令有一些限制。例如,你不能在非领导者节点上使用 docker servicedocker stack 命令,因为这些命令需要访问由领导者节点管理的 swarm 状态。

如果你需要执行需要访问 swarm 状态的操作,你应该在领导者节点上进行,或者使用 docker node exec 命令从非领导者节点在领导者节点上执行命令。

总结

在本教程结束时,你将对 Docker Swarm 架构有更深入的了解,并且能够在非领导者节点上有效地运行管理命令。这些知识将帮助你在 Docker Swarm 环境中保持高可用性并高效管理你的容器化应用程序。