如何使用 docker swarm join 命令添加节点

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何使用 docker swarm join 命令向现有的 Docker Swarm 中添加节点。我们将介绍将节点作为工作节点(worker)和管理节点(manager)加入的过程,工作节点执行由管理节点分配的任务,而管理节点参与集群管理。

你还将探索 --availability 标志,并了解在加入节点时如何使用它来控制节点在集群中的初始可用性。这个实践实验将为你提供扩展 Docker Swarm 集群所需基本步骤的实际操作经验。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") subgraph Lab Skills docker/run -.-> lab-555241{{"如何使用 docker swarm join 命令添加节点"}} docker/ps -.-> lab-555241{{"如何使用 docker swarm join 命令添加节点"}} docker/exec -.-> lab-555241{{"如何使用 docker swarm join 命令添加节点"}} docker/network -.-> lab-555241{{"如何使用 docker swarm join 命令添加节点"}} end

以工作节点身份将节点加入集群

在这一步中,你将学习如何以工作节点(worker)的身份将一个节点加入到现有的 Docker Swarm 集群中。工作节点是运行部署到集群中的服务的机器,它接收并执行管理节点分配的任务。

在将节点加入集群之前,你需要有一个正在运行的 Docker Swarm 管理节点。在本实验中,我们假设集群已经初始化,并且你已经获得了工作节点的加入令牌。

首先,让我们模拟拥有一个加入令牌。在实际场景中,你可以使用 docker swarm join-token worker 命令从管理节点获取这个令牌。在本实验中,我们将使用一个占位符令牌。

假设管理节点提供的加入命令类似于以下内容:

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

在这个命令中:

  • docker swarm join:这是将节点加入集群的命令。
  • --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef:这是用于向集群验证节点身份的唯一令牌。
  • --advertise-addr <THIS_NODE_IP>:此标志指定加入节点将用于向集群中的其他节点通告自身的 IP 地址。请将 <THIS_NODE_IP> 替换为你要加入的节点的实际 IP 地址。
  • <MANAGER_IP>:2377:这是集群中一个管理节点的地址。加入节点通过连接此地址来加入集群。请将 <MANAGER_IP> 替换为管理节点的实际 IP 地址。默认的集群端口是 2377。

由于本实验是在单个虚拟机环境中进行的,我们将使用简化的命令来模拟加入过程。我们将使用 127.0.0.1 作为管理节点的 IP 地址,并使用占位符令牌。

执行以下命令以模拟以工作节点身份加入集群。请注意,在这个单虚拟机设置中,此命令实际上不会加入一个真实的集群,但它展示了命令的结构。

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef 127.0.0.1:2377

你应该会看到表明节点正在尝试加入集群的输出。在实际场景中,如果加入成功,你会看到类似“This node joined a swarm as a worker.”的消息。

以管理节点身份将节点加入集群

在这一步中,你将学习如何以管理节点(manager)的身份将一个节点加入到现有的 Docker Swarm 集群中。管理节点负责处理集群管理任务,例如维护集群状态、调度服务以及处理集群范围内的操作。为了实现高可用性,一个集群可以有多个管理节点。

与以工作节点身份加入集群类似,你需要从现有的管理节点获取加入令牌才能以管理节点的身份加入。从现有管理节点获取管理节点加入令牌的命令是 docker swarm join-token manager

假设管理节点的加入命令类似于以下内容:

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

注意,该命令结构与以工作节点身份加入时相同,但令牌不同。用于加入管理节点的令牌是唯一的,并且具有更高的权限。

在本实验中,我们将再次在单虚拟机环境中使用占位符管理节点令牌,并以 127.0.0.1 作为管理节点的 IP 地址来模拟加入过程。

执行以下命令以模拟以管理节点身份加入集群:

docker swarm join --token SWMTKN-1-ABCDEFGHIJKLMNOPQRSTUVWXYZ-0987654321fedcba 127.0.0.1:2377

你应该会看到表明节点正在尝试加入集群的输出。在实际的多节点集群中,如果加入成功,你会看到类似“This node joined a swarm as a manager.”的消息。

理解并在加入集群时使用 --availability 标志

在这一步中,你将探索 --availability 标志,该标志可在将节点加入 Docker Swarm 集群时使用。--availability 标志用于控制节点是否可用于任务调度。这对于管理节点维护,或者在不将节点从集群中移除的情况下暂时使其停止服务特别有用。

--availability 标志可以取以下三个值之一:

  • active:节点可用于任务调度。这是新加入节点的默认状态。
  • pause:节点将不会被分配新任务,但现有任务将继续运行。
  • drain:节点将不会被分配新任务,并且现有任务将被关闭并重新调度到其他可用节点上。

在加入节点时,你可以指定其初始可用性。例如,要以工作节点身份加入一个节点,并将其可用性设置为 drain,你可以使用如下命令:

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --availability drain --advertise-addr <THIS_NODE_IP> <MANAGER_IP>:2377

在本实验中,我们将模拟使用 --availability drain 标志加入节点。同样,在单虚拟机环境中,我们将使用占位符令牌,并以 127.0.0.1 作为管理节点的 IP 地址。

执行以下命令以模拟将可用性设置为 drain 加入集群:

docker swarm join --token SWMTKN-1-abcdefghijklmnopqrstuvwxyz-1234567890abcdef --availability drain 127.0.0.1:2377

你应该会看到表明节点正在尝试加入的输出。在实际的集群中,节点将以可用性设置为 drain 的状态加入,这意味着它不会被调度执行新任务,并且现有任务将被迁移。

总结

在本实验中,你学习了如何使用 docker swarm join 命令将节点添加到现有的 Docker Swarm 集群中。你探索了以工作节点身份加入节点的过程,了解了加入令牌、管理节点地址和 --advertise-addr 标志的作用。你还研究了如何以管理节点身份加入节点,这需要从管理节点获取不同的加入令牌。最后,你学习了 --availability 标志,以及如何在加入过程中使用它来控制节点在集群中的初始可用性。