Docker 进阶:Swarm 集群模式入门
Docker Swarm 是 Docker 官方提供的容器编排工具,它可以让你将多个 Docker 主机组合成一个集群,像管理单个 Docker 主机一样来管理它们。这对于构建高可用、可扩展的应用服务非常有用。
这篇实验手册将带你一步步搭建一个简单的 Docker Swarm 集群。
准备工作
在开始搭建 Swarm 集群之前,我们需要对 Docker 的配置做一些小小的调整。
1. 关闭 live-restore
live-restore
功能允许在 Docker 守护进程重启时保持容器运行。但在 Swarm 模式下,集群会自己管理容器的生命周期,这个功能可能会引起冲突,所以我们最好关闭它。
打开 Docker 的配置文件:
sudo vim /etc/docker/daemon.json
找到 "live-restore": true
这一行,把它改成 false
。如果文件里没有这一行,就不用管它。
修改后的文件看起来像这样:
{
"live-restore": false
}
2. 重启 Docker 服务
为了让配置生效,需要重启 Docker。
sudo systemctl restart docker
实验过程
任务一:搭建 Swarm 集群
一个 Swarm 集群由两种角色的节点组成:管理节点 (manager) 和 工作节点 (worker)。
- 管理节点:负责整个集群的管理工作,比如接收命令、调度任务。
- 工作节点:负责运行具体的容器服务。
现在,我们来动手搭建一个包含一个管理节点和若干个工作节点的集群。
1. 修改主机名
为了方便区分不同的节点,我们先给它们起个好记的名字。
在准备作为主节点的机器上执行:
hostnamectl set-hostname manager
在准备作为从节点的机器上执行:
worker-1
, worker-2
,这样在管理时才不会混淆。hostnamectl set-hostname worker-1
2. 初始化集群
在主节点上执行初始化命令,来创建我们的第一个 Swarm 集群。
--advertise-addr
参数用来指定其他节点应该通过哪个 IP 地址来连接到这个管理节点。这里需要换成你自己的主节点 IP 地址。docker swarm init --advertise-addr 192.168.192.240
执行成功后,你会看到类似下面的输出:
3. 添加工作节点
现在,到你的从节点上,执行刚才复制的 docker swarm join
命令。
示例命令如下:
docker swarm join --token SWMTKN-1-xxxx 192.168.192.240:2377
执行后,如果看到 This node joined a swarm as a worker.
的提示,就说明这个节点已经成功加入集群了。
4. 查看集群状态
回到主节点上,我们可以通过一些命令来查看集群的当前状态。
查看集群节点列表
docker node ls
这个命令会列出集群里所有的节点以及它们的状态和角色。
查看节点详细信息
如果你想看某个节点的更详细信息,可以使用 docker node inspect
。
docker node inspect worker-1 --pretty
--pretty
参数可以让输出的格式更易读。
任务二:节点脱离集群
有时候,我们可能需要让某个节点暂时或永久地离开集群。
1. 工作节点主动脱离
在需要脱离集群的从节点上执行 docker swarm leave
命令。
docker swarm leave
2. 管理节点移除节点
节点脱离后,在主节点上用 docker node ls
查看,会发现那个节点的状态变成了 Down
。
Down
的节点只是暂时失联,它依然是集群的成员。如果你想彻底将它从集群中移除,还需要在主节点上执行 docker node rm
命令。在主节点上删除该节点:
docker node rm worker-1
3. 自主练习
现在,请你尝试完成以下操作:
- 让所有从节点都脱离集群。
- 在主节点上,将所有已经脱离的从节点都清理掉。
任务三:添加管理节点
为了实现高可用,一个生产环境的 Swarm 集群通常会有多个管理节点。如果一个管理节点挂了,其他的管理节点可以立即接管工作。
1. 获取加入令牌
在主节点上执行以下命令,可以获取让其他节点作为管理节点加入集群的令牌。
docker swarm join-token manager
2. 添加新的管理节点
将上面命令生成的 docker swarm join ...
指令复制下来,交给另一台准备成为管理节点的机器执行。这样,你的集群就有了多个大脑,更加健壮了!
作业
- 在一个拥有多个管理节点的集群中,尝试将其中一个管理节点降级为工作节点。
- 提示:使用
docker node demote <节点名>
命令。
- 提示:使用
- 提交降级操作后
docker node ls
的节点列表截图。