Docker 进阶:Swarm 集群模式入门

Docker Swarm 是 Docker 官方提供的容器编排工具,它可以让你将多个 Docker 主机组合成一个集群,像管理单个 Docker 主机一样来管理它们。这对于构建高可用、可扩展的应用服务非常有用。

这篇实验手册将带你一步步搭建一个简单的 Docker Swarm 集群。

在开始搭建 Swarm 集群之前,我们需要对 Docker 的配置做一些小小的调整。

live-restore 功能允许在 Docker 守护进程重启时保持容器运行。但在 Swarm 模式下,集群会自己管理容器的生命周期,这个功能可能会引起冲突,所以我们最好关闭它。

打开 Docker 的配置文件:

bash

sudo vim /etc/docker/daemon.json

找到 "live-restore": true 这一行,把它改成 false。如果文件里没有这一行,就不用管它。

修改后的文件看起来像这样:

json

{
  "live-restore": false
}

为了让配置生效,需要重启 Docker。

bash

sudo systemctl restart docker
准备就绪
现在,你的环境已经准备好了,可以开始搭建 Swarm 集群了!

一个 Swarm 集群由两种角色的节点组成:管理节点 (manager)工作节点 (worker)

  • 管理节点:负责整个集群的管理工作,比如接收命令、调度任务。
  • 工作节点:负责运行具体的容器服务。

现在,我们来动手搭建一个包含一个管理节点和若干个工作节点的集群。

为了方便区分不同的节点,我们先给它们起个好记的名字。

在准备作为主节点的机器上执行:

bash

hostnamectl set-hostname manager

在准备作为从节点的机器上执行:

区分节点
每个从节点的主机名都应该是唯一的,比如 worker-1, worker-2,这样在管理时才不会混淆。

bash

hostnamectl set-hostname worker-1

主节点上执行初始化命令,来创建我们的第一个 Swarm 集群。

关于 --advertise-addr
--advertise-addr 参数用来指定其他节点应该通过哪个 IP 地址来连接到这个管理节点。这里需要换成你自己的主节点 IP 地址。

bash

docker swarm init --advertise-addr 192.168.192.240

执行成功后,你会看到类似下面的输出:

重要提示
上图中红框里的命令非常重要!这是用来让工作节点加入集群的“邀请函”。把它完整地复制下来。

现在,到你的从节点上,执行刚才复制的 docker swarm join 命令。

示例命令如下:

bash

docker swarm join --token SWMTKN-1-xxxx 192.168.192.240:2377

执行后,如果看到 This node joined a swarm as a worker. 的提示,就说明这个节点已经成功加入集群了。

回到主节点上,我们可以通过一些命令来查看集群的当前状态。

bash

docker node ls

这个命令会列出集群里所有的节点以及它们的状态和角色。

如果你想看某个节点的更详细信息,可以使用 docker node inspect

bash

docker node inspect worker-1 --pretty

--pretty 参数可以让输出的格式更易读。

有时候,我们可能需要让某个节点暂时或永久地离开集群。

在需要脱离集群的从节点上执行 docker swarm leave 命令。

bash

docker swarm leave

节点脱离后,在主节点上用 docker node ls 查看,会发现那个节点的状态变成了 Down

清理工作
一个状态为 Down 的节点只是暂时失联,它依然是集群的成员。如果你想彻底将它从集群中移除,还需要在主节点上执行 docker node rm 命令。

在主节点上删除该节点:

bash

docker node rm worker-1

现在,请你尝试完成以下操作:

  1. 让所有从节点都脱离集群。
  2. 在主节点上,将所有已经脱离的从节点都清理掉。

为了实现高可用,一个生产环境的 Swarm 集群通常会有多个管理节点。如果一个管理节点挂了,其他的管理节点可以立即接管工作。

主节点上执行以下命令,可以获取让其他节点作为管理节点加入集群的令牌。

bash

docker swarm join-token manager

将上面命令生成的 docker swarm join ... 指令复制下来,交给另一台准备成为管理节点的机器执行。这样,你的集群就有了多个大脑,更加健壮了!


  1. 在一个拥有多个管理节点的集群中,尝试将其中一个管理节点降级为工作节点。
    • 提示:使用 docker node demote <节点名> 命令。
  2. 提交降级操作后 docker node ls 的节点列表截图。