如何使用 docker node demote 命令降级 Swarm 管理节点

DockerDockerBeginner
立即练习

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

简介

在本次实验中,我们将探讨如何管理 Docker Swarm 中节点的角色。具体来说,我们将重点介绍如何使用 docker node demote 命令将管理节点的角色更改为工作节点。

本实验将指导你完成以下过程:初始化 Docker Swarm、识别当前的管理节点、执行降级命令,最后验证节点更新后的角色,以确认降级操作是否成功。通过这个实践操作,你将获得 Docker Swarm 节点管理的实用知识。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/ps("List Running Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/SystemManagementGroup -.-> docker/version("Show Docker Version") subgraph Lab Skills docker/ls -.-> lab-555180{{"如何使用 docker node demote 命令降级 Swarm 管理节点"}} docker/ps -.-> lab-555180{{"如何使用 docker node demote 命令降级 Swarm 管理节点"}} docker/exec -.-> lab-555180{{"如何使用 docker node demote 命令降级 Swarm 管理节点"}} docker/version -.-> lab-555180{{"如何使用 docker node demote 命令降级 Swarm 管理节点"}} end

初始化 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 替换。

列出 Swarm 节点以识别管理节点

在这一步中,我们将列出 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 STATUSLeader,这证实了它是一个管理节点。

降级管理节点

在这一步中,我们将把当前的管理节点降级为工作节点。将管理节点降级意味着将其角色从管理 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 节点并观察更新后的角色,验证了降级操作已成功完成。