简介
在本次实验中,我们将探讨如何管理 Docker Swarm 中节点的角色。具体来说,我们将重点介绍如何使用 docker node demote
命令将管理节点的角色更改为工作节点。
本实验将指导你完成以下过程:初始化 Docker Swarm、识别当前的管理节点、执行降级命令,最后验证节点更新后的角色,以确认降级操作是否成功。通过这个实践操作,你将获得 Docker Swarm 节点管理的实用知识。
在本次实验中,我们将探讨如何管理 Docker Swarm 中节点的角色。具体来说,我们将重点介绍如何使用 docker node demote
命令将管理节点的角色更改为工作节点。
本实验将指导你完成以下过程:初始化 Docker Swarm、识别当前的管理节点、执行降级命令,最后验证节点更新后的角色,以确认降级操作是否成功。通过这个实践操作,你将获得 Docker Swarm 节点管理的实用知识。
在这一步中,我们将初始化一个 Docker Swarm。Docker Swarm 是一组运行 Docker 并加入集群的机器。加入 Swarm 后,你可以继续运行你熟悉的 Docker 命令,但现在这些命令将由 Swarm 管理器执行。Swarm 中的机器可以是管理器节点或工作节点。管理器节点处理集群管理任务,而工作节点执行服务。
在初始化 Swarm 之前,让我们先检查一下当前的 Docker 版本。
docker version
你应该会看到类似以下的输出,这表明了安装在 LabEx 虚拟机上的 Docker 版本:
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.16.20
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.16.20
Git commit: 363bd3c
Built: Tue Oct 25 17:59:50 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2b3d85c5e9b15588d67616e19a2a3a495d
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
现在,让我们在这台机器上初始化 Docker Swarm。由于这是 Swarm 中的第一个节点,它将自动成为一个管理节点。我们将使用 docker swarm init
命令。
docker swarm init
你应该会看到输出,表明 Swarm 已初始化,并提供一个命令用于将其他节点作为工作节点加入。输出将类似于以下内容:
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
输出确认 Swarm 已初始化,并且当前节点是一个管理节点。xxxxxxxxxxxx
将被实际的节点 ID 替换。
在这一步中,我们将列出 Docker Swarm 中的节点,以确定哪些节点是管理节点,哪些是工作节点。由于我们刚刚用单个节点初始化了 Swarm,因此我们预计只会看到列出一个节点,并且其角色应该是“Manager”。
要列出 Swarm 中的节点,我们使用 docker node ls
命令。
docker node ls
你应该会看到类似以下的输出:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
让我们来详细分析一下输出内容:
ID
:节点的唯一 ID。ID 旁边的星号 (*
) 表示你正在其上运行命令的当前节点。HOSTNAME
:节点的主机名。在这种情况下,是 labex-vm
。STATUS
:节点的状态。Ready
表示节点健康且准备好接受任务。AVAILABILITY
:表示节点是否可用于调度任务。Active
表示它可用。MANAGER STATUS
:显示节点在 Swarm 中的角色。Leader
表示该节点是 Swarm 中的主管理节点。如果还有其他管理节点,它们将显示为 Reachable
。工作节点的此字段将为空。ENGINE VERSION
:节点上运行的 Docker 引擎的版本。正如预期的那样,我们看到列出了单个节点,并且其 MANAGER STATUS
为 Leader
,这证实了它是一个管理节点。
在这一步中,我们将把当前的管理节点降级为工作节点。将管理节点降级意味着将其角色从管理 Swarm 转变为像工作节点一样单纯地执行任务。在你需要减少管理节点数量或更改特定节点角色的场景中,这很有用。
要降级管理节点,我们使用 docker node demote
命令,后面跟上节点 ID 或主机名。从上一步可知,主机名是 labex-vm
。
docker node demote labex-vm
你应该会看到确认降级的输出:
Node labex-vm was demoted from a manager to a worker.
此输出表明节点 labex-vm
已在 Swarm 中成功从管理节点角色降级为工作节点角色。
在这最后一步中,我们将验证在降级操作后,节点的角色是否已成功从管理节点转变为工作节点。我们将再次使用 docker node ls
命令列出 Swarm 中的节点,并查看我们节点的 MANAGER STATUS
列。
docker node ls
运行该命令后,你应该会看到类似以下的输出:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
注意,labex-vm
节点的 MANAGER STATUS
列现在为空。这表明该节点不再是管理节点,现在在 Swarm 中作为工作节点运行。ID 旁边仍然有星号 (*
),因为这是你正在运行命令的节点,但其角色已经改变。
这证实了降级操作已成功完成。
在本次实验中,我们学习了如何通过初始化 Swarm 并识别管理节点来管理 Docker Swarm 节点。然后,我们练习使用 docker node demote
命令将管理节点的角色转变为工作节点。最后,我们通过列出 Swarm 节点并观察更新后的角色,验证了降级操作已成功完成。