我们将继续使用Docker Machine,因为它提供了在笔记本电脑上模拟集群的非常方便的方式。三台服务器应该足以展示Swarm集群的一些关键特性:
本章中的所有命令均可在02-docker-swarm.sh (https://gist.github.com/ vfarcic/750fc4117bad9d8619004081af171896)Gist中找到。
此时,我们有三个节点。请注意,除了Docker Engine之外,这些服务器并没有运行任何应用(见图2-5)。
可以通过执行以下ls命令来查看节点的状态:
输出如下(为简洁起见,删除了ERROR列):
图2-5 运行Docker Engine的机器
在机器的启动和运行之后,我们可以设置Swarm集群。
集群设置由两种类型的命令组成。首先需要初始化作为manager的第一个节点。请参考如下命令:
第一行命令用于设置环境变量,以便本地Docker Engine指向节点1;第二行命令用于初始化那台机器上的Swarm。
我们只为swarm init命令指定了一个参数。--advertise-addr是该节点将暴露给其他节点进行内部通信的地址。
swarm init命令的输出如下所示:
由以上代码可以看到,该节点现在是一个manager,并且已经获得了可用于将其他节点添加到集群的命令。作为提高安全性的一种方法,只有当新节点包含Swarm初始化时生成的令牌时,才能将新节点添加到集群中。该令牌是作为docker swarm init命令的结果打印出来的。你可以复制粘贴输出中的代码或使用join-token命令,我们将使用后者。
目前,Swarm集群只包含一个虚拟机,我们会把另外两个节点添加到集群,但是在这样做之前,让我们讨论一下manager和worker之间的区别。
Swarm 管理器不断监视集群状态,并协调实际状态与表达的期望状态之间的任何差异。例如,如果你设置了一个服务需要运行一个容器的十个副本,并且一个工作机承载的其中两个副本崩溃了,那么管理器将创建两个新副本来替换失败的副本。
Swarm 管理器为正在运行且可用的工作机分配新的副本,管理器也可以作为一台工作机来使用。
通过执行swarm join-token命令,可以得到向集群添加其他节点所需的令牌。
获取用于添加管理器的令牌的命令如下所示:
同样,为了得到添加工作机的令牌,将运行以下命令:
这两种情况下都会得到很长的哈希字符串。工作机令牌的输出如下所示:
请注意,此令牌是在笔者的机器上生成的,在你的机器上它会有所不同。
让我们将令牌放入环境变量中,并将其他两个节点添加为工作机:(https://www.xing528.com)
现在使用令牌变量,可以发出以下命令:
刚刚运行的命令遍历节点2和节点3,并执行swarm join命令。我们设置了令牌、广播地址和管理器的地址。结果,两台机器作为工作者加入了集群。可以通过给node-1节点发送node ls命令来确认:
node ls命令的输出如下所示:
星号表示当前正在使用的节点,MANAGER STATUS表明node-1是leader(见图2-6)。
图2-6 三节点的Docker Swarm集群
在生产环境中,我们可能会将多个节点设置为管理器,这样,如果其中一个节点失败,则可避免整个部署停机。对于当前演示的目的,有一个管理器应该就够了。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
