如何使用 docker node promote 命令提升工作节点

DockerDockerBeginner
立即练习

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

简介

在这个实验中,你将学习如何在 Docker Swarm 中将一个工作节点提升为管理节点。你将首先在 LabEx 虚拟机上初始化一个 Docker Swarm,并将一个工作节点加入其中。

完成设置后,你将识别 Swarm 中的工作节点,然后使用 docker node promote 命令将其角色更改为管理节点。最后,你将验证该节点的新角色,以确认提升操作成功。这个实践练习将展示 Docker Swarm 管理的一个关键方面。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") docker/SystemManagementGroup -.-> docker/system("Manage Docker") subgraph Lab Skills docker/ls -.-> lab-555183{{"如何使用 docker node promote 命令提升工作节点"}} docker/version -.-> lab-555183{{"如何使用 docker node promote 命令提升工作节点"}} docker/system -.-> lab-555183{{"如何使用 docker node promote 命令提升工作节点"}} end

初始化 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.

将工作节点加入 Swarm

在上一步中,你初始化了一个 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 中同时充当管理节点和工作节点。

列出 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 STATUSLeader 的节点是你在第一步中初始化的管理节点。
  • 未列出 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 命令执行了将工作节点提升为管理节点的关键操作,并验证了角色变更是否成功。