简介
在这个实验中,你将学习如何在 Docker Swarm 中将一个工作节点提升为管理节点。你将首先在 LabEx 虚拟机上初始化一个 Docker Swarm,并将一个工作节点加入其中。
完成设置后,你将识别 Swarm 中的工作节点,然后使用 docker node promote
命令将其角色更改为管理节点。最后,你将验证该节点的新角色,以确认提升操作成功。这个实践练习将展示 Docker Swarm 管理的一个关键方面。
在这个实验中,你将学习如何在 Docker Swarm 中将一个工作节点提升为管理节点。你将首先在 LabEx 虚拟机上初始化一个 Docker Swarm,并将一个工作节点加入其中。
完成设置后,你将识别 Swarm 中的工作节点,然后使用 docker node promote
命令将其角色更改为管理节点。最后,你将验证该节点的新角色,以确认提升操作成功。这个实践练习将展示 Docker Swarm 管理的一个关键方面。
在这一步中,你将在你的 LabEx 虚拟机上初始化一个 Docker Swarm。Docker Swarm 是一组以 Swarm 模式运行的 Docker 主机集群。Swarm 模式使你能够将一组 Docker 节点作为一个单一的虚拟系统进行管理。
在初始化 Swarm 之前,让我们检查一下虚拟机上当前安装的 Docker 版本。
docker version
你应该会看到类似以下的输出,表明 Docker 版本为 20.10.21:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.18.9
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.9
Git commit: 363bd3a
Built: Tue Oct 25 17:59:35 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2bb63a5d10182b7e90689158e7c7b9b06b
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
现在,让我们初始化 Docker Swarm。当你初始化一个 Swarm 时,当前节点将成为第一个管理节点。管理节点负责处理 Swarm 管理任务,例如维护 Swarm 状态、调度服务以及提供 Swarm 模式 API。
使用 docker swarm init
命令来初始化 Swarm。我们将指定通告地址,以确保其他节点可以使用虚拟机的 IP 地址加入 Swarm。将 YOUR_VM_IP_ADDRESS
替换为你的 LabEx 虚拟机的实际 IP 地址。你可以在 LabEx 环境详情中找到这个 IP 地址。
docker swarm init --advertise-addr YOUR_VM_IP_ADDRESS
运行该命令后,你将看到输出,表明 Swarm 已初始化,并提供了一个供其他节点以工作节点身份加入 Swarm 的命令。请保留这个加入命令,因为你将在下一步中用到它。
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
在上一步中,你初始化了一个 Docker Swarm,当前节点成为了管理节点。现在,你将模拟把一个工作节点加入这个 Swarm。在实际场景中,你会在一台想要作为工作节点加入的独立机器上执行此步骤。不过,在这个实验中,我们将使用同一台虚拟机来模拟工作节点加入 Swarm。
要将一个节点作为工作节点加入,你需要在初始化 Swarm 后得到的加入命令。这个命令包含 Swarm 加入令牌以及管理节点的 IP 地址和端口。
如果你在上一步中没有保存加入命令,可以在管理节点上使用 docker swarm join-token worker
命令来获取它。
docker swarm join-token worker
这个命令会输出工作节点的加入命令:
To add a worker to this swarm, run the following command on the worker node:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
现在,执行你获取到的加入命令。由于我们是在同一台虚拟机上模拟工作节点,你将在同一个终端中运行这个命令。
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx YOUR_VM_IP_ADDRESS:2377
你应该会看到输出,表明该节点已作为工作节点加入了 Swarm:
This node joined a swarm as a worker.
这意味着你的单台虚拟机现在在 Swarm 中同时充当管理节点和工作节点。
在前面的步骤中,你初始化了一个 Docker Swarm,然后将同一个节点作为工作节点加入了 Swarm。现在,让我们列出 Swarm 中的节点,以查看当前状态并识别每个节点的角色。
要列出 Swarm 中的节点,请使用 docker node ls
命令。此命令会提供 Swarm 中每个节点的信息,包括其 ID、主机名、状态、可用性、管理节点状态和版本。
docker node ls
你应该会看到类似以下的输出:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active Leader 20.10.21
yyyyyyyyyyyy labex-vm Ready Active 20.10.21
在这个输出中,你会看到两个条目,主机名均为 labex-vm
。这是因为你的单台虚拟机在 Swarm 中充当了两个节点:一个管理节点和一个工作节点。
MANAGER STATUS
为 Leader
的节点是你在第一步中初始化的管理节点。MANAGER STATUS
的节点是你在第二步中加入的工作节点。记下工作节点的 ID
。你将在下一步中使用这个 ID 将其提升为管理节点。该 ID 是 Swarm 中每个节点的唯一标识符。
在上一步中,你列出了 Swarm 中的节点,并通过节点 ID 以及缺少 MANAGER STATUS
标识出了工作节点。现在,你将把这个工作节点提升为管理节点。将工作节点提升为管理节点可以增加 Swarm 中管理节点的数量,这对于生产环境中的高可用性和容错能力至关重要。
要提升一个节点,你需要使用 docker node promote
命令,后面跟上你想要提升的节点的 ID。你在上一步中已经获取了工作节点的 ID。
将 WORKER_NODE_ID
替换为你工作节点的实际 ID。
docker node promote WORKER_NODE_ID
执行该命令后,你应该会看到确认节点已被提升的输出:
Node WORKER_NODE_ID was promoted to a manager.
这表明之前作为工作节点的节点现在也是 Swarm 中的管理节点了。现在你的 Swarm 有两个管理节点(尽管在这个模拟环境中,它们都运行在同一台物理虚拟机上)。
在上一步中,你将工作节点提升为了管理节点。现在,让我们通过再次列出 Swarm 中的节点,来验证该节点的角色是否已成功更新。
使用 docker node ls
命令列出节点。
docker node ls
这次,你应该会看到类似以下的输出:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active Leader 20.10.21
yyyyyyyyyyyy labex-vm Ready Active Reachable 20.10.21
注意,之前未列出 MANAGER STATUS
的节点,现在在 MANAGER STATUS
下显示为 Reachable
。这证实了该节点已成功提升,并且现在已被 Swarm 识别为管理节点。状态为 Leader
的节点是主管理节点,而状态为 Reachable
的节点是辅助管理节点。
在 Swarm 中拥有多个管理节点可提供冗余。如果主管理节点不可用,其他管理节点可以接管其角色,确保 Swarm 继续运行。
在本次实验中,你学习了如何在单个节点上初始化 Docker Swarm,使其成为第一个管理节点。接着,你练习了将一个工作节点加入到这个 Swarm 中,从而扩展了集群。本实验指导你列出 Swarm 节点,以识别新添加的工作节点。最后,你使用 docker node promote
命令执行了将工作节点提升为管理节点的关键操作,并验证了角色变更是否成功。